20.05.2015, 16:45
|
Интересующийся
|
|
Регистрация: 06.02.2012
Сообщений: 21
|
|
Вывести данные из php
Здравствуйте.
Только сегодня познакомился с ExtJs. В версии 4.2.1 нашел необходимый мне пример 'custom-form'.
Теперь необходимо передавать в форму свои данные которые находятся в БД.
Начал 'смотреть' файл custom-form.js.
Ext.Loader.setConfig({enabled: true});
Ext.Loader.setPath('Ext.ux', '../ux');
Ext.require([
'Ext.data.*',
'Ext.panel.Panel',
'Ext.view.View',
'Ext.layout.container.Fit',
'Ext.toolbar.Paging',
'Ext.ux.form.SearchField',
'Ext.ux.DataTip'
]);
Ext.define('Post', {
extend: 'Ext.data.Model',
idProperty: 'post_id',
fields: [
{name: 'postId', mapping: 'post_id'},
{name: 'title', mapping: 'topic_title'},
{name: 'topicId', mapping: 'topic_id'},
{name: 'author', mapping: 'author'},
{name: 'lastPost', mapping: 'post_time', type: 'date', dateFormat: 'timestamp'},
{name: 'excerpt', mapping: 'post_text'}
]
});
Ext.onReady(function(){
var forumId = 4;
var store = Ext.create('Ext.data.Store', {
model: 'Post',
proxy: {
type: 'jsonp',
url: 'http://sencha.com/forum/topics-remote.php',
extraParams: {
forumId: forumId
},
reader: {
type: 'json',
root: 'topics',
totalProperty: 'totalCount'
}
},
listeners: {
beforeload: function(){
var params = store.getProxy().extraParams;
if (params.query) {
delete params.forumId;
} else {
params.forumId = forumId;
}
}
}
});
store.loadPage(1);
var resultTpl = Ext.create('Ext.XTemplate',
'<tpl for=".">',
'<div class="search-item">',
'<h3><span>{lastPost:this.formatDate}<br>by {author}</span>',
'<a href="http://sencha.com/forum/showthread.php?t={topicId}&p={postId}" target="_blank">{title}</a></h3>',
'<p>{excerpt}</p>',
'</div></tpl>',
{
formatDate: function(value){
return Ext.Date.format(value, 'M j, Y');
}
});
var panel = Ext.create('Ext.panel.Panel', {
title: 'Forum Search',
height: 300,
width: 600,
renderTo: 'search-panel',
id: 'search-results',
layout: 'fit',
items: {
overflowY: 'auto',
xtype: 'dataview',
tpl: resultTpl,
store: store,
itemSelector: 'div.search-item',
emptyText: '<div class="x-grid-empty">No Matching Threads</div>'
},
dockedItems: [{
dock: 'top',
xtype: 'toolbar',
items: {
width: 400,
fieldLabel: 'Search',
labelWidth: 50,
xtype: 'searchfield',
store: store
}
}, {
dock: 'bottom',
xtype: 'pagingtoolbar',
store: store,
pageSize: 25,
displayInfo: true,
displayMsg: 'Topics {0} - {1} of {2}',
emptyMsg: 'No topics to display'
}]
});
});
Есть ли пример исходника файла topics-remote.php, чтобы увидеть как хранятся там данные?
Заранее спасибо.
|
|
21.05.2015, 08:21
|
Профессор
|
|
Регистрация: 19.11.2012
Сообщений: 178
|
|
post_id
topic_title
topic_id
author
post_time timestamp
post_text
|
|
21.05.2015, 14:03
|
Интересующийся
|
|
Регистрация: 06.02.2012
Сообщений: 21
|
|
Спасибо за ответ, но можно по-подробней?
Хотя бы маленький пример.
Заранее спасибо.
Последний раз редактировалось nik_neman, 21.05.2015 в 15:03.
|
|
22.05.2015, 02:14
|
Профессор
|
|
Регистрация: 19.11.2012
Сообщений: 178
|
|
Нужно сформировать похожий JSON, как по ссылке в вашем примере. Это можно посмотреть в браузере.
http://sencha.com/forum/topics-remote.php
Из PHP обращаетесь к базе и выбираете из нужные таблиц строки. Собираете их в ассоциативный массив. Затем преобразуете его в строку JSON и возвращаете её через echo.
Используете $_GET['forum_id'], mysqli, json_encode.
Соответствия полей определены у вас в модели через свойство mapping. Но можно обойтись и без этого, а отправить из PHP те же названия полей, что используются в JavaScript'е.
Последний раз редактировалось novikov, 22.05.2015 в 12:47.
|
|
22.05.2015, 12:25
|
Интересующийся
|
|
Регистрация: 06.02.2012
Сообщений: 21
|
|
Попробовал вывести статические данные типа вот так:
$arr[] = array("topic_title"=>"Status bar error with IFrames", "author"=>"Daz", "post_text"=>"get better");
$json = json_encode($arr);
echo $json;
Нечего не выводит
Из файла topics-remote.php делал json_decode текста, чтобы посмотреть пример ассоциативного массива, но получал null.
Последний раз редактировалось nik_neman, 22.05.2015 в 12:28.
|
|
22.05.2015, 12:45
|
Профессор
|
|
Регистрация: 19.11.2012
Сообщений: 178
|
|
NULL из-за того, что не были заэкранированы одиночные кавычки:
' -> \'
var_dump(var_export(json_decode('...', true)));
array (
'totalCount' => '6679',
'topics' =>
array (
0 =>
array (
'post_id' => '604220',
'topic_title' => 'Status bar error with IFrames',
'topic_id' => '134120',
'author' => 'Daz',
'post_time' => '1305857168',
'post_text' => 'Ext version tested:
Ext 3.3.3
Adapter used:
ext
css used:
default ext-all.css
Browser versions tested against:
FF4 (firebug 1.7.1 installed)
...',
'forum_title' => 'Ext 3.x: Bugs',
'forumid' => '41',
'reply_count' => '0',
),
1 =>
Последний раз редактировалось novikov, 22.05.2015 в 13:39.
|
|
22.05.2015, 13:59
|
Интересующийся
|
|
Регистрация: 06.02.2012
Сообщений: 21
|
|
Спасибо за кавычки)
|
|
22.05.2015, 14:08
|
Интересующийся
|
|
Регистрация: 06.02.2012
Сообщений: 21
|
|
echo выводить переменную json?
|
|
22.05.2015, 14:16
|
Интересующийся
|
|
Регистрация: 06.02.2012
Сообщений: 21
|
|
В php файле сделал так
$arr[] = array(
"totalCount" => '6679',
"topics" =>
array(
array(
"post_id" => "604220",
"topic_title" => "Status bar error with IFrames",
"topic_id" => "134120",
"author" => "Daz",
"post_time" => "1305857168",
"post_text" => "Ext version tested:",
"forum_title" => "EXT",
"forumid" => "41",
"reply_count" => "0"
)
)
);
$json = json_encode($arr);
echo $json;
Нечего не выводит.
Если объявить $arr, то в консоли ошибка - SyntaxError: missing ; before statement
{"totalCount":"6679","topics":[{"post_id":"604220","topic_title":"Status
Последний раз редактировалось nik_neman, 22.05.2015 в 14:45.
|
|
22.05.2015, 14:45
|
Профессор
|
|
Регистрация: 19.11.2012
Сообщений: 178
|
|
Квадратные скобки после имени переменной не нужны. Количество записей в totalCount должно быть реальным. Обычно этот параметр используется для разбивки результата запроса на страницы.
$arr = array(
"totalCount" => '10',
"topics" =>
array(
array(
"post_id" => "604220",
"topic_title" => "Status bar error with IFrames",
"topic_id" => "134120",
"author" => "Daz",
"post_time" => "1305857168",
"post_text" => "Ext version tested:",
"forum_title" => "EXT",
"forumid" => "41",
"reply_count" => "0"
)
)
);
$json = json_encode($arr);
echo $json;
Последний раз редактировалось novikov, 22.05.2015 в 15:25.
|
|
|
|