Суть в чём, на сайте модулей магазина нет. Товаров куча (около 15 тысяч) и есть TV поле Артикул, оно не заполнено ни у одного товара. Есть потребность заполнить все артикулы на сайте и заполнять их в дальнейшем автоматически, чтобы не создавать путаницы. Плагин для MODX Pro нашёл, а для Revo — не удалось
<?php
if ($modx->event->name=="OnDocFormSave") // Плагин срабатывает при сохранении ресурса
{
$tv = 'articul'; // ТВ артикула
$id = $resource->get('id'); // Получаем id ресурса
$parent = $resource->get('parent'); // Получаем id родительского ресурса
$alias = $resource->get('alias'); // Получаем alias ресурса
$tvv = $resource->getTVValue($tv); // Получаем ТВ
if (empty($tvv)) // Если ТВ пустое то создаем артикул
{
$articul = substr($alias,0,2).'-'.$parent.$id; // Создаем артикул
$resource->setTVValue($tv, $articul); // Записываем артикул в ТВ
}
}
Артикулы получаются типа: pl-38125.
Можно ли как-то переписать плагин для Revo? А то у меня с этим проблемы ,_,
И получится ли плагином заполнить поля для всех товаров? Или нужно будет составлять запрос в базу для заполнения артикулов?
Павел Романов 22.04.2019 20:02 #
Александр 23.04.2019 10:57 #
А как сделать так, чтобы плагин прошёлся по всем товарам на сайте и создал артикулы?
Павел Романов 23.04.2019 12:02 #
Сделайте две странички с пустым шаблоном.
В одной (c URI update.html) сделайте вызов сниппета:
В другой такой скрипт.
Сам сниппет setArticles:
Просто откройте в браузере ту, где скрипт, и он все сделает с итерацией 50 товаров за раз.
Естественно, сперва сделайте резервную копию ).
Александр 23.04.2019 14:54 #
Александр 29.04.2019 12:53 #
Сразу после создания страницы запуска этого генератора — перешёл на него, в базе появилось 5 новых записей, артикул составился не совсем правильно, вместо id ресурса подставилось слово Array
То есть вот эта строка выдала артикул вида cr-161Array вместо cr-161169. 161 — id родителя, 169 — ресурса. После этого запустить повторно не удалось. Хотя есть подозрение, что он выбирает первые 50 товаров и дальше не идёт, при повторном запросе — видит, что у всех 50 уже есть артикул и не выполняет ничего. Так ли это?
upd: увеличил лимит до 55, открыл update, открыл страницу со скриптом, добавилось 5 артикулов вида cr-161Array
Александр 29.04.2019 14:13 #
По итоге рабочий сниппет вот такой:
Осталось только понять, как его сделать таким, чтобы он увеличивал предел постоянно сам, просто с открытой вкладкой.
Павел Романов 29.04.2019 15:06 #
Вот рабочий:
Вот тут все работает (только итерацию по одному сделал): s18424.h5.modhost.pro/
Админка: s18424.h5.modhost.pro/manager/
Логин: s18424
Пароль: KaiuYETB4bjm
Александр 29.04.2019 15:33 #
___
Странно, но оно срабатывало, проверял, указав лимит в 100. И все артикулы совпали.
Разместил Ваш код последний, указал лимит 50 и после этого обновились артикулы, установившись на пустое поле (для тех товаров, у которых было пусто в артикуле (создалось 1903 пустых записей)
Павел Романов 29.04.2019 15:35 #
Сравнивайте — там все работает.
Александр 29.04.2019 15:44 #