Задание. Представьте, что вы сделали клиенту сайт, он его заполнил, в раздел «Статьи» уже выложил около 50 статей, после чего звонит вам и просит, чтобы в разделе статьи URL были такими:/articles/23/то есть, чтобы псевдонимом у статей был id ресурса. Напишите код, который надо выполнить в консоли, чтобы у всех существующих статей исправить псевдонимы.
Для более продвинутых пользователей — напишите плагин, который будет устанавливать нужное значение для всех создаваемых документов в разделе «Статьи»
Итак, первая часть задания.
Для того, чтобы у нескольких ресурсов изменить значение какого-то поля, нужно их сначала получить:
$resources = $modx->getCollection('modResource',array('parent' => 22));и после этого внести изменения:
$resources = $modx->getCollection('modResource',array('parent' => 22)); foreach ($resources as $res) { $res->set('alias', $res->get('id')); $res->set('isfolder', 1); $res->save(); }Заодно и сделали все статьи контейнерами, чтобы URL заканчивался не на .html, а на /
Теперь вторая часть задачи.
Здесь мы уже определили, что при создании плагина надо указать, что он срабатывает на событие OnDocFormSave:
/* Сначала проверяем на всякий случай, нужное ли нам событие произошло и что ресурс находится в "статьях" */ if ($modx->event->name != "OnDocFormSave" || $resource->get('parent') != 22) {return;} // Устанавливаем новые значения $resource->set('alias', $resource->get('id')); $resource->set('isfolder', 1); // и сохраняем объект $resource->save(); return;
Необходимо пересохранять ресурсы
Вложенность ресурсов 5 уровней и больше. Указывая один корневой раздел и условие по id шаблона (независимо от уровня вложенности) обновить/пересохранить. Не подскажете?
====
То есть раздел, у которого id=2 и внутри него пересохранить все ресурсы, у которых template=4
====
Должно, вроде бы, работать, но Consloe не может завершить, и висит на «Loading...»
Заранее большое спасибо.
У меня есть ресурсы с товаром(у них шаблон с ID=4), на странице есть два поля, price_dollar(цена в долларах) и price(цена в рублях). А на главной странице есть curs(курс рубля). Что надо написать в плагине, что бы при смене курса поле цены в рублях пересчитывалось у всех ресурсов с ID=4?
Пробовал сделать, но почему-то не работает… вот код:
А вообще, давай, попробуем по-проще написать.
Спасибо за статьи, начал только изучать modx. Очень помогли. Подскажите, мне нужно обработать 2 шаблона ($where = array('template' => 4);$where = array('template' => 8);)
Как загнать в один массив для обработки?
Прошу Вашей помощи.
На сайте компании сделан пересчёт цены товара в зависимости от курса валюты. Пересчёт происходит при сохранении карточки товара. Часто приходится импортировать товар, соответственно он появляется без цены, нужно заходить в каждый товар и нажимать сохранить. Мне посоветовали использовать следующий скрипт:
Пересчёт действительно идёт, но ни с того вдруг затыкается на каком-то товаре и дальше пересчёт не идёт. Если зайти в товар с id следующим после последнего пересчитаного и сохранить карточку, то цена появляется. Но при дальнейшем запуске скрипта пересчёт всё равно уже не идёт:(
Подскажите, пожалуйста, что можно предпринять в данном случае?
Спасибо большое!
что делает resource? и get'parent' != 20 — это как я понимаю каждый раз false??? И что retuurn возвращает? Заранее, спасибо)
return не просто возвращает, а ещё и прекращает дальнейшее выполнение кода. Соответственно, если условие не верно, дальше код выполнен не будет
1) Я создал контейнер статьи с айди7 и поместил туда несколько дочерних ресурсов.
2) В «элементы — плагин — создать плагин» добавил плагин и назвал его test
3) Написал туда код
4) Начал создавать ресурсы алиас не меняется.
Пришел к выводу что то не работает.
Что я сделал не так?
<?php
// Выполняем поиск по заголовку
$resource = $modx->getObject('modResource', array('pagetitle' => 'Заголовок 1', 'pagetitle' => 'Заголовок 2'', 'pagetitle' => 'Заголовок 3'));
if (is_object($resource)) {
// преобразуем объект в массив
$resource = $resource->toArray();
// изменим публикацию (опубликована/не опубликована) страницы
$resource[«published»] = '1';
// выполнение процессора
$response = $modx->runProcessor('resource/update', $resource);
// если ошибка
if($response->isError()){
echo «Произошла ошибка». $response->getMessage();
}
else{
echo «Документ изменен»;
}
} else {
echo «Документ не найден»;
}