Собираю доработки по MODx, которые не так часто применяю, поэтому забываю как раньше реализовывал. А также как обходил те или иные проблемы при разработке сайтов.
  • Дата создания
    25 октября 2018
  • Топиков
    9
  • Ограничение на постинг
    0.000

Поиск артикула модификаций для mSearch2

При использовании компонента msOptionPrice2 артикулы могут содержаться внутри модификаций и по умолчанию не индексируются и не смогут попасть в результаты поиска компонента mSearch2
Написал небольшой плагин, который будет добавлять в индекс эти артикулы.

<?php
switch ($modx->event->name) {
   case 'mse2OnBeforeSearchIndex':
       $docId = $resource->get("id");
       $modifications = $modx->getCollection("msopModification", ["rid" => $docId]);
       if ($modifications) {
           $articles = [];
           foreach ($modifications as $modification) {
               $article = $modification->article;
               $articles[] = $article;
           }
           $value = implode(",", $articles);
           
           if (count($articles) > 0) {
                $mSearch2->fields['msop_article'] = 1;
                $resource->set('msop_article', $articles);
           }
       }
       break;
}

Меняем нумерацию заказов в minishop2

Необходимо переопределить функцию getNum(), которая отвечает за получение порядкового номера.
Изначально она формирует номер по формату «годмесяц/порядковый номер». Каждый месяц нумерация будет начинаться с 1.
Читать дальше

Кастомный выпадающий список msFieldsManager из элементов дерева

Расскажу как я делал динамически заполняемый кастомный выпадающий список для поля товара. Этот список формируется из элементов дерева (структуры) сайта.
Читать дальше

Yii2 Связанные таблицы


2:20:00 — подтаблица в админке
2:31:00 — добавляем поле в таблицу при extends
3:18:00 — виртуальное поле в виде геттера
3:39:00 — update страница при связанных данных
3:43:00 — сценарий проверки
3:50:00 — транзакция при сохранении связанных данных

Импорт из CSV

По многочисленным просьбам общественности написал скрипт импорта в miniShop2 из CSV. У нас уже проскакивало несколько вариантов, но все они как то не очень.

Особенности:


  1. Это не сниппет, это самодостаточный скрипт.
  2. Использует процессоры для импорта ресурсов и изображений.
  3. Умеет обновлять ресурсы по указанному ключевому полю.
  4. Поддерживает ТВ параметры и поля товаров, включая JSON типа size и color.
  5. Есть режим отладки, с подробным логом и обработкой только первой строки файла.
  6. Выводит сообщения через системный лог.

Теретически, можно импортировать не только товары, но и категории или другие ресурсы, но не проверял.

Скрипт входит в состав miniShop2 с версии 2.1.4 и лежит в /core/components/minishop2/import/csv.php. Запускать его можно как из браузера (если у вас открыта директория core), так и из консоли.

Если захотите его перенести в другое, более подходящее место, то нужно отредактировать строку


Читать дальше

YML файл для маркета при использовании minishop2

Создаем документ и скрываем из меню.
У документа:
— указываем Тип содержимого — «XML»;
— замораживаем адрес, какой нам необходим.
— шаблон выбираем «Пустой»
— в содержимое добавляем:
Читать дальше

Выводим дату на Modx с русским названием месяца

Чтобы не настраивать локаль, да и иногда требуется вывести в том или ином формате, то я
Название: rus_months
Содержимое:
<?php
$months = array(
    'Jan' => 'января',
    'Feb' => 'февраля',
    'Mar' => 'марта',
    'Apr' => 'апреля',
    'May' => 'мая',
    'Jun' => 'июня',
    'Jul' => 'июля',
    'Aug' => 'августа',
    'Sep' => 'сентября',
    'Oct' => 'октября',
    'Nov' => 'ноября',
    'Dec' => 'декабря',
);

return str_replace(array_keys($months), array_values($months), $input);

Если используется Fenom, товыводить даты можно так:
{$doc.publishedon | date : "d M Y" | rus_months}
обязательно должен быть символ «М», так как именно он заменяется на название русского месяца.

Если без Fenom:
[[*publishedon:date=`d M Y`:rus_months]]

Защита от СПАМа AjaxForm

Данное решение было написано спонтанно, так как заказчику требовалось срочно решить проблему со СПАМом, а рекапчу и вовсе хотелось убрать. Посмотрев, что уже было сделано, понял, что скрытое поле, которое должен был заполнить Бот и на этом попасться уже использовали, а рекапчу хотят убрать, применил такое решение:
В форму добавляется скрытое поле. При загрузке страницы, происходит ajax запрос на сервер и получается уникальный код. Ajax запрос отсечет ботов, которые не открывают страницу в браузере, а соответственно и не выполняют javascript код. Генерируемый сервером код, также помещаем в переменную сессии и при валидации формы сверяем заполненный код и код из сессии.
Читать дальше