g0dzilla
С нами с 22 ноября 2017; Место в рейтинге пользователей: #276Загрузка заказов ms2, Tikets на стартовой странице
При сравнении «специализированных» cms для интернет магазинов и minishop заметил общую тенденцию у первых выводить при входе в админку список заказов. После недолгой переписки с замечательным исполнителем Павлом Гвоздем возникло такое замечательное и гениальное по простоте решение:
заходим в настройки системы, далее в фильтре по ключу отыскиваем 2 значения:
1. welcome_action меняем с welcome на mgr/orders
2. welcome_namespace с core на minishop2
и вуаля на чистом клиенте отображается список заказов, очень удобно
заходим в настройки системы, далее в фильтре по ключу отыскиваем 2 значения:
1. welcome_action меняем с welcome на mgr/orders
2. welcome_namespace с core на minishop2
и вуаля на чистом клиенте отображается список заказов, очень удобно
Redis Cache (xPDORedisCache)
Решил попробовать использовать redis кэш для modx
создал класс xPDORedisCache, особо не заморачивался переписал мемкеш класс, но возникает проблема, идет пустая выдача и в логе:
UPD: 2016-04-10
Решение далось легко, забыл указать сериализацию
$this->redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_PHP);
Устанавливается в /core/xpdo/cache/
в настройках cache_handler = cache.xPDORedisCache
Доступные опции:
redis_server — строка с данными для подключения 'localhost:6379'
redis_auth — пароль для аутентификации
redis_db — целое число >= 0
cache_prefix — по желанию, по сути если задать в redis_db разные значения для разных сайтов, будет то, что надо
Код xpdorediscache.class.php ниже:
создал класс xPDORedisCache, особо не заморачивался переписал мемкеш класс, но возникает проблема, идет пустая выдача и в логе:
modExtensionPackage::loadCache() is not a valid static method.
в общем логе:[Fri Apr 08 23:00:11 2016] [error] [client 130.193.37.24] PHP Warning: Invalid argument supplied for foreach() in /var/www/core/model/modx/modcontext.class.php on line 101
[Fri Apr 08 23:00:11 2016] [error] [client 130.193.37.24] PHP Warning: array_merge(): Argument #2 is not an array in /var/www/core/model/modx/modx.class.php on line 2306
[Fri Apr 08 23:00:11 2016] [error] [client 130.193.37.24] PHP Fatal error: Class 'modUser_' not found in /var/www/core/xpdo/xpdo.class.php on line 770
Есть какие идеи куда копать?UPD: 2016-04-10
Решение далось легко, забыл указать сериализацию
$this->redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_PHP);
Устанавливается в /core/xpdo/cache/
в настройках cache_handler = cache.xPDORedisCache
Доступные опции:
redis_server — строка с данными для подключения 'localhost:6379'
redis_auth — пароль для аутентификации
redis_db — целое число >= 0
cache_prefix — по желанию, по сути если задать в redis_db разные значения для разных сайтов, будет то, что надо
Код xpdorediscache.class.php ниже:
Редирект и запрет индексации внешних ссылок
Плагин срабатывает на пререндер страницы, отлавливает все внешние ссылки, и, в зависимости от настроек, делает редирект через внутреннюю страницу, добавляет target="_blank", rel=«nofollow» или оборачивает в noindex.
Создание своего события для плагина
Добрый день! Пытался в пакет modExtra прописать свое событие. Создал файл _build/data/transport.events.php
Содержимое посмотрел как в miniShop2
Содержимое посмотрел как в miniShop2
<?php
$events = array();
$tmp = array(
'onTest',
);
foreach ($tmp as $k => $v) {
/* @var modEvent $event */
$event = $modx->newObject('modEvent');
$event->fromArray(array(
'name' => $v
,'service' => 6
,'groupname' => PKG_NAME
),'', true, true);
$events[] = $event;
}
return $events;
Почему не появляется мое событие onTest в списке событий? Что то упустил или не так сделал? Подскажите. Расширение любых таблиц MODX
В очередной раз понадобилось изменить таблицу сайта, менять которую не предусмотрено.
Что обычно люди делают в таких случаях? Верно, редактируют ядро или нужный компонент, и больше их не обновляют. Но ведь это неправильно, и можно решить вопрос иначе.
Пишем обычный плагин, выставляем для него событие OnMODXInit и меняем модель для нужных классов системы или дополнений. Например, я добавил id менеджера в заказ miniShop2:
Что обычно люди делают в таких случаях? Верно, редактируют ядро или нужный компонент, и больше их не обновляют. Но ведь это неправильно, и можно решить вопрос иначе.
Пишем обычный плагин, выставляем для него событие OnMODXInit и меняем модель для нужных классов системы или дополнений. Например, я добавил id менеджера в заказ miniShop2:
ExtJs для новичков. Админка загрузилась. ч.2
В первой части познакомились с методом Ext.getCmp() для работы с компонентами ExtJs. Он позволяет взаимодействовать с виджетами ExtJs — панелями, таблицами, формами, окнами, запрашивать и обрабатывать данные с сервера и т.д. Но иногда требуется просто поработать с обычными HTML элементами. А для этого метод Ext.getCmp() совсем не подходит. Можно, конечно, пользоваться обычным javascript. Но уж очень хочется иметь такой же удобный инструмент как jQuery. И ExtJs предоставляет нам такой функционал. Для работы с элементами DOM у него есть несколько методов.
ExtJs для новичков. Админка загрузилась. ч.1
В прошлой статье мы попытались понять как формируется интерфейс админки на ExtJs. Теперь давайте попробуем разобраться, что можно сделать интерфейсом, который нам нарисовал ExtJs.
В ExtJs за каждым элементом интерфейса (панель, окно, таблица, кнопка, элемент формы) стоит специальный объект, называемый компонентом. Он отвечает за управление элементом интерфейса — создание, отображение, скрытие, удаление. В админке MODX все элементы «являются» компонентами ExtJs, за исключением верхнего меню. Разницу можно увидеть, если заглянуть в исходный код страницы — у меню простая и привычная HTML структура (ul > li > a), а если глянем на элемент, созданный ExtJs, то увидим, что он обернут дополнительными тегами. Например, вот код кнопки тулбара дерева ресурсов
В ExtJs за каждым элементом интерфейса (панель, окно, таблица, кнопка, элемент формы) стоит специальный объект, называемый компонентом. Он отвечает за управление элементом интерфейса — создание, отображение, скрытие, удаление. В админке MODX все элементы «являются» компонентами ExtJs, за исключением верхнего меню. Разницу можно увидеть, если заглянуть в исходный код страницы — у меню простая и привычная HTML структура (ul > li > a), а если глянем на элемент, созданный ExtJs, то увидим, что он обернут дополнительными тегами. Например, вот код кнопки тулбара дерева ресурсов
<span unselectable="on" class="x-btn x-btn-small x-btn-icon-small-left tree-new-static-resource x-btn-noicon" id="ext-comp-1062" style="">
<em class="">
<button type="button" id="ext-gen139" class=" x-btn-text" style=""> </button>
</em>
</span>
[simpleModal] или простая установка модальных окон
Часто задают вопросы про модальные окна и как в них вставить то или то. Решил в качестве своего обучения написать небольшой, можно даже сказать очень маленький компонент для вывода модальных окон.
Подскажите, пожалуйста, как установить значение поля, сделав запрос на сервер?
Есть поле в админке на странице компонента:
Есть процессор, который получает данные из базы. Как из ExtJS обратиться к этому процессору и результат запроса вставить в value этого поля?
ModXSaver.panel.CodeEditor = function(config) {
config = config || {};
Ext.apply(config,{
id: 'modxsaver-texteditor'
,border: false
,baseCls: 'modx-formpanel'
,cls: 'container'
,items: [{
html: '<p>'+_('xsaver_desc')+'</p>'
,border: false
,bodyCssClass: 'panel-desc'
},{
id: 'mod-xsaver-texteditor'
,xtype: 'modx-texteditor'
,height: 300
,width: '99%'
,value: _('xsaver_default_value')
]}
});
ModXSaver.panel.CodeEditor.superclass.constructor.call(this,config);
};
Есть процессор, который получает данные из базы. Как из ExtJS обратиться к этому процессору и результат запроса вставить в value этого поля?
Создание своего события в MODX
Сижу посматриваю исходники minishop. Заинтересовался созданием собственных событий в MODX.
Если да, то каким образом теперь его отследить?
$response = $this->ms2->invokeEvent('msOnBeforeAddToOrder', array(
'key' => $key,
'value' => $value,
'order' => $this
));
Правильно ли я понял что вот данный кусок кода и вызывает событие?Если да, то каким образом теперь его отследить?