Создание ресурса через API

Добрый день. Возникла следующая проблемка.
Имеется сайт, на нем пользователи могут создать ресурс (добавить транспорт), затем автоматически на него перенаправляет. Так же имеется список всех транспортных средств, добавленных пользователем.
Код создания транспорта следующий:
$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']) ) — нет. Причем если открыть этот ресурс в менеджере, нажать «Сохранить» — то все становится нормально.
Делать с использованием процессоров — не вариант, ибо у пользователя нет прав на создание ресурсов в этой категории. Собственно вопрос в том — что такое еще вызывается в процессоре, что с ним — все хорошо работает, а без него вот такая проблема со ссылками? причем $transport->get('uri') тоже возвращает корректную ссылку. Не работает только генерация ссылки на ресурс по его ID
Владимир Новопашин
20 февраля 2017, 10:32
modx.pro
2 604
0

Комментарии: 7

Наумов Алексей
20 февраля 2017, 14:01
+1
Ибо ссылки генерируются с учетом текущего кеша, который при сохранении через процессор — чистится, а при сохранении через объект — нет.

Ответ — очищайте кеш.
    Владимир Новопашин
    20 февраля 2017, 15:24
    0
    Да, проблема в кэше. Но у меня в конце был код
    $cacheKey = $transport->getCacheKey();
    $modx->cacheManager->refresh(array(
        'resource' => array('key' => $cacheKey),
    ));
    Который как оказалось не срабатывал. Напрямую
    $transport->clearCache()
    Тоже не помогало, а вот
    $modx->cacheManager->refresh();
    Помогает. Но чистить вообще весь кэш после создания\обновления ресурса — плохая идея… Вот не знаю как еще попробовать.
      Алексей Ерохин
      20 февраля 2017, 18:29
      0
      $results = $modx->cacheManager->generateContext($modx->context->key);
      $modx->context->resourceMap = $results['resourceMap'];
      $modx->context->aliasMap = $results['aliasMap'];
        Владимир Новопашин
        20 февраля 2017, 18:45
        0
        А можно поинтересоваться что должен делать этот код? А то в сгенерированном массиве $results нет переменной resourceMap… на что ругается и не могу проверить что в итоге должно произойти.
PG
PG
20 февраля 2017, 14:29
0
Создавайте через процессор от имени админа, пример тут. В таком случае будут и плагины работать.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    7