MS2: Vendor всегда 0, как добавлять Производителя?
Я добавляю производителя, но он всегда выставляется в 0, то есть невозможно добавить производителя…
Комментарии: 11
Извиняюсь, я туплю, нашел где их добавлять, производителей.
Просто я пытаюсь дополнительное поле сделать с выпадающим списком как vendor
Мне надо чтоб искал из поля в таблице msProducts и подставлял, а если поля нет, то текущий оставлял, чтоб можно было сохранить и добавить.
Оказывается vendor нее очень удачный пример для копирования, т.к. там автоматом выставляется ноль, если ничего не выбрано…
Даже не представляю по какому примеру сделать автозаполняемое поле из уже существующих значений (чтоб подбирал только разные), а если ничего не выбрано то оставлял текущее.
Подскажите с чего можно подсмотреть подобный функционал?
Заранее благодарю!
Просто я пытаюсь дополнительное поле сделать с выпадающим списком как vendor
Мне надо чтоб искал из поля в таблице msProducts и подставлял, а если поля нет, то текущий оставлял, чтоб можно было сохранить и добавить.
Оказывается vendor нее очень удачный пример для копирования, т.к. там автоматом выставляется ноль, если ничего не выбрано…
Даже не представляю по какому примеру сделать автозаполняемое поле из уже существующих значений (чтоб подбирал только разные), а если ничего не выбрано то оставлял текущее.
Подскажите с чего можно подсмотреть подобный функционал?
Заранее благодарю!
Если не ошибаюсь, у поля vendor в модели прописано default = 0. А можно прописать deault = '', тогда не будет 0 подставлять, если ничего не прислано.
Все равно насильно подставляет значение, надо читать маны по ExtJs либо другой тип юзать…
Так ты еще и этот же xtype используешь?
Не пойдет, нужно делать свой xtype и к нему процессор, который будет отдавать подходящие значения.
Не пойдет, нужно делать свой xtype и к нему процессор, который будет отдавать подходящие значения.
Нет я сделал наподобие:
/core/components/minishop2/processors/mgr/settings/unit/getlist.class.php
miniShop2.combo.Unit = function(config) {
config = config || {};
Ext.applyIf(config,{
name: config.name || 'unit'
,fieldLabel: _('ms2_product_' + config.name || 'unit')
,hiddenName: config.name || 'unit'
,displayField: 'name'
,valueField: 'id'
,anchor: '99%'
,fields: ['name','id']
,pageSize: 20
,url: miniShop2.config.connector_url
,typeAhead: true
,editable: true
,allowBlank: true
//,emptyText: _('no')
,baseParams: {
//action: 'mgr/settings/vendor/getlist'
action: 'mgr/settings/unit/getlist'
,combo: 1
,id: config.value
//,limit: 0
}
});
miniShop2.combo.Unit.superclass.constructor.call(this,config);
};
Ext.extend(miniShop2.combo.Unit,MODx.combo.ComboBox);
Ext.reg('minishop2-combo-unit',miniShop2.combo.Unit);
miniShop2.plugin.unit = {
getFields: function(config) {
return {
unit: {xtype: 'minishop2-combo-unit', description: '<b></b><br />'+_('ms2_product_unit_help')}
}
}
,getColumns: function() {
return {
unit: {width:50, sortable:false, editor: {xtype:'minishop2-combo-unit', name: 'unit'}}
}
}
};
Все как следует, сделал файл пока просто для тестирования:/core/components/minishop2/processors/mgr/settings/unit/getlist.class.php
<?php
class msUnitGetListProcessor extends modObjectGetListProcessor {
public function process() {
$arrRet = array(
'total' => 1,
'results' => array(
'id' => 77,
'name' => 'test'
)
);
return json_encode($arrRet);
}
}
return 'msUnitGetListProcessor';
Я не совсем идиот. :) Просто я набираю сейчас в поле что-то, а он test подставляет насильно, хотя emptyText убрал.
В results вроде должен быть массив массивов.
То есть
Ну и смотри, что именно отправляется в консоли браузера. И еще можно убрать у комбобокса typeAhead — это он включает автоподстановку.
То есть
$arrRet = array(
'total' => 1,
'results' => array(
array(
'id' => 77,
'name' => 'test'
)
)
);
Ну и смотри, что именно отправляется в консоли браузера. И еще можно убрать у комбобокса typeAhead — это он включает автоподстановку.
Все, разобрался, надо было добавить ,forceSelection: false
Наверное в мод екс оно переопределяется в true
PS: Про массив массивов — да, когда много, а когда один — он такой. я его из фаербага взял.
Остался вопрос, как построить запрос в xpdo чтоб взять все разные значения из одного поля таблицы. Если кто на вскидку знает, подскажите, или хотя бы где покопать. Еще не смог приучиться к xpdo.
Наверное в мод екс оно переопределяется в true
PS: Про массив массивов — да, когда много, а когда один — он такой. я его из фаербага взял.
Остался вопрос, как построить запрос в xpdo чтоб взять все разные значения из одного поля таблицы. Если кто на вскидку знает, подскажите, или хотя бы где покопать. Еще не смог приучиться к xpdo.
Мало было ,forceSelection: false — перестал сразу автоматом заменять,
но он все равно заменял вводимое после 3 символа, пришлось откатить символы вот так:
,minChars: 100
Теперь можно вводить новое значение спокойно, а если надо выбрать из существующих — то просто раскрыть список и выбрать.
но он все равно заменял вводимое после 3 символа, пришлось откатить символы вот так:
,minChars: 100
Теперь можно вводить новое значение спокойно, а если надо выбрать из существующих — то просто раскрыть список и выбрать.
Вот тут про xpdo — я зря спросил, (тут group by), надо было просто сначала подумать прежде чем спрашивать… Все вопросы отменяются…
Благодарю!
Благодарю!
Ну вы выложите маленькую инструкцию как это реализовали, интересно же )
Один такой параметр с всплывающими подсказками — материал.
/assets/components/minishop2/plugins/material/msproductdata.js:
/core/components/minishop2/processors/mgr/settings/material/getlist.class.php:
/assets/components/minishop2/plugins/material/msproductdata.js:
miniShop2.combo.Material = function(config) {
config = config || {};
Ext.applyIf(config,{
name: config.name || 'material'
,fieldLabel: _('ms2_product_' + config.name || 'material')
,hiddenName: config.name || 'material'
,displayField: 'name'
,valueField: 'name'
,url: miniShop2.config.connector_url
,typeAhead: true
,editable: true
,allowBlank: true
,forceSelection: false
,minChars: 100
,baseParams: {
action: 'mgr/settings/material/getlist'
}
});
miniShop2.combo.Material.superclass.constructor.call(this,config);
};
Ext.extend(miniShop2.combo.Material,MODx.combo.ComboBox);
Ext.reg('minishop2-combo-material',miniShop2.combo.Material);
miniShop2.plugin.material = {
getFields: function(config) {
return {
material: {xtype: 'minishop2-combo-material', description: '<b></b><br />'+_('ms2_product_material_help')}
}
}
,getColumns: function() {
return {
material: {width:50, sortable:false, editor: {xtype:'minishop2-combo-material', name: 'material'}}
}
}
};
И процессор, чтобы выдавать всплывающие подсказки,/core/components/minishop2/processors/mgr/settings/material/getlist.class.php:
<?php
class msMaterialGetListProcessor extends modObjectGetListProcessor {
public function process() {
$q = $this->modx->newQuery('msProductData');
$q->select('material');
$q->groupby('material');
if ($q->prepare() && $q->stmt->execute()) {
while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
$materials[]['name'] = $row['material'];
}
}
$arrRet = array(
'total' => (string)count($materials),
'results' => $materials
);
return json_encode($arrRet);
}
}
return 'msMaterialGetListProcessor';
Ну а в php плагина там вроде все стандартно по примеру.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.