$modx->basket->getActiveOrderID() возвращает именно ID корзины, но не саму корзину. То есть чтобы получить объект корзины, надо сделать так:
if($order_id = $modx->basket->getActiveOrderID()){ $basket = $modx->getObject('Order', $order_id); }
Но это так, к слову.
Если говорить о вашем вопросе, и если я правильно понимаю, что главное — это чтобы товаров было только по 1 штуке максимум, то сделать надо так:
1. В add-процессоре после $this->setDefaultProperties() дописать:
if($this->getproperty('quantity') > 1){ $this->setProperty('quantity', 1); }
public function beforeSave(){ if($this->object->quantity > 1){ $this->object->quantity = 1; } return parent::beforeSave(); }
Должно сработать.
Добрый день! Снова нужна помощь. Подскажите как запретить добавлять в корзину больше одного товара, вернее если в корзине уже есть один товар, то при добавлении нового старый стирается а новый добавляется. Думаю что в процессоре нужно получить товар в текущей корзине ($modx->basket->getActiveOrderID(); ) и удалить, но как получить объект корзины.
Вообще в идеале хотелось бы допилить процессор так чтобы можно было из корзины оплачивать товары по отдельности при необходимости ) но это в перспективе — сейчас не могу решить проблему приведенную выше — Help!!!
Доброго времени суток! Я использую modxSDK, modxSite, modxSmarty. Для вывода календаря событий я использую eventsCalendar2. Я вывожу календарь событий на всех страницах. Для этого в основном шаблоне (layout.tpl) я в самом верху вызываю сниппет eventsCalendar2 некэшируемым, результат помещаю в переменную и вывожу её в нужном месте:
{snippet name="eventsCalendar2" params="parents=`16`&dateSource=`eventDate`&tplHead=`calHead`&tplEvent=`calEvent`®Css=`0`" assign="evCal" nocache} ... {$evCal}
Все остальные шаблоны наследуют основной шаблон шаблон. На главной странице месяцы переключаются нормально, а на остальных — одна и та же беда: переключаем месяц — через ajax загружается весь контент страницы с календарём.
Я уже видел один топик по этому вопросу: modx.pro/help/6356/. Тут проблема с шаблонизатором Fenom.
Как я понял, суть проблемы такова: «И всё отлично работает, за исключение того, что при компиляции шаблона Fenom он прописывает вывод всех данных не в переменную, которую покажет в конце, а выводит их сразу через echo. Соотвественно, в ответ ajax запроса попадают все сниппеты, обработанные до eventsCalendar2 — и ты видишь их на странице.»
Т.е. в ответ ajax-запроса попадают результаты всех сниппетов, вызванных до eventsCalendar. А как сделать так, чтобы сниппет eventsCalendar вызывался первым в каждом шаблоне?
Подскажите, только у меня видео не отображается?
prntscr.com/a41swt
Да, вчера увидел :)
Нет, это уже в 2.4.2 поправлено, багфикс приняли.
Добрый день! Мой сайт rotatorbitcoinfaucets.com разработан на MODX Revolution, мне нужно добавить две функции к сайту:
1. Возможность возле ссылок по выбору ставить слово ТОП фиолетового цвета.
2. В сайте в таблице встроен таймер, когда переходишь по ссылке на главной странице он начинает обратный отчет, но если закрыть страницу сайт, и потом опять зайти на страницу то те ссылки по каторым переходили рании не сохранили таймер и опять доступны, как сдлать что бы данные таймера сохранялись если если даже выключить комп.
Про 2.4+ пока не слышал, что ошибку исправили.
Ты про эту?
Я пока не отписался с подробностями, но коротко: выяснил в чем проблема. Они давно уже вынесли расширяющие пакеты из системных настроек в отдельную таблицу, но с этим у них косяков куча (я про них им писал еще в 13-ом году), в итоге у них чтение этих записей есть, а создания нет (да, и такое бывает :)). При этом именно при обновлении MODX фигачит эти настройки в отдельную таблицу, но MODX при инициализации по разному обрабатывает данные расширяющих пакетов из системных настроек и отдельной таблицы. В общем, в большинстве случаев помогает просто очистка таблицы modx_extension_packages (только не забывает про бекапы).
Да и при обновлении мне несложно файлы обновить, всё равно ведь в ядро лезть надо :)
Если ты все правильно делаешь, то в ядро не придется лезть.
Единственно, что я сейчас исключил — это правку базы руками. Я просто в установочном пакете сразу данные про это поле прописываю в modx.mysql.schema.xml — и при установке всё уже есть.
Ты и это можешь исключить. Когда пакет устанавливается, ты можешь инициировать свой модуль и выполнить добавление колонки средствами самого MODX-а.
Вот смотри пример:
<?php $pkgName = 'modImporter'; $pkgNameLower = strtolower($pkgName); if ($object->xpdo) { $modx =& $object->xpdo; $modelPath = $modx->getOption("{$pkgNameLower}.core_path",null,$modx->getOption('core_path')."components/{$pkgNameLower}/").'model/'; switch ($options[xPDOTransport::PACKAGE_ACTION]) { case xPDOTransport::ACTION_INSTALL: case xPDOTransport::ACTION_UPGRADE: if ($modx instanceof modX) { $modx->addExtensionPackage($pkgNameLower, "[[++core_path]]components/{$pkgNameLower}/model/", array( // 'serviceName' => $pkgName, // 'serviceClass' => $pkgName, )); $modx->addPackage($pkgNameLower, MODX_CORE_PATH . "components/{$pkgNameLower}/model/", array( // 'serviceName' => $pkgName, // 'serviceClass' => $pkgName, )); $manager = $modx->getManager(); $manager->addField('modResource', 'externalKey'); $manager->addIndex('modResource', 'externalKey'); $modx->log(xPDO::LOG_LEVEL_INFO, 'Adding ext package'); } break; case xPDOTransport::ACTION_UNINSTALL: if ($modx instanceof modX) { $modx->removeExtensionPackage($pkgNameLower); } break; } } return true;
Это вот сюда фигачится: github.com/MODX-Club/MODX_SamplePackage/blob/master/_build/resolvers/resolver.register.php
Только в транспортере надо подключить резолвер.