Добрый день,
Когда я начинал писать на ExtJS, именно примеров с PHP кодом в интернете не хватало, статьи были, но все они сводились к тому, что был код ExtJS (переводы книг) без PHP. Поэтому я и решил написать эту статью.
Для начала, несколько советов начинающим ExtJSникам:
В первых: Не знаете JavaScript? не поленитесь прочитать книгу по JS.
Во вторых: Зайдите на www.extjs.com там много хороших примеров ExtJS с PHP.
И в третьих: Пользуйтесь docs и examples из библиотеки ExtJS.
Теперь собственно к примеру. Напишем маленькую программу для занесения в БД документов накладных. Накладная будет состоять из номера, даты, поля продавец (выборка из БД), поля покупатель (выборка из БД), таблицы товаров накладной и таблицы существующих у нас товаров (из БД). Кнопкой «Cохранить» накладная будет отправляется в БД.
Этого примера хватит для того, чтобы понять основу взаимодействия ExtJS и PHP. И так приступим, наша форма будет выглядеть так:
Для начала создадим следующую структуру каталогов и файлов:
ext — библиотека ExtJS
index.php — без комментариев :)
app.js — сама программа
Также у нас будут ещё файлы:
config.php — подключение к БД
get_org.php — получение списка организаций из БД в JSON формате
get_tovar.php — получение списка товаров из БД в JSON формате
save.php — cохранение формы в БД
Код index.php:
Код app.js:
Втавляем в самом начале.
Шаблон для отображения выпадающего списка.
Хранилище данных для списка организаций, данные получаем из БД через скрипт get_org.php, скрипт возвращает нам JSON ответ. Пример скрипта будет приведен ниже.
Комбобоксы для списка продавец и покупатель. tpl: _combo_tpl — тут используем ранее подготовленный шаблон.
Хранилище для списка всех Товаров (_store_tovar_all) получает данные из БД через скрипт get_tovar.php, скрипт возвращает JSON. Параметр type: 'float' больше тут нужен для правльной сортировки данных в гриде.
Поля, которые будут использоваться в гридах.
Грид списка товаров документа, с кнопкой отчистки грида и удаления выделенной позиции.
Грид списка всех Товаров. rowdblclick — это событие двойного нажатия на гриде. При нажатии открывается окно (_win) для ввода количества товара и цены. После нажатия в окне кнопки «Сохранить» или ENTER'а уже скорректированные данные попадают в грид списка товаров документа. keys — приведен здесь в качестве примера работы в гриде клавишами. key: 13, // Enter key в хандлере можно прописать событие для кнопки ENTER такие же как и при двойном клике на гриде.
Начинаем генерацию формы.
Тут основная форма документа. save.php — это скрипт для сохранения данных. _combo_saller, _combo_bayer, _grid_tovar, _grid_tovar_all — это ранее нами подготовленные данные. При нажатии на кнопку «Сохранить» из грида товаров документа формируется переменная jsonData которая содержит грид товаров документа в JSON формате. Далее в скрипт save.php подготавливаются и передаются параметры (params:), которые не передаются по умолчанию формой. Параметры prod_id, pok_id и data. Дело в том что, из комбобоксов по умолчанию формой передается отображаемые данные, конкретно название организаций (displayField: 'name'), а нам нужны значения ИД (valueField: 'id_org'), вот мы получаем и передаем их отдельно (prod_id: _form_sf.getForm().findField('prod').getValue(true) и тд.). После скрипт save.php обрабатывает и нам возвращает ответ в котором передает нам информацию о том успешно (success:) прошло сохранение или нет (failure:), также скрипт может вернуть ошибки в конкретные поля формы. Пример save.php будет приведен ниже.
И последнее, конфигурация того как будут вести себя Drag and Drop наших гридов.
Теперь к кодам на php, и так:
Код config.php: (настройка БД)
Код get_org.php: (получение списка организаций)
$_POST['query'] — запрос, передаваемый из комбобокса при написании в нем чего-нибудь (фильтр). У нас в комбобоксе стоит (minChars: 2) это значит, что если в комбобоксе написать более двух символов, обновится хранилище (заново выполнится скрипт хранилища, у нас это get_org.php) в скрипт будет передан запрос query. Таким образом, мы можем фильтровать список организации из БД.
$u2koi = array… — используется для корректного получения русских текстов из БД.
Код get_tovar.php: (получение списка товаров)
Код save.php: (и сохраняем)
Исходники создания БД выкладывать не буду, из скриптов видно какие таблицы и поля используются. При необходимости вы можете добавить или изменить поля. А скрипт save.php переписать под ваши нужды. Эта статья своего рода шаблон для начинающих.
Ну вот пока и все. Всем спасибо за внимание :) Успехов в написании на ExtJS.
Когда я начинал писать на ExtJS, именно примеров с PHP кодом в интернете не хватало, статьи были, но все они сводились к тому, что был код ExtJS (переводы книг) без PHP. Поэтому я и решил написать эту статью.
Для начала, несколько советов начинающим ExtJSникам:
В первых: Не знаете JavaScript? не поленитесь прочитать книгу по JS.
Во вторых: Зайдите на www.extjs.com там много хороших примеров ExtJS с PHP.
И в третьих: Пользуйтесь docs и examples из библиотеки ExtJS.
Теперь собственно к примеру. Напишем маленькую программу для занесения в БД документов накладных. Накладная будет состоять из номера, даты, поля продавец (выборка из БД), поля покупатель (выборка из БД), таблицы товаров накладной и таблицы существующих у нас товаров (из БД). Кнопкой «Cохранить» накладная будет отправляется в БД.
Этого примера хватит для того, чтобы понять основу взаимодействия ExtJS и PHP. И так приступим, наша форма будет выглядеть так:
Для начала создадим следующую структуру каталогов и файлов:
ext — библиотека ExtJS
index.php — без комментариев :)
app.js — сама программа
Также у нас будут ещё файлы:
config.php — подключение к БД
get_org.php — получение списка организаций из БД в JSON формате
get_tovar.php — получение списка товаров из БД в JSON формате
save.php — cохранение формы в БД
Код index.php:
- <html>
- <head>
- <title>ExtJS и PHP</title>
- <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
-
- <link rel="stylesheet" type="text/css" href="lib/ext/resources/css/ext-all.css"/>
-
- <script type="text/javascript" src="lib/ext/adapter/ext/ext-base.js"></script>
- <script type="text/javascript" src="lib/ext/ext-all.js"></script>
- <script type="text/javascript" src="app.js"></script>
- <style type="text/css">
- .movie_form {
- padding: 10px;
- }
- .movie-item {
- font:normal 12px tahoma, arial, helvetica, sans-serif;
- line-height:150%;
- padding:5px 20px 5px 10px;
- border:1px solid #fff;
- border-bottom:1px solid #eeeeee;
- white-space:normal;
- color:#555;
- }
- .movie-item h2 {
- display:block;
- font:inherit;
- font-weight:bold;
- color:#336699;
- }
- .movie-item h2 span {
- float: right;
- font-weight:normal;
- color:#555;
- margin:0 0 5px 5px;
- width:100px;
- display:block;
- clear:none;
- }
- </style>
- <script type="text/javascript" src="ext-lang-ru.js"></script>
- </head>
- <body>
- <div>
- <div class="movie_form" id="form"></div>
- </div>
- </body>
- </html>
* This source code was highlighted with Source Code Highlighter.
Код app.js:
- Ext.BLANK_IMAGE_URL = 'lib/ext/resources/images/default/s.gif';
- Ext.QuickTips.init();
* This source code was highlighted with Source Code Highlighter.
Втавляем в самом начале.
- // Шаблон для КомбаБокса
- var _combo_tpl = new Ext.XTemplate(
- '<tpl for=\".\"><div class=\"movie-item\">',
- '<h2><span>ИД: {id_org}</span>{name}</h2>',
- 'ИНН: {inn}',
- '</div></tpl>'
- );
* This source code was highlighted with Source Code Highlighter.
Шаблон для отображения выпадающего списка.
- // Хранилище списка Организаций
- var _store_saller = new Ext.data.Store({
- reader: new Ext.data.JsonReader({root : 'rows', id : 'id_org', fields : ['id_org', 'name', 'inn']}),
- proxy: new Ext.data.HttpProxy({url : 'get_org.php'})
- });
* This source code was highlighted with Source Code Highlighter.
Хранилище данных для списка организаций, данные получаем из БД через скрипт get_org.php, скрипт возвращает нам JSON ответ. Пример скрипта будет приведен ниже.
- // КомбоБокс поля Продавец
- var _combo_saller = {
- xtype: 'combo', name : 'prod', fieldLabel: 'Продавец', store: _store_saller, anchor: '100%', emptyText: 'Выберите ...',
- valueField: 'id_org', displayField: 'name', mode : 'remote', triggerAction: 'all',
- tpl: _combo_tpl, itemSelector: 'div.movie-item', minChars : 2
- }
- // КомбоБокс поля Покупатель
- var _combo_bayer = {
- xtype: 'combo', name : 'pok', fieldLabel: 'Покупатель', store: _store_saller, anchor: '100%', emptyText: 'Выберите ...',
- valueField: 'id_org', displayField: 'name', mode : 'remote', triggerAction: 'all',
- tpl: _combo_tpl, itemSelector: 'div.movie-item', minChars : 2
- }
* This source code was highlighted with Source Code Highlighter.
Комбобоксы для списка продавец и покупатель. tpl: _combo_tpl — тут используем ранее подготовленный шаблон.
- // Хранилище для списка Товара текущего документа
- var _store_tovar = new Ext.data.JsonStore({
- root : 'tovar',
- fields : [
- {name: 'id', type: 'float'},
- {name: 'name'},
- {name: 'col', type: 'float'},
- {name: 'price', type: 'float'}
- ]
- });
- // Хранилище для списка всех Товаров
- var _store_tovar_all = new Ext.data.JsonStore({
- url : 'get_tovar.php',
- root : 'tovar',
- fields : [
- {name: 'id', type: 'float'},
- {name: 'name'},
- {name: 'col', type: 'float'},
- {name: 'price', type: 'float'}
- ],
- autoLoad : true
- });
* This source code was highlighted with Source Code Highlighter.
Хранилище для списка всех Товаров (_store_tovar_all) получает данные из БД через скрипт get_tovar.php, скрипт возвращает JSON. Параметр type: 'float' больше тут нужен для правльной сортировки данных в гриде.
- // Поля для грида _grid_tovar
- var _grid_columns = [
- { header: "ИД", width: 30, dataIndex: 'id', sortable: true, hidden:true },
- { id: 'title', header: "Наименование", width: 180, dataIndex: 'name', sortable: true },
- { header: "Количество", width: 85, dataIndex: 'col', sortable: true },
- { header: "Цена", width: 85, dataIndex: 'price', sortable: true, align: 'center' }
- ]
- // Поля для грида _grid_tovar_all
- var _grid_columns_all = [
- { header: "ИД", width: 30, dataIndex: 'id', sortable: true, hidden:true },
- { id: 'title', header: "Наименование", width: 180, dataIndex: 'name', sortable: true },
- { header: "Количество", width: 85, dataIndex: 'col', sortable: true },
- { header: "Цена", width: 85, dataIndex: 'price', sortable: true, align: 'center' }
- ]
* This source code was highlighted with Source Code Highlighter.
Поля, которые будут использоваться в гридах.
- // Грид списка Товаров текущего документа
- var _grid_tovar = new Ext.grid.GridPanel({
- store : _store_tovar, //Хранилище
- enableDragDrop : true,
- ddGroup : '_grid_tovar_DDGroup',
- columns : _grid_columns,
- stripeRows : true,
- autoExpandColumn : 'title',
- frame : true,
- height : 200,
- loadMask : true,
- columnLines : true,
- clicksToEdit : 1,
- //border: false,
- tbar: {
- items: [
- {
- text: 'Отчистить',
- handler: function() {
- _grid_tovar.getView().refresh();
- _grid_tovar_all.getView().refresh();
- _grid_tovar.store.removeAll();
- }
- },{
- text: 'Удалить позицию',
- handler: function() {
- var s = _grid_tovar.getSelectionModel().getSelections();
- for(var i = 0, r; r = s[i]; i++){
- _grid_tovar.store.remove(r);
- }
- }
- }
- ]
- }
- });
* This source code was highlighted with Source Code Highlighter.
Грид списка товаров документа, с кнопкой отчистки грида и удаления выделенной позиции.
- // Грид списка всех Товаров
- var _grid_tovar_all = new Ext.grid.GridPanel({
- store : _store_tovar_all,
- enableDragDrop : true,
- ddGroup : '_grid_tovar_all_DDGroup',
- columns : _grid_columns_all,
- stripeRows : true,
- autoExpandColumn : 'title',
- frame : true,
- height : 200,
- loadMask : true,
- columnLines : true,
- listeners: {
- rowdblclick: function(_grid_tovar_all, row, e) {
- var record_all = _grid_tovar_all.getStore().getAt(row);
- var rec = record_all.copy();
- var _button = new Ext.Button({
- text : 'Сохранить',
- handler : function(){
- rec.data['col'] = _panel.getForm().findField('fcol').getValue(true);
- rec.data['price'] = _panel.getForm().findField('fprice').getValue(true);
- _grid_tovar.store.insert(0, rec);
- _grid_tovar.getView().refresh();
- _win.close();
- }
- })
- var _panel = new Ext.FormPanel({
- border: false, frame: true,
- items: [
- {xtype: 'textfield', name: 'fcol', fieldLabel: 'Количество', value: '1'},// selectOnFocus: true},
- {xtype: 'textfield', name: 'fprice', fieldLabel: 'Цена', value: rec.get('price')}//, selectOnFocus: true}
- ]
- })
- var _win = new Ext.Window({
- title: rec.get('name'),
- border: false, resizable: false, width: 270,
- items: [_panel],
- buttons: [_button],
- keys: [{
- key: 13, // Enter key
- handler: function(){
- _button.focus();
- }
- }],
- listeners: {
- activate: function() {
- _panel.getForm().findField('fcol').focus(true,250);
- }
- }
- }).show();
- }
- },
- keys: [
- {
- key: 27, // Esc key
- handler: function(){
- alert('Esc');
- }
- },{
- key: 13, // Enter key
- handler: function(){
- alert('Enter');
- }
- }
- ]
- });
* This source code was highlighted with Source Code Highlighter.
Грид списка всех Товаров. rowdblclick — это событие двойного нажатия на гриде. При нажатии открывается окно (_win) для ввода количества товара и цены. После нажатия в окне кнопки «Сохранить» или ENTER'а уже скорректированные данные попадают в грид списка товаров документа. keys — приведен здесь в качестве примера работы в гриде клавишами. key: 13, // Enter key в хандлере можно прописать событие для кнопки ENTER такие же как и при двойном клике на гриде.
- Ext.onReady(function(){
* This source code was highlighted with Source Code Highlighter.
Начинаем генерацию формы.
- // Основня форма документа
- var _form_sf = new Ext.FormPanel({
- id: 'id_form_sf',
- url : 'save.php',
- renderTo : 'form',
- frame : true,
- title : 'Счет-Фактура',
- width : 600,
- items : [
- {
- layout:'column',
- items:[
- {
- columnWidth:.6,
- layout: 'form',
- items: [{xtype : 'textfield', id: 'track-tip-num', name : 'title', fieldLabel : 'Номер', anchor : '95%'}]
- },{
- columnWidth:.4,
- layout: 'form',
- labelWidth: 40,
- items: [{xtype : 'datefield', id: 'track-tip-data', name : 'date', fieldLabel : 'Дата', anchor : '100%'}]
- }
- ]
- },
- _combo_saller,
- _combo_bayer,
- _grid_tovar,
- _grid_tovar_all
- ],
- buttons : [
- {
- text : 'Сохранить',
- handler : function(){
-
- var modifiedRecords = _grid_tovar.store.getRange();
- if (modifiedRecords.length > 0) {
- var jsonData="[";
- jsonData += Ext.util.JSON.encode(modifiedRecords[0].data);
- for(var cnt = 1; cnt < modifiedRecords.length; cnt++){
- var record = modifiedRecords[cnt];
- jsonData += ',' + Ext.util.JSON.encode(record.data);
- }
- jsonData = jsonData.substring(0,jsonData.length) + "]";
- };
-
- _form_sf.getForm().submit({
- //waitMsg : 'Передача данных...',
- params: {
- prod_id: _form_sf.getForm().findField('prod').getValue(true),
- pok_id: _form_sf.getForm().findField('pok').getValue(true),
- data: jsonData
- },
- success : function(f,a){
- Ext.Msg.alert('Готово', a.result.truemsg);
- },
- failure : function(f,a){
- Ext.Msg.alert('Ошибка', a.result.errormsg);
- }
- })
- }
- },{
- text : 'Отчистить',
- handler : function(){
- _form_sf.getForm().reset();
- _grid_tovar.store.removeAll();
- }
- }
- ]
- });
* This source code was highlighted with Source Code Highlighter.
Тут основная форма документа. save.php — это скрипт для сохранения данных. _combo_saller, _combo_bayer, _grid_tovar, _grid_tovar_all — это ранее нами подготовленные данные. При нажатии на кнопку «Сохранить» из грида товаров документа формируется переменная jsonData которая содержит грид товаров документа в JSON формате. Далее в скрипт save.php подготавливаются и передаются параметры (params:), которые не передаются по умолчанию формой. Параметры prod_id, pok_id и data. Дело в том что, из комбобоксов по умолчанию формой передается отображаемые данные, конкретно название организаций (displayField: 'name'), а нам нужны значения ИД (valueField: 'id_org'), вот мы получаем и передаем их отдельно (prod_id: _form_sf.getForm().findField('prod').getValue(true) и тд.). После скрипт save.php обрабатывает и нам возвращает ответ в котором передает нам информацию о том успешно (success:) прошло сохранение или нет (failure:), также скрипт может вернуть ошибки в конкретные поля формы. Пример save.php будет приведен ниже.
- // Конфигурация Drag and Drop для _grid_tovar
- var firstGridDropTargetEl = _grid_tovar.getView().scroller.dom;
- var firstGridDropTarget = new Ext.dd.DropTarget(firstGridDropTargetEl, {
- ddGroup : '_grid_tovar_all_DDGroup',
- notifyDrop : function(ddSource, e, data){
- var records = ddSource.dragData.selections;
- _grid_tovar.store.insert(0, records);
- _grid_tovar.getView().refresh();
- return true
- }
- });
- // Конфигурация Drag and Drop для _grid_tovar_all
- var secondGridDropTargetEl = _grid_tovar_all.getView().scroller.dom;
- var secondGridDropTarget = new Ext.dd.DropTarget(secondGridDropTargetEl, {
- ddGroup : '_grid_tovar_DDGroup',
- notifyDrop : function(ddSource, e, data){
- var records = ddSource.dragData.selections;
- Ext.each(records, ddSource.grid.store.remove, ddSource.grid.store);
- _grid_tovar_all.getView().refresh();
- return true
- }
- });
- })
* This source code was highlighted with Source Code Highlighter.
И последнее, конфигурация того как будут вести себя Drag and Drop наших гридов.
Теперь к кодам на php, и так:
Код config.php: (настройка БД)
- <?php
- $db_server = "localhost"; // Хост БД
- $db_user = "root"; // Логин БД
- $db_password = ""; // Пароль БД
- $db_dbname = "online"; // Имя БД
-
- $connect = @mysql_connect($db_server, $db_user, $db_password) // Создаём соединение (идентификатор $connect)
- or die ("Couldn't connect to MySQL:<br>" . mysql_error() . "<br>" . mysql_errno());
-
- $db = @mysql_select_db($db_dbname, $connect) // Вибираем базу
- or die ("Couldn't select database:<br>" . mysql_error(). "<br>" . mysql_errno());
* This source code was highlighted with Source Code Highlighter.
Код get_org.php: (получение списка организаций)
- <?php
- require('config.php');
-
- $cmd = iconv('UTF-8', 'WINDOWS-1251', $_POST['query']); //Запрос из Комбобокса
-
- $query = 'SELECT id_org,name,inn FROM `organizatsii` WHERE `name` LIKE \'%' .$cmd. '%\' ORDER BY name';
- $query2 = 'SELECT id_org,name,inn FROM `organizatsii` WHERE `inn` LIKE \'%' .$cmd. '%\' ORDER BY name';
-
- $result = @mysql_query($query, $connect) or die ("Couldn't execute query:<br>" . mysql_error(). "<br>" . mysql_errno());
- if (mysql_num_rows($result)==0) {
- $result = @mysql_query($query2, $connect) or die ("Couldn't execute query:<br>" . mysql_error(). "<br>" . mysql_errno());
- }
- while ($row = mysql_fetch_array($result)) :
- $row["name"] = iconv('WINDOWS-1251', 'UTF-8', $row["name"]);
- $arr[] = $row;
- endwhile;
-
- $u2koi = array
- (
- '\u0430' => 'а', '\u0410' => 'А',
- '\u0431' => 'б', '\u0411' => 'Б',
- '\u0432' => 'в', '\u0412' => 'В',
- '\u0433' => 'г', '\u0413' => 'Г',
- '\u0434' => 'д', '\u0414' => 'Д',
- '\u0435' => 'е', '\u0415' => 'Е',
- '\u0451' => 'ё', '\u0401' => 'Ё',
- '\u0436' => 'ж', '\u0416' => 'Ж',
- '\u0437' => 'з', '\u0417' => 'З',
- '\u0438' => 'и', '\u0418' => 'И',
- '\u0439' => 'й', '\u0419' => 'Й',
- '\u043a' => 'к', '\u041a' => 'К',
- '\u043b' => 'л', '\u041b' => 'Л',
- '\u043c' => 'м', '\u041c' => 'М',
- '\u043d' => 'н', '\u041d' => 'Н',
- '\u043e' => 'о', '\u041e' => 'О',
- '\u043f' => 'п', '\u041f' => 'П',
- '\u0440' => 'р', '\u0420' => 'Р',
- '\u0441' => 'с', '\u0421' => 'С',
- '\u0442' => 'т', '\u0422' => 'Т',
- '\u0443' => 'у', '\u0423' => 'У',
- '\u0444' => 'ф', '\u0424' => 'Ф',
- '\u0445' => 'х', '\u0425' => 'Х',
- '\u0446' => 'ц', '\u0426' => 'Ц',
- '\u0447' => 'ч', '\u0427' => 'Ч',
- '\u0448' => 'ш', '\u0428' => 'Ш',
- '\u0449' => 'щ', '\u0429' => 'Щ',
- '\u044a' => 'ъ', '\u042a' => 'Ъ',
- '\u044b' => 'ы', '\u042b' => 'Ы',
- '\u044c' => 'ь', '\u042c' => 'Ь',
- '\u044d' => 'э', '\u042d' => 'Э',
- '\u044e' => 'ю', '\u042e' => 'Ю',
- '\u044f' => 'я', '\u042f' => 'Я',
- '\r' => '',
- '\n' => '<br />',
- '\t' => ''
- );
-
- echo '{rows:'.strtr(json_encode($arr),$u2koi).'}';
- ?>
* This source code was highlighted with Source Code Highlighter.
$_POST['query'] — запрос, передаваемый из комбобокса при написании в нем чего-нибудь (фильтр). У нас в комбобоксе стоит (minChars: 2) это значит, что если в комбобоксе написать более двух символов, обновится хранилище (заново выполнится скрипт хранилища, у нас это get_org.php) в скрипт будет передан запрос query. Таким образом, мы можем фильтровать список организации из БД.
$u2koi = array… — используется для корректного получения русских текстов из БД.
Код get_tovar.php: (получение списка товаров)
- <?php
- require('config.php');
-
- $query = 'SELECT id,name,col,price FROM `tovar` ORDER BY name';
-
- $result = @mysql_query($query, $connect) or die ("Couldn't execute query:<br>" . mysql_error(). "<br>" . mysql_errno());
-
- while ($row = mysql_fetch_array($result)) :
- $row["name"] = iconv('WINDOWS-1251', 'UTF-8', $row["name"]);
- $arr[] = $row;
- endwhile;
-
- $u2koi = array
- (
- '\u0430' => 'а', '\u0410' => 'А',
- '\u0431' => 'б', '\u0411' => 'Б',
- '\u0432' => 'в', '\u0412' => 'В',
- '\u0433' => 'г', '\u0413' => 'Г',
- '\u0434' => 'д', '\u0414' => 'Д',
- '\u0435' => 'е', '\u0415' => 'Е',
- '\u0451' => 'ё', '\u0401' => 'Ё',
- '\u0436' => 'ж', '\u0416' => 'Ж',
- '\u0437' => 'з', '\u0417' => 'З',
- '\u0438' => 'и', '\u0418' => 'И',
- '\u0439' => 'й', '\u0419' => 'Й',
- '\u043a' => 'к', '\u041a' => 'К',
- '\u043b' => 'л', '\u041b' => 'Л',
- '\u043c' => 'м', '\u041c' => 'М',
- '\u043d' => 'н', '\u041d' => 'Н',
- '\u043e' => 'о', '\u041e' => 'О',
- '\u043f' => 'п', '\u041f' => 'П',
- '\u0440' => 'р', '\u0420' => 'Р',
- '\u0441' => 'с', '\u0421' => 'С',
- '\u0442' => 'т', '\u0422' => 'Т',
- '\u0443' => 'у', '\u0423' => 'У',
- '\u0444' => 'ф', '\u0424' => 'Ф',
- '\u0445' => 'х', '\u0425' => 'Х',
- '\u0446' => 'ц', '\u0426' => 'Ц',
- '\u0447' => 'ч', '\u0427' => 'Ч',
- '\u0448' => 'ш', '\u0428' => 'Ш',
- '\u0449' => 'щ', '\u0429' => 'Щ',
- '\u044a' => 'ъ', '\u042a' => 'Ъ',
- '\u044b' => 'ы', '\u042b' => 'Ы',
- '\u044c' => 'ь', '\u042c' => 'Ь',
- '\u044d' => 'э', '\u042d' => 'Э',
- '\u044e' => 'ю', '\u042e' => 'Ю',
- '\u044f' => 'я', '\u042f' => 'Я',
- '\r' => '',
- '\n' => '<br />',
- '\t' => ''
- );
-
- echo '{tovar:'.strtr(json_encode($arr),$u2koi).'}';
- ?>
* This source code was highlighted with Source Code Highlighter.
Код save.php: (и сохраняем)
<?PHP
$title = iconv('UTF-8', 'WINDOWS-1251', $_POST['title']);
$date = iconv('UTF-8', 'WINDOWS-1251', $_POST['date']);
$prod_id = iconv('UTF-8', 'WINDOWS-1251', $_POST['prod_id']);
$prod = iconv('UTF-8', 'WINDOWS-1251', $_POST['prod']);
$pok_id = iconv('UTF-8', 'WINDOWS-1251', $_POST['pok_id']);
$pok = iconv('UTF-8', 'WINDOWS-1251', $_POST['pok']);
$data = iconv('UTF-8', 'WINDOWS-1251', $_POST['data']);
if (($title == '') or ($date == '') or ($data == '')) $success = "false"; else $success = "true";
if ($title == '') {$err_title = "title: \"Поле 'Номер' не может быть пустым\","; $err_title_msg = "Не заполнен номер<br>";}
if ($date == '') {$err_date = "date: \"Поле 'Дата' не может быть пустым\","; $err_date_msg = "Не установлена дата<br>";}
if ($data == '') {$err_data_msg = "Не выбраны товары";}
print "{success: " .$success. ",errors: {".$err_title."".$err_date."null: \"null\"}, truemsg: \"Номер: " .$title. ", Дата: " .$date. " <br>Продавец: " .$prod. "<br>ИД Продавца: " .$prod_id. "<br>Покупатель: " .$pok. "<br>ИД Покупателя: " .$pok_id. "<br>Товары:".$data."\",errormsg:\"".$err_title_msg."".$err_date_msg."".$err_data_msg."\"}";
?>
Исходники создания БД выкладывать не буду, из скриптов видно какие таблицы и поля используются. При необходимости вы можете добавить или изменить поля. А скрипт save.php переписать под ваши нужды. Эта статья своего рода шаблон для начинающих.
Ну вот пока и все. Всем спасибо за внимание :) Успехов в написании на ExtJS.