По поводу меняющихся цен: общий механизм будет в любом случае основываться на TV-параметрах. В этом будет полезен вот этот коммент: modxclub.ru/blog/voprosy-spetsyalistov/309.html#comment2906 Но тонкостей здесь очень много, и нельзя будет это просто так сделать. Основная причина кроется в том, что даже сам биллинг магазина надо дорабатывать. В настоящий момент после того, как товар добавлен в корзину, при добавлении такого же товара будет меняться только его кол-во, но не цена. То есть подсчет суммы потом идет стоимость*количество. В данном случае вам придется весьма серьезно похардкодить (что в принципе допускается изначальной концепцией). Давайте немного теории по этому поводу: Данные товаров в корзине — это записи объектов OrderProduct. Когда добавляется первая запись — тогда происходит создание объекта OrderProduct (соответственно со значениями product_id, price, quantity и т.п.) (выполняется процессор create). А когда меняется число товаров в корзине (простой пересчет или добавление еще этих же товаров), тогда происходит просто обновление записи (процессор update). Эти процессоры расширяют базовые процессоры modObjectCreateProcessor и modObjectUpdateProcessor процессоры соответственно. Нам это важно понимать, так как там будут очень полезные функции beforeSet() и beforeSave(), в которых будет доступен текущий объект записи. К пример, на добавление товара мы хотим пересчитать сумму товара в зависимости от количества (к примеру, дать скидку 10%, если товаров более 10). Код будет такой:
public function beforeSave(){ if($this->object->get('quantity') >= 10){ $price = $this->object->get('price') * 0.9; $this->object->set('price', $price); // Специально выполнять сохранение здесь не надо, // объект будет сохранен дальше автоматически } return parent::beforeSave(); }
Давно уже хотим сделать. Руки не доходят.
Как идея — было бы неплохо добавить кнопочку сохранения некоторых снипетов которые помогают при разработке, например вызов процессора или по отдельности всякие полезные открывки кода, так-же в консоли очень удобно тестить разрабатываемые MODXсниппеты, интегрируемые стороние скрипты, агрегаторы и т.д., такая функция не будет лишней, что добавит Console более гибкости. и сократит количество открытых в винде окон нотпадов или сторонних IDE/Текстовиков Имееться ввиду сохрание внутри Окружения MODX предварительно назначая Id и кастомное имя и кнопка вставки сниппета(выпадающий список(имена) с выбором сохраненного сниппета) прямо в textarea компонента console. Я уже недалекий, но все-еще чайник — Считаю что это актуально.
Сборка отличная. Решил переделать сайт с Joomla+virtuemart на shopmodx устраивает всё, очень гибкие настройки. Только в одном моменте у меня возник вопрос: как вывести еще одну цену товара, зависящую от количества?
Здорово! то, что надо!
Выпустил новый пакет modxSite-1.2.0-beta
Главная новинка — процессор на обработку форм (на замену formIt). Конечно, в нем гораздо меньше готовых функций, чем в формите, но он вполне годится ему на замену. Под катом покажу применение на примере обновленной сборки ShopModxBox-2.2.0
Итак, главное назначение этого процессора — обработка входящих данных, проверка обязательных полей, выполнение субпроцессора, если данные все заполнены верно (к примеру, процессор оформления заказа), а так же рассылка уведомления пользователям из указанных групп пользователей.
Рассмотрим реальную задачу, которую этот процессор выполнял в обработке формы обратной связи на странице контактов в сборке магазина: 1. Проверка обязательных полей (емейл, имя, сообщение, каптча). 2. Отправка уведомления пользователям спецгруппы.
Сам по себе базовый процессор обработки форм не имеет обязательных полей, но в нем предусмотрена функция, в которой эти поля указываются. Что мы делаем, для реализации нашей формы?
1. Мы пишем свой расширяющий процессор, в котором перечисляем обязательные поля, устанавливаем значение группы пользователей на основе системной настройки, которые получат новые сообщения, указываем проверять каптчу (будет автоматически использован пакет modCaptcha), а так же указывает Smarty-шаблон, который будет использоваться для оформления письма менеджерам (необходимо будет его добавить в основной шаблон сайта. Шаблон по умолчанию есть в самом пакете modxSite, но он не подключен).
2. Создаем Smarty-шаблон, в котором прописываем вызов нашего процессора. Особое внимание предлагаю обратить на блок вывода каптчи. Немного инфы по юзабилити на заметку: (для всех, кто ненавидит каптчи (как и я)). В общем, если в форме используется каптча, то в случае отправки формы, даже если есть ошибки в форме, если каптча введена верно, то не создавать опять форму с каптчей (типа вводите картинку опять, раз руки такие кривые), а создавать хидден-поле со значением этой каптчи без вывода картинки, которая изменит значение в сессии. То есть если пользователь правильно ввел раз каптчу, то дальше она ему не нужна.
А теперь самое интересное: данный процессор имеет огромное преимущество над формитом и прочими решениями тем, что обработка всех полей происходит именно в процессоре, и он возвращает ассоциативный массив ошибок. Таким образом его можно использовать хоть в обычной форме, хоть с Ajax-ом, хоть в консоли отлаживать. К примеру, в новой сборке магазина выполните вот такой код:
<?php print '<pre>'; ini_set('display_errors', 1); $modx->switchContext('web'); $modx->setLogLevel(3); $modx->setLogTarget('HTML'); $modx->invokeEvent('OnHandleRequest'); $namespace = 'modxsite'; if(!$response = $modx->runProcessor('web/forms/feedback', array( "email" => "test@test.loc", "fullname" => "test", "message" => "test", "captcha" => "wlfnq", ), array( 'processors_path' => $modx->getObject('modNamespace', $namespace)->getCorePath().'processors/', ))){ print "Не удалось выполнить процессор"; return; } print_r($response->getResponse());
И вы увидите результат.
Вышла новая версия сборки для интернет-магазинов на базе MODX Revolution — ShopModxBox-2.2.0
Как и предыдущая версия — это всего-лишь промежуточный небольшой апдейт. Из основных изменений:
1. Обновлен пакет modxSite, главная фишка которого — процессор для обработки форм (на замену formIt). 2. Добавлена форма обратной связи на страницу Контакты, сразу с каптчей (добавлен пакет modCaptcha). 3. Шаблон default переименован в shopmodx (чтобы исключить конфликты с шаблоном default из самого пакета modxSite). 4. Процессоры переделаны на getdata-процессоры из компонента modxSite (эти процессоры перенесены и доработаны из пакета shopModx, а там они будут в дальнейшем удалены). Ну и некоторые мелкие багфиксы.
Смотрите изменения на гитхабе.
UPD: Если у кого-то не будет работать каптча (будет постоянно говорить, что неверно код указан), обновите modCaptcha до версии 1.0.1 минимум. Такое особенно возможно на modxcloud.com
К слову, тестовый магазин можно попробовать относительно просто установить на modxcloud.com Вот прямая ссылка на снимок. Вот здесь я подробно расписывал, как накатывать туда снимки сайтов: modxclub.ru/blog/dokumentatsiya-dlya-spetsialistov/45.html Просто регистрируете себе бесплатный дев-аккаунт, затягиваете туда снимок и устанавливаете. Напоминаю, что по умолчанию логин/пароль админа — admin/admin