Создание ресурса через API
Добрый день. Возникла следующая проблемка.
Имеется сайт, на нем пользователи могут создать ресурс (добавить транспорт), затем автоматически на него перенаправляет. Так же имеется список всех транспортных средств, добавленных пользователем.
Код создания транспорта следующий:
Ресурс создается, на него перенаправляет, всё хорошо. Но. В админке если в списке ресурсов щелкнуть по нему ПКМ — нет пункта «Просмотреть». Да и в списке транспорта добавленного пользователем он отображается, а вот ссылка на него ( $_modx->makeUrl($_pls['id']) ) — нет. Причем если открыть этот ресурс в менеджере, нажать «Сохранить» — то все становится нормально.
Делать с использованием процессоров — не вариант, ибо у пользователя нет прав на создание ресурсов в этой категории. Собственно вопрос в том — что такое еще вызывается в процессоре, что с ним — все хорошо работает, а без него вот такая проблема со ссылками? причем $transport->get('uri') тоже возвращает корректную ссылку. Не работает только генерация ссылки на ресурс по его ID
Имеется сайт, на нем пользователи могут создать ресурс (добавить транспорт), затем автоматически на него перенаправляет. Так же имеется список всех транспортных средств, добавленных пользователем.
Код создания транспорта следующий:
$transport = $modx->newObject('modResource', array(
'pagetitle' => 'Transport Name',
'parent' => 146,
'template' => 19,
'menuindex' => 1,
'createdby' => 1,
'publishedby' => 1,
'publishedon' => time(),
'published' => 1,
'hidemenu' => 1,
'content' => ''
));
$transport->save();
Ресурс создается, на него перенаправляет, всё хорошо. Но. В админке если в списке ресурсов щелкнуть по нему ПКМ — нет пункта «Просмотреть». Да и в списке транспорта добавленного пользователем он отображается, а вот ссылка на него ( $_modx->makeUrl($_pls['id']) ) — нет. Причем если открыть этот ресурс в менеджере, нажать «Сохранить» — то все становится нормально.
Комментарии: 7
Ибо ссылки генерируются с учетом текущего кеша, который при сохранении через процессор — чистится, а при сохранении через объект — нет.
Ответ — очищайте кеш.
Ответ — очищайте кеш.
Да, проблема в кэше. Но у меня в конце был код
$cacheKey = $transport->getCacheKey();
$modx->cacheManager->refresh(array(
'resource' => array('key' => $cacheKey),
));
Который как оказалось не срабатывал. Напрямую$transport->clearCache()
Тоже не помогало, а вот $modx->cacheManager->refresh();
Помогает. Но чистить вообще весь кэш после создания\обновления ресурса — плохая идея… Вот не знаю как еще попробовать. $results = $modx->cacheManager->generateContext($modx->context->key);
$modx->context->resourceMap = $results['resourceMap'];
$modx->context->aliasMap = $results['aliasMap'];
А можно поинтересоваться что должен делать этот код? А то в сгенерированном массиве $results нет переменной resourceMap… на что ругается и не могу проверить что в итоге должно произойти.
Брал отсюда bezumkin.ru/sections/tips_and_tricks/278/
Возможно в новых версиях modx что-тор поменялось.
Возможно в новых версиях modx что-тор поменялось.
У меня работает этот код в проекте. Проверьте что контекст правильный
Создавайте через процессор от имени админа, пример тут. В таком случае будут и плагины работать.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.