[РЕШЕНО] Переопределение процессора minishop2
Всем привет!
Понадобилось поправить в админке форму, выводящую заказы minishop2, добавить одно поле — joxi.ru/E2pJYQMCaadVPr
С extJs практически не знаком, пришлось рыть и рыть… в результате представление поля в форме добавил плагином (спасибо Павлу Гвоздю — modx.pro/howto/11306 ) и в процессоре core/components/minishop2/processors/mgr/orders/product/get.class.php добавил строку
в методе cleanup().
Это правка исходников, это нехорошо, я понимаю. Но не смог найти как переопределить процессор, чтобы не затерся при обновлении. Попробовал плагин переделать на свой лад из статьи Павла — не прокатило. Подходящих материалов тоже не нашел((
Если не сложно, направьте, пожалуйста, в нужную сторону. Я не прошу решения — возможно, есть материал, который я пропустил. До sencha.com пока руки не дошли, в перспективе…
Заранее спасибо.
Понадобилось поправить в админке форму, выводящую заказы minishop2, добавить одно поле — joxi.ru/E2pJYQMCaadVPr
С extJs практически не знаком, пришлось рыть и рыть… в результате представление поля в форме добавил плагином (спасибо Павлу Гвоздю — modx.pro/howto/11306 ) и в процессоре core/components/minishop2/processors/mgr/orders/product/get.class.php добавил строку
$array['el_size_c'] = json_decode($array['options'])->el_size;
в методе cleanup().
Это правка исходников, это нехорошо, я понимаю. Но не смог найти как переопределить процессор, чтобы не затерся при обновлении. Попробовал плагин переделать на свой лад из статьи Павла — не прокатило. Подходящих материалов тоже не нашел((
Если не сложно, направьте, пожалуйста, в нужную сторону. Я не прошу решения — возможно, есть материал, который я пропустил. До sencha.com пока руки не дошли, в перспективе…
Заранее спасибо.
Комментарии: 5
Данный процессор встречается в файле orders.grid.products.js в методах addOrderProduct и updateOrderProduct возможно стоит их переопределить с новым процессором.
Честно говоря сам не очень силен в ExtJS
Честно говоря сам не очень силен в ExtJS
Да этот файл описывает класс miniShop2.grid.OrderProducts, в нём есть метод updateOrderProduct, который при открытии окна редактирования товара делает запрос в процессор mgr/orders/product/get. Можно расширить класс miniShop2.grid.OrderProducts, переписав в нём метод updateOrderProduct. Для этого создаём плагин на событие msOnManagerCustomCssJs, в плагине код:
Код orders.js:
Если раньше путь процессору был mgr/orders/product/get, то меняем, допустим, на mgr/orders/product/customget, а в папке с процессорами core/components/minishop2/processors/mgr/orders/product/ создаём копию оригинального процессора (get.class.php) с названием customget.class.php, и меняем там что нужно.
<?php
if($modx->event->name == 'msOnManagerCustomCssJs') {
$modx->controller->addLastJavascript(MODX_ASSETS_URL . 'mgr/js/orders.js');
}
Этот код подключает js-файл к админке для минишоповских страниц.Код orders.js:
Ext.override(miniShop2.grid.OrderProducts, {
// копируем целиком оригинальный метод, меняем путь к процессору в action на свой
updateOrderProduct: function (btn, e, row) {
.......
MODx.Ajax.request({
url: miniShop2.config['connector_url'],
params: {
action: 'mgr/orders/product/customget',
id: id
},
.......
},
});
Если раньше путь процессору был mgr/orders/product/get, то меняем, допустим, на mgr/orders/product/customget, а в папке с процессорами core/components/minishop2/processors/mgr/orders/product/ создаём копию оригинального процессора (get.class.php) с названием customget.class.php, и меняем там что нужно.
Николай, Сергей, спасибо огромное — всё получилось))
Есть ещё небольшой вопрос, подскажите, пожалуйста, если знаете. Вот плагин, расширяющий представление формы в админке:
Есть какой-то метод, который позволяет добавлять поле после определенного поля, к примеру —
joxi.ru/brRN3vdtYOBJqr
Вот сама форма:
Есть ещё небольшой вопрос, подскажите, пожалуйста, если знаете. Вот плагин, расширяющий представление формы в админке:
<?php
switch ($modx->event->name) {
case 'msOnManagerCustomCssJs':
if ($page != 'orders') return;
$modx->controller->addHtml("
<script type='text/javascript'>
Ext.ComponentMgr.onAvailable('minishop2-window-orderproduct-update', function() {
new_item ={
layout: 'column',
border: false,
anchor: '100%',
items: [{
columnWidth: 1,
layout: 'form',
defaults: {msgTarget: 'under'},
border: false,
items: [{
xtype: 'textfield',
fieldLabel: 'Размер',
name: 'el_size_c',
anchor: '100%'
}]
}]
}
this.fields.push(new_item);
});
</script>
");
break;
}
Получается, что методом push он добавляет поле в конец формы, после поля «Опции товара» — joxi.ru/YmEZ4vqUJMGZb2Есть какой-то метод, который позволяет добавлять поле после определенного поля, к примеру —
joxi.ru/brRN3vdtYOBJqr
Вот сама форма:
miniShop2.window.OrderProduct = function (config) {
config = config || {};
//console.log(config.id);
Ext.applyIf(config, {
title: _('ms2_menu_update'),
width: 600,
baseParams: {
action: config.action || 'mgr/orders/product/update',
},
modal: true,
});
miniShop2.window.OrderProduct.superclass.constructor.call(this, config);
};
Ext.extend(miniShop2.window.OrderProduct, miniShop2.window.Default, {
getFields: function () {
return [
{xtype: 'hidden', name: 'id'},
{xtype: 'hidden', name: 'order_id'},
{
layout: 'column',
border: false,
anchor: '100%',
items: [{
columnWidth: .3,
layout: 'form',
defaults: {msgTarget: 'under'},
border: false,
items: [{
xtype: 'numberfield',
fieldLabel: _('ms2_product_count'),
name: 'count',
anchor: '100%',
allowNegative: false,
allowBlank: false
}]
}, {
columnWidth: .7,
layout: 'form',
defaults: {msgTarget: 'under'},
border: false,
items: [{
xtype: 'textfield',
fieldLabel: _('ms2_name'),
name: 'name',
anchor: '100%'
}]
}]
}, {
layout: 'column',
border: false,
anchor: '100%',
items: [{
columnWidth: .5,
layout: 'form',
defaults: {msgTarget: 'under'},
border: false,
items: [{
xtype: 'numberfield',
decimalPrecision: 2,
fieldLabel: _('ms2_product_price'),
name: 'price',
anchor: '100%'
}]
}, {
columnWidth: .5,
layout: 'form',
defaults: {msgTarget: 'under'},
border: false,
items: [{
xtype: 'numberfield',
decimalPrecision: 3,
fieldLabel: _('ms2_product_weight'),
name: 'weight',
anchor: '100%'
}]
}]
},/* {
//custom
layout: 'column',
border: false,
anchor: '100%',
items: [{
columnWidth: 1,
layout: 'form',
defaults: {msgTarget: 'under'},
border: false,
items: [{
xtype: 'textfield',
fieldLabel: 'Размер',
name: 'el_size_c',
anchor: '100%'
}]
}]
//custom
},*/
{xtype: 'textarea', fieldLabel: _('ms2_product_options'), name: 'options', height: 100, anchor: '100%'}
];
},
getKeys: function () {
return [{
key: Ext.EventObject.ENTER,
shift: true,
fn: function () {
this.submit()
}, scope: this
}];
},
});
Ext.reg('minishop2-window-orderproduct-update', miniShop2.window.OrderProduct);
push это функция языка javascript. Для работы с массивами там есть несколько функций, например splice
Благодарю, Николай — всё сделал)))
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.