[РЕШЕНО] Пытаюсь создать плагин в miniShop2
Борюсь с плагином. Решил попаразитировать на поле popular.
Делаю по инструкции. Однако, хочу, чтобы это поле управлялось комбобоксом, потому как значений 3.
Создал необходимые файлы, разложил по папкам. В форме появился комбобокс с нужными значениями. Выбираю, сохраняю, всё вроде нормально. Перезагружаю форму редактирования и упс — значение этого комбобокса всегда становится равным 1. Такое ощущение, что это true, но почему, блин, тру-то? Что ж не так?! Прямо в расстройстве сижу.
Привожу содержимое файлов:
index.php
UPD:
Итак, очередная победа разума над обстоятельствами. Комбобокс с нужными мне параметрами заработал.
Сделал так:
1. Создал отдельное поле position — tinyint(1). Добавил его в индексы.
2. Создал новый тип комбобокса и вложил его прямо в msproductdata.js своего плагина. Получилось вот что:
Делаю по инструкции. Однако, хочу, чтобы это поле управлялось комбобоксом, потому как значений 3.
Создал необходимые файлы, разложил по папкам. В форме появился комбобокс с нужными значениями. Выбираю, сохраняю, всё вроде нормально. Перезагружаю форму редактирования и упс — значение этого комбобокса всегда становится равным 1. Такое ощущение, что это true, но почему, блин, тру-то? Что ж не так?! Прямо в расстройстве сижу.
Привожу содержимое файлов:
index.php
<?php
/* Index file for miniShop2 position plugin */
return array(
'xpdo_meta_map' => array(
'msProductData' => require_once dirname(__FILE__) .'/model/msproductdata.map.inc.php'
)
,'manager' => array(
'msProductData' => MODX_ASSETS_URL . 'components/minishop2/plugins/position/msproductdata.js'
)
);msproductdata.jsminiShop2.plugin.pluginname = {
getFields: function(config) {
return {
popular: {
xtype: 'modx-combo-tv-widget'
,store:[[0, 'Нет'],[1, 'Первый уровень'],[2, 'Второй уровень']]
,description: '<b></b>'+_('ms2_product_popular_help')
}
}
}
,getColumns: function() {
return {
popular: {
width:50
,sortable:false
,editor: {
xtype:'modx-combo-tv-widget'
, name: 'popular'
}
}
}
}
};msproductdata.map.inc.php<?php
return array(
'fields' => array(
'popular' => NULL
)
,'fieldMeta' => array(
'popular' => array(
'dbtype' => 'tinyint'
,'precision' => '1'
,'attributes' => 'unsigned'
,'phptype' => 'integer'
,'null' => false
,'default' => 0
)
)
,'indexes' => array(
'popular' => array (
'alias' => 'popular'
,'primary' => false
,'unique' => false
,'type' => 'BTREE'
,'columns' => array (
'popular' => array (
'length' => ''
,'collation' => 'A'
,'null' => false
)
)
)
)
);UPD:
Итак, очередная победа разума над обстоятельствами. Комбобокс с нужными мне параметрами заработал.
Сделал так:
1. Создал отдельное поле position — tinyint(1). Добавил его в индексы.
2. Создал новый тип комбобокса и вложил его прямо в msproductdata.js своего плагина. Получилось вот что:
Ext.namespace('miniShop2.combo');
miniShop2.combo.Position = function(config) {
config = config || {};
Ext.applyIf(config,{
name: config.name || 'position'
,fieldLabel: _('ms2_product_' + config.name || 'position')
,hiddenName: config.name || 'position'
,description: '<b></b>'+_('ms2_product_position_help')
,displayField: 'position'
,valueField: 'id'
,anchor: '99%'
,fields: ['id', 'name']
,pageSize: 20
,url: miniShop2.config.connector_url
,typeAhead: false
,editable: false
,allowBlank: false
,store: [[0, 'Нет'],[1, 'Первый уровень'],[2, 'Второй уровень']]
});
miniShop2.combo.Vendor.superclass.constructor.call(this,config);
};
Ext.extend(miniShop2.combo.Position,MODx.combo.ComboBox);
Ext.reg('minishop2-combo-position',miniShop2.combo.Position);
miniShop2.plugin.position = {
getFields: function(config) {
return {
position: {
xtype: 'minishop2-combo-position'
,description: '<b></b>'+_('ms2_product_position_help')
}
}
}
,getColumns: function() {
return {
position: {
width:50
,sortable:false
,editor: {
xtype:'minishop2-combo-position'
, name: 'position'
}
}
}
}
};На выходе имеем работающий комбобокс, прописывающий нужные нам значения в поле position. Комментарии: 14
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
А колонку в таблице БД ты изменил? Там же TINYINT(1).Туплю.Проверь в базе данных, значение-то меняется, при сохранении? Может, проблема в Ext виджете?
Попробуй сделать его INT(10) и в модели и в БД.
в первой строке pluginname должнобыть заменено на имя плагина читайте коменты у статей есть много людей которые ходили по вашим граблям и оставили решения для вас
может причмина и не в этом но так работать небудет
2. в плагине color ошибка исправлена, и даже переделана установка\удаление на сниппеты
3. у Виталия выводится нормально этот xtype, оно не сохраняется как надо.
объяснение ведется на примере color плагина и народ путается сверху стоит кусок кода pluginname и сразу следом идетНадо сверху 30 шрифтом написать внимание внимание)) все pluginname следует заменить на имя вашего плагина.
P.S.
Вот интересное нашел. Файл /www/core/components/minishop2/processors/mgr/product/update.class.php
22 строка: А функция setCheckbox у нас в MODX такая:
То есть она возвращает 1, если только значение а) не пусто, б) не равно абсолютно false. Что и наблюдаем.
В общем, надо спрыгивать с этого поля.
Сделай отдельное поле, это же не долго.
Итоги:
Комбобокс (modx-combo-tv-widget) работает, но значения в базе не сохраняет.
Комбобокс (modx-combo) работает, но все время переключается на дефолтное значение (0).
Ип-патьевская летопись… Буду дальше совком ковырять.
Или посмотри, может у MS2 есть что подходящее, чтобы унаследовать и расширить.
У меня примерно так было давно, на вызываемой странице сниппет.
Плейсходлер [[+position]] работает.
Есть вот такой вопрос: как вывести кроме «0»,«1»,«2» еще и значение «Нет», «Первый уровень», «Второй уровень»?