Вывод с БД в таблицу [EXT JS]
Требуется осуществить вывод информации с БД (имя wp, одна таблица journal, три поля id surname name) в таблицу, grid как я понимаю. Я думаю кто то да сталкивался с таким делом - можете дать рабочий пример? Или обьяснить кому не тяжело... Нужно наверное взять данные json`ном с бд - передать в стор а потом в грид? Не могу никак все в кучу собрать... Жду помощи. За ранее благодарен Всем! :cray:
|
есть json данные взятые с бд...
есть json данные взятые с бд...
[{"id":1,"surname":"фывфыв","name":"фывф ввв"},{"id":2,"surname":"фывыфаппре ","n ame":"кнокно"},{"id":3,"surname":"Putin","na me":"Vladimir"},{"id":4,"surname":"M edvedev","name":"Dmitriy"},{"id":5,"surname":"Yanu kovich","name":"Viktor"}] Теперь надо создать хранилище? |
Спасибо с этим я тоже разобрался... Сейчас вот пытаюсь понять - этож
data:{'items':[.... Вместо этого надо подключить данные от сюда json_encode($rows); ? |
нафига, хотя может быть можно и так, только вряд ли нужно :)
store.load() - обычно достаточно :) ======================== Опять же пример из документации. Ext.define('userModel', { extend: 'Ext.data.Model', fields: ['name', 'surname'] }); var store = Ext.create('Ext.data.JsonStore', { model: 'userModel', proxy: { type: 'ajax', url: 'users.json',//адрес откуда берём инфу reader: { type: 'json', root: 'users' } } }); store.load();// грузим инфу с сервера ==================================== json файл приведите к виду. { success: true, users: [ {"id":1,"surname":"фывфыв","name":"фывф� �ввв"}, {"id":2,"surname":"фывыфаппре� �","n ame":"кнокно"},{"id":3,"surname":"Putin","na me":"Vladimir"}, {"id":4,"surname":"M edvedev","name":"Dmitriy"},{"id":5,"surname":"Yanu kovich","name":"Viktor"} ] } фывыфаппре� � - что за кракозябры ? |
Спасибо. Делаю. Кракозябры - там мое имя было и моей подруги (для конспирации) =)
|
Конспирируетесь говорите :)
Видимо у вас много подруг и половина из них на этом форуме :D |
Правильно я думаю?
Я вообще с программированием (php) дружу... А сегодня вот начальник (я стажер) сказал за день все освоить [extjs] (не, не все - а типо ознакомиться и показать результат)... я над простым выводом инфы с бд сижу уже 4 часа.. а даже до грида не дошел(
Так должно быть как то? --- ---------- Файл show.js ---------- Смысл: Задать модель, создать хранилище, а потом уже в грид и вывод? типо... Ext.define('showModel', { extend: 'Ext.data.Model', fields: ['id','surname', 'name', {name:'size', type: 'float'}, {name:'lastmod', type:'date', dateFormat:'timestamp'}] }); var store = Ext.create('Ext.data.JsonStore', { model: 'showModel', proxy: { type: 'ajax', url: 'get.json',//адрес откуда берём инфу reader: { type: 'json', root: 'images' (тут немного не понятно) } } }); store.load();// грузим инфу с сервера Вот файл get.php (он уже не нужен?) надо через *.json делать? <?php $mysql = mysql_connect('localhost', 'roor', '') or die("Could not connect: " . mysql_error()); mysql_select_db('wp'); $query = 'select * from journal'; $res = mysql_query($query); while ($row = mysql_fetch_assoc($res)) { for ($i=0; $i < mysql_num_fields($res); $i++) { $info = mysql_fetch_field($res, $i); $type = $info->type; if ($type == 'real') $row[$info->name] = doubleval($row[$info->name]); if ($type == 'int') $row[$info->name] = intval($row[$info->name]); } $rows[] = $row; } echo json_encode($rows); mysql_close($mysql); ?> |
не не! Я тут первый из моих друзей)
|
Цитата:
Цитата:
|
<!DOCTYPE html> <html> <head> <title>demo</title> <script src='http://dev.sencha.com/deploy/ext-4.0.7-gpl/ext-all.js'></script> <link rel="stylesheet" href="http://dev.sencha.com/deploy/ext-4.0.7-gpl/resources/css/ext-all.css"> <script> Ext.onReady(function() { var gc = [ { dataIndex: 'id', hidden: true }, { dataIndex: 'name', header: 'Имя' }, { dataIndex: 'surname', header: 'Фамилия', flex: 1 } ], sf = []; for(var i=0; i<gc.length; i++) { sf.push(gc[i].dataIndex); } Ext.define('User', { extend: 'Ext.data.Model', fields: sf }); var store = Ext.create('Ext.data.JsonStore', { model: 'User', data: [{"id":1,"surname":"фывфыв","name":"фывф� �ввв"},{"id":2,"surname":"фывыфаппре� �","name":"кнокно"},{"id":3,"surname":"Putin","name":"Vladimir"},{"id":4,"surname":"M edvedev","name":"Dmitriy"},{"id":5,"surname":"Yanu kovich","name":"Viktor"}] }); Ext.create('Ext.grid.Panel', { columns: gc, renderTo: Ext.getBody(), store: store }); }); </script> </head> <body></body> </html> Соответственно вместо статического указания данных вам нужно использовать proxy, примерно так: proxy: { type: 'ajax', url: 'get.php', reader: { type: 'json' } } |
nekto_O,
Все работает... Спасибище огромное! Буду разбираться дальше. Здоровья и удачи тебе добрый человек! |
Вложений: 1
ещё одна демка.
ТОлько данные грузятся с сервера и формируются в PHP скрипте. Смотреть после установки в денвер, иначе php несработает. Демка в вложении. Думаю допилить твой серверный код можно вот так. <?php $mysql = mysql_connect('localhost', 'roor', '') or die("Could not connect: " . mysql_error()); mysql_select_db('wp'); $query = 'select * from journal'; $res = mysql_query($query); while ($row = mysql_fetch_assoc($res)) { for ($i=0; $i < mysql_num_fields($res); $i++) { $info = mysql_fetch_field($res, $i); $type = $info->type; if ($type == 'real') $row[$info->name] = doubleval($row[$info->name]); if ($type == 'int') $row[$info->name] = intval($row[$info->name]); } $rows[] = $row; } $result=Array( "success"=>true, "users"=>$rows; ); echo json_encode($result); mysql_close($mysql); ?> |
DjDiablo,
Перезалей пожалуйста... Последний байт не грузит. |
DjDiablo,
Я на Zend'e сижу) |
Вложений: 1
перезалил, Хотя архив всёравно читается с ошибкой. Чо-то здесь не так с вложениями
перезалил на депозит. Качайте отсюда. На дипозите. Качать здесь |
DjDiablo,
Круть! Я понял! Еще раз спасибо. |
Вывести button!
Вот что есть...
============== index.html ============== <!DOCTYPE html> <html> <head> <title>Hospital</title> <script type="text/javascript" src='extjs/ext-all.js'></script> <link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css"> <script type="text/javascript" src='app.js'></script> </head> <body> </body> </html> =========== get.php =========== <?php $mysql = mysql_connect('localhost', 'root', '') or die("Could not connect: " . mysql_error()); mysql_select_db('hospital'); $query = 'select * from patient'; $res = mysql_query($query); while ($row = mysql_fetch_assoc($res)) { $rows[] = $row; } echo json_encode($rows); mysql_close($mysql); ?> ======= app.js ======= Ext.onReady(function() { var gc = [ { dataIndex: 'id', header: 'ID', /*hidden: true*/ }, { dataIndex: 'first_name', header: 'Name' }, { dataIndex: 'last_name', header: 'Surname' }, { dataIndex: 'time_1', header: 'time_1' }, { dataIndex: 'time_2', header: 'time_2' }, { dataIndex: 'time_3', header: 'time_3' }, { dataIndex: 'date', header: 'Date', flex: 1 }, ], sf = []; for(var i=0; i<gc.length; i++) { sf.push(gc[i].dataIndex); } Ext.define('User', { extend: 'Ext.data.Model', fields: sf }); var store = Ext.create('Ext.data.JsonStore', { model: 'User', proxy: { type: 'ajax', url: 'get.php', reader: { type: 'json' } } }); Ext.create('Ext.grid.Panel', { width: 700, columns: gc, renderTo: Ext.getBody(), store: store }); store.load(); }); Вопрос... Как зделать чтобы в time_1 выводилась кнопочка при нажатии на которою появлялся лайтбокс? |
по простому кнопку можно воткнуть так.
{ dataIndex: 'time_1', header: 'time_1' , renderer: function(val){ return '<input type="button" click="alert('+val+')" />'; } }, более продвинутый вариант. { dataIndex: 'time_1', header: 'time_1' , function extjsRenderer(value) { var id = Ext.id(); //функция запустится только через 25 милисекунд, это необходимо чтобы extjs успел прорисовать таблицу (function() { var btn = new Ext.Button({ renderTo: id, text: 'Price: ' + value }); }).defer(25); return (String.format('<div id="{0}"></div>', id)); } } http://docs.sencha.com/ext-js/4-1/#!...t-method-defer Родное средство дл создания конопок в таблице, как я понял только иконки { xtype:'actioncolumn', items: [{ icon: 'http://im4-tub-ru.yandex.net/i?id=311939905-44-72', tooltip: 'hello', handler: function(grid, rowIndex, colIndex) { alert("hello world"); } }] }, |
расположение на экране
Спасибо! А как заняться выводом(расположением на экране)? Хочется чтоб по центру экрана выводилась табличка..?!
|
Как вывести grid по центру? .. layout: 'ux.center', не поддается че то (мож есть у него какие секреты?)
|
Не пойму плохо или хорошо - решилось такой строчкой
style: 'margin-top: 20px; margin-left: 44%', :yes: |
grid.center(); |
nekto_O,
Интересно! Как применить? |
Продолжаю работу...
===== app.js ===== Ext.onReady(function() { var gc = [ { dataIndex: 'id', header: 'ID' }, { dataIndex: 'first_name', header: 'Name' }, { dataIndex: 'last_name', header: 'Sursame' }, { dataIndex: 'date', header: 'Date' }, ], sf = []; for(var i=0; i<gc.length; i++) { sf.push(gc[i].dataIndex); } Ext.define('User', { extend: 'Ext.data.Model', fields: sf }); var store = Ext.create('Ext.data.JsonStore', { model: 'User', proxy: { type: 'ajax', url: 'get.php', reader: { type: 'json' } } }); Ext.create('Ext.panel.Panel', { //title: '____Show patients by date:____', //width: 180, style: 'margin-top: 20px; margin-left: 44%', renderTo: Ext.getBody(), border: false, items: [{ xtype: 'datepicker', maxDate: new Date(), handler: function(picker, date) { // do something with the selected date } }] }); store.load(); Ext.create('Ext.grid.Panel', { width: 310, style: 'margin-top: 20px; margin-left: 40%', layout: { type:'hbox', pack:'center' }, columns: [ { dataIndex: 'id', header: 'ID', hidden: true }, { dataIndex: 'first_name', header: 'Name' }, { dataIndex: 'last_name', header: 'Surname' }, { //header: 'layout', xtype:'actioncolumn', width:20, items: [ { icon: 'extjs/resources/themes/images/default/shared/right-btn.gif', handler: function showWindow(){ if(!win){ var win = new Ext.Window({ width:500, height:300, title: 'TEST', html:'<h1>My first lightBOX </h2>', layout:'fit', bodyStyle:{'background-color': '#FFFFFF'}, modal: true }) } win.show(); } }] }, { //header: 'layout', xtype:'actioncolumn', width:20, items: [ { icon: 'extjs/resources/themes/images/default/shared/right-btn.gif', handler: function showWindow(){ if(!win){ var win = new Ext.Window({ width:500, height:300, title: 'TEST', html:'<h1>My first lightBOX </h2>', layout:'fit', bodyStyle:{'background-color': '#FFFFFF'}, modal: true }) } win.show(); } }] }, { dataIndex: 'date', header: 'Date' } ], renderTo: Ext.getBody(), store: store }); }); ХОЧУ ОСУЩЕСТВИТЬ: Чтобы пока не выбрана дата ничего не выводилось, а при нажатии на определенною дату - производилась выборка с базы данных по date... Работаю в этом направление... Кто может что подсказать, чему поучить, показать - милости прошу! За ранее благодарен! |
Пока вот что есть..
![]() |
С чего начать... вот здесь
items: [{ xtype: 'datepicker', maxDate: new Date(), handler: function(picker, date) { // do something with the selected date } }] ... надо написать чтоб при выборе даты производился вывод из бд данных с этой датой, да?! ***** app.js * ***** Ext.onReady(function() { var store = Ext.create('Ext.data.JsonStore', { proxy: { type: 'ajax', url: 'get.php', reader: { type: 'json' } }, fields:['id','first_name','last_name','date'] }); Ext.create('Ext.panel.Panel', { //title: '____Show patients by date:____', //width: 180, style: 'margin-top: 20px; margin-left: 44%', renderTo: Ext.getBody(), border: false, items: [{ xtype: 'datepicker', maxDate: new Date(), handler: function(picker, date) { // do something with the selected date } }] }); store.load(); Ext.create('Ext.grid.Panel', { width: 310, style: 'margin-top: 20px; margin-left: 40%', layout: { type:'hbox', pack:'center'}, columns: [ { dataIndex: 'id', header: 'ID', hidden: true }, { dataIndex: 'first_name', header: 'Name' }, { dataIndex: 'last_name', header: 'Surname' }, { //header: 'layout', xtype:'actioncolumn', width:20, items: [ {icon: 'extjs/resources/themes/images/default/shared/right-btn.gif', handler: function showWindow(){ if(!win){ var win = new Ext.Window({ width:500, height:300, title: 'TEST', html:'<h1>My first lightBOX </h2>', layout:'fit', bodyStyle:{'background-color': '#FFFFFF'}, modal: true }) } win.show(); } }] }, { dataIndex: 'date', header: 'Date' } ], renderTo: Ext.getBody(), store: store }); }); |
Вот я получаю выбранную дату
var date = Ext.Date.format(date, 'Y-m-d'); в формате гггг-мм-дд... Теперь как дальше? Передать в php скрипт который выполнит sql запрос? |
Получил дату на которую кликнул
handler: function(picker, date) { var date = Ext.Date.format(date, 'Y-m-d'); Ext.Ajax.request({ url: 'dget.php', //jsonData: { date: date } params: { date: date } }); } Пишу в dget.php echo $_POST['date'] - ее не видно... Что не так? |
Цитата:
|
nekto_O,
Спасибо за ответ. А не видно в php-скрипте в котором я хочу по этой дате, которую выбрал кликом на календарике, сделать выборку и вывести обратно в мой грид. После Ext.Ajax.request({ url: 'dget.php', jsonData: { date: date } и firebug показывает что отправляет date: "2012-06-12" к примеру... Я упорно ищу эту date в dget.php... |
params: { date: Ext.Date.format(date, 'Y-m-d') } в php скрипте var_dump($_POST); пустой массив принтует? |
nekto_O,
Я б Вас расцеловал :dance: Ответ пришел... ![]() var_dump($_POST); показал array(1) { ["date"]=> string(10) "2012-06-18" } Спасибо огромное, очередной раз!!! |
... как то странно, мой код тоже заработал... наверное влияние солнечной радиации)
|
handler: function(picker, date) { var date = Ext.Date.format(date, 'Y-m-d'); Ext.Ajax.request({ url: 'dget.php', //jsonData: { jdate: jdate }, //params: { date: Ext.Date.format(date, 'Y-m-d') } params: { date: date } }); } это первоначальный вариант - и работает... не пойму, что не нравилось коду 5 часов назад?.. |
=====
app.js ===== Ext.onReady(function() { var store = Ext.create('Ext.data.JsonStore', { proxy: { type: 'ajax', url: 'get.php', reader: { type: 'json' } }, fields:[ 'id', 'first_name', 'last_name', 'date' ] }); store.load(); Ext.create('Ext.panel.Panel', { style: 'margin-top: 20px; margin-left: 44%', renderTo: Ext.getBody(), border: false, items: [{ xtype: 'datepicker', maxDate: new Date(), handler: function(picker, date) { var date = Ext.Date.format(date, 'Y-m-d'); var flag = true; Ext.Ajax.request({ url: 'dget.php', params: {date: date} }); } }] }); Ext.create('Ext.grid.Panel', { width: 310, style: 'margin-top: 20px; margin-left: 40%', layout: { type:'hbox', pack:'center'}, columns:[ {dataIndex: 'id', header: 'ID', hidden: true}, {dataIndex: 'first_name', header: 'Name'}, {dataIndex: 'last_name', header: 'Surname'}, {xtype:'actioncolumn', width:20, items: [{ icon: 'extjs/resources/themes/images/default/shared/right-btn.gif', handler: function showWindow(){ if(!win){ var win = new Ext.Window({ width:500, height:300, title: 'TEST', html:'<h1>My first lightBOX </h2>', layout:'fit', bodyStyle:{'background-color': '#FFFFFF'}, modal: true }) } win.show(); } }] }, { dataIndex: 'date', header: 'Date' }], renderTo: Ext.getBody(), store: store }); }); Не могу реализовать такой алгоритм: 1)Выводиться панелька с календариком, и ждем пока я не выберу дату... 2) Если выбрал то делаем выборку по дате и вырисовуем грид с выбраными датами... Что то запутался( |
XMLHttpRequest'ом?
|
Тоесть, я то получаю данные с пхп скрипта, но стор и грид то уже отработали свое... Получается при нажатии пустой грид - что весьма логично)
|
Цитата:
store.load({ params: { ... } }); |
Вроде этого?
Ext.create('Ext.panel.Panel', { style: 'margin-top: 20px; margin-left: 44%', renderTo: Ext.getBody(), border: false, items: [{ xtype: 'datepicker', maxDate: new Date(), handler: function(picker, date) { var date = Ext.Date.format(date, 'Y-m-d'); Ext.Ajax.request({ url: 'put.php', params: {date: date} }); store.load({ // так параметры указывать? params: { id: 'id', first_name: 'first_name', last_name: 'last_name', date: 'date' } }); } }] }); |
Вот скрипт
====== put.php ====== <?php include 'conf.php'; $date = $_POST['date']; $query = "select * from patient where date='$date'"; $res = mysql_query($query); if (mysql_num_rows($res) == 0) { echo "On this day, the patients did not come!"; exit; } while ($row = mysql_fetch_assoc($res)) { $rows[] = $row; } echo json_encode($rows); mysql_close($db); ?> Он дает в ответ на обращению к нему вот такое например по дате 06-18 Код:
[{"id":"1","first_name":"Vasiliy","last_name":"Pupkin","date":"2012-06-18"},{"id":"2","first_name":"Ivan","last_name":"Ivankin","date":"2012-06-18"}] |
Часовой пояс GMT +3, время: 10:48. |