Обновление ресурса типа JSON
1. Имеется бд игровых предметов (Items), в которую с течением времени могут добавляться новые записи.
2. Имеется PHP скрипт, который собирает из БД названия предметов в JSON (на данный момент во внешний ресурс) для Автозаполнения Input
3. Из-за проблем с кешированием, при изменении/добавлении предметов в БД, хочу записывать данные в ресурс MODX
4. Ресурс добавляю с помощью универсального сниппета:
5. Первая мысль — проверить, есть ли ресурс с данным именем. Для этого использую:
6. Таким образом появляется вторая мысль — при помощи pdoTools найти id ресурса по имени, если id нет, значит можно смело создать новый ресурс, если id есть, то обновляем контент данного ресурса.
7. Пытался таким образом получить id ресурса по его имени:
Не подскажете решение?
2. Имеется PHP скрипт, который собирает из БД названия предметов в JSON (на данный момент во внешний ресурс) для Автозаполнения Input
3. Из-за проблем с кешированием, при изменении/добавлении предметов в БД, хочу записывать данные в ресурс MODX
4. Ресурс добавляю с помощью универсального сниппета:
$document = $modx->newObject('modResource');
$document->set('createdby', $modx->user->get('id'));// - присваиваем автора ресурсу.
$document->set('template', '1');// - присваиваем шаблон ресурсу.
$document->set('isfolder', '0');// - новый ресурс не будет контейнером.
$document->set('hidemenu', '1');
$document->set('published', '1');// - будет опубликован.
$document->set('createdon', time());// - дата создания контента.
$document->set('pagetitle', $name);// - заголовок материала.
$document->set('alias', $name);// - псевдоним для ссылки.
$document->set('description', 'Items IDs');// - описание, description.
$document->setContent($data);// - содержимое ресурса.
$document->set('parent', $parent);// - идентификатор родителя.
$document->save();// - сохраняем материал.Работает отлично, но есть одно НО: при повторном использовании создается новый ресурс с точно таким же названием.5. Первая мысль — проверить, есть ли ресурс с данным именем. Для этого использую:
$modx->getObject(“modResource”, 1);Где 1 — id ресурса. это значит что для начала мне нужно узнать id ресурса.6. Таким образом появляется вторая мысль — при помощи pdoTools найти id ресурса по имени, если id нет, значит можно смело создать новый ресурс, если id есть, то обновляем контент данного ресурса.
7. Пытался таким образом получить id ресурса по его имени:
$resource_id = $modx->runSnippet('pdoResources',Array(
'resources' => 'Test',
'returnIds' => 1
));
return $resource_id;
//echo $resource_id;
/*
echo '<pre>';
print_r($resource_id);
echo '</pre>';
*/Однако, данный код не работает. PHP дебаг молчит… Думается мне, pdoTools таким образом не работает.Не подскажете решение?
Комментарии: 12
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
resouces — берет id ресурсов.
2. Решил проблему следующим образом:
Создал чанк:
Где parent — id контейнера с JSON ресурсами.
В итоге, получился следующий сниппет:
Проблема решена, однако буду рад любым пожеланиям по своему быдлокоду, ибо чую, что все может быть проще.
По коду… советую использовать процессор. Что это такое почитать можно тут.
1. Пытался сделать тестовый сниппет:
Но ничего не создается. :(
1. И ошибку поглядеть не знаю где.
Вывод php разумеется ничего не дает:
А в логах MODx пусто.
Лучше вот эту прочитать.
Но, похоже что сегодня не мой день:
1. Ресурс не создается.
2. В «Управление -> Отчеты -> Журнал ошибок» пусто.
Ресурсы у тебя, похоже, создаются, но не показываются в админке.
Ответ. RunProcessor пишется с одной буквой «с».
Вот это точно работающий код
Кроме того, что нашли вы, в ресурсе 'Test' стоял чанк а не сниппет. Потому ничего и не происходило.
:facepalm:
У меня так постоянно, из-за какой-нибудь ерунды, я трачу неоправданно много времени на какую-либо проблему.
Спасибо!