Проблема с публикацией тикетов

Есть такая проблема с публикацией тикетов. Если пользователь создает тикет, и не публикует его а нажимает «В черновики», документ создается. Но потом если он откроет этот документ и нажмет «Опубликовать», то документ публикуется, выводится на странице где вызван «getTickets», но открыть его нельзя, как будто его не существует. Помогает только если в админке этот документ снять с публикации, и заново опубликовать.

В чем может быть причина?
Константин
13 февраля 2015, 14:08
modx.pro
1
1 362
0

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

Константин
13 февраля 2015, 17:03
0
Не ужели такое только у меня. Пересмотрел все, в консоле ошибок нет, хотя одна какая то все время пролетает в хаотическом порядке

(ERROR @ /index.php) `[[+id]]` is not a valid integer and may not be passed to makeUrl()

в БД при публикации тоже все в порядке. Во общем то можете попробовать сами, если кому не сложно. Документ создается без проблем, даже выводится на главной странице, но открыть его нельзя, как буд то он не существует. Но если в админке его снять с публикации, и заново выставить публикацию, то все в порядке.

При сохранении документа работает такой плагин

<?php
if ( $modx->event->name == 'OnDocFormSave' ) {
    $id = $resource->get( 'id' );

    if ( $mode == 'new' ) {
        $resource->set( 'alias', $id.'/' );
        $resource->save();
    }
}

дабы имя страницы было ее id. Пробовал его выключать, не помогло. Блин где же мой косяк ???

Вот сам сайт, регистрация такая же простая как и на данном сайте. pillweb.net
    Василий Наумкин
    13 февраля 2015, 17:21
    0
    то документ публикуется, выводится на странице где вызван «getTickets», но открыть его нельзя
    При публикации ты должен попасть сразу на эту страницу и увидеть опубликованный тикет. Если так и есть — то документ работает и проблема у тебя в выводе тикетов, а не в публикации.

    Возможно, ты просто выводишь их кэшированными, или у тебя там какой-то сложный чанк. Я проверил только что на тестовом сайте — проблемы нет.
      Константин
      13 февраля 2015, 17:29
      0
      Выводятся тикеты так

      [[!mFilter2?
           &element=`getTickets`

      и если тикет сразу публикуешь, то да, редиректит сразу на тикет, если же его сразу в черновик, а потом опубликовать, то перекинет просто на главную, ( где вывод через mFilter ), документ выводится, и действительно на него можно перейти но если в админке сбросить кеш. Странно но ведь mFilter вызван не кешированным
        Константин
        13 февраля 2015, 17:35
        0
        Судя по всему mFilter всегда кеширует. Может есть какая то возможность выключить вовсе кеширование данного сниппета?
        Василий Наумкин
        13 февраля 2015, 17:56
        0
        и если тикет сразу публикуешь, то да, редиректит сразу на тикет, если же его сразу в черновик, а потом опубликовать, то перекинет просто на главную
        Так не должно быть.

        При публикации тикета ты должен переходить на него. Если этого не происходит, то у тебя что-то не то с очисткой карты ресурсов сайта.

        Вот, смотри код — редирект в корень сайта происходит только если возвращается пустой url от только что опубликованного ресурса.
          Константин
          13 февраля 2015, 18:01
          0
          Вот и в лог ошибка прилетела «Attempted to redirect to an empty URL.» Блин с чего это такое поведение? Куда копать то, может из за новой версии modx, вроде на старой 2.3.2 не замечал
    Константин
    13 февраля 2015, 18:35
    0
    Обновил плагин срабатывающий на сохранение документа

    <?php
    if ( $modx->event->name == 'OnDocFormSave' ) {
        $id = $resource->get( 'id' );
    
        if ( $mode == 'new' ) {
            $resource->set( 'alias', $id.'/' );
            $resource->save();
        }
        
        $results = $modx->cacheManager->generateContext($modx->context->key);
        $modx->context->resourceMap = $results['resourceMap'];
        $modx->context->aliasMap = $results['aliasMap'];
    }

    добавив туда строки для генерации карты ресурсов

    $results = $modx->cacheManager->generateContext($modx->context->key);
    $modx->context->resourceMap = $results['resourceMap'];
    $modx->context->aliasMap = $results['aliasMap'];

    вроде заработало, и редирект нормально срабатывает, правда одна все же ошибка в логах все ровно летает

    `[[+id]]` is not a valid integer and may not be passed to makeUrl()

    нашел решение в данной статье
    bezumkin.ru/sections/tips_and_tricks/278/

    теперь надо разобратся с выводом статей на главной, она то выводится, но url не выводится.
    Кстати не обычная ошибка в логах, если я удаляю тикет пользователя то в логе пишет

    [2015-02-13 18:31:04] (ERROR @ /connectors/index.php) Error removing dependent object: Array
    (
        [id] => 58
        [resource] => 128
        [name] => resource-128
        [subscribers] => [15]
        [createdon] => 2015-02-13 18:27:34
        [createdby] => 15
        [closed] => 0
        [deleted] => 0
        [deletedon] => 
        [deletedby] => 0
        [comment_last] => 0
        [comment_time] => 
        [comments] => 0
        [properties] => {"thread":"resource-128","fastMode":true,"gravatarIcon":"http:\/\/pillweb.net\/theme\/images\/mini-gravatar.png","gravatarSize":"90","gravatarUrl":"https:\/\/www.gravatar.com\/avatar\/","tplCommentForm":"comments.form","tplCommentFormGuest":"@INLINE ","tplCommentAuth":"comments.one.auth","tplCommentGuest":"comments.one.guest","tplCommentDeleted":"comments.one.deleted","tplComments":"comments.wrap","tplLoginToComment":"comments.login","tplCommentEmailOwner":"comments.email.owner","tplCommentEmailReply":"comments.email.reply","tplCommentEmailSubscription":"comments.email.subscription","tplCommentEmailBcc":"comments.email.bcc","autoPublish":"1","autoPublishGuest":"0","formBefore":false,"depth":"1","allowGuest":"0","allowGuestEdit":"0","allowGuestEmails":"0","enableCaptcha":true,"minCaptcha":1,"maxCaptcha":10,"resource":128,"snippetPrepareComment":"","commentEditTime":"600"}

    «Ошибка удаления зависимый объект: Array» что это еще за зависимость?
      Константин
      13 февраля 2015, 18:42
      0
      Доп. ошибка стала появлятся после добовления этих строк

      $results = $modx->cacheManager->generateContext($modx->context->key);
      $modx->context->resourceMap = $results['resourceMap'];
      $modx->context->aliasMap = $results['aliasMap'];

      хотя это не кретично, она ничего не портит, ресурс все ровно удаляется.
        Константин
        13 февраля 2015, 18:49
        0
        При выключеных дружественных ЧПУ все работает нормально, и редирект и тикет на главной имеет url. Может с хостингом что не так, а то у них последнее время часто ремонты идут. В файл .htaccess добавил только пару строк

        RewriteRule ^public/([^/]+)/$ /public/?tid=$1 [L]
        RewriteRule ^users/([^/]+)/$ /users/?id=$1 [L]
        RewriteRule ^users/([^/]+)/(comments)/$ /users/?id=$1&comments=$2 [L]
        RewriteRule ^users/([^/]+)/(favorites)/$ /users/?id=$1&favorites=$2 [L]
      Константин
      13 февраля 2015, 21:47
      0
      Блин почти все работает, но вот не понятно, что где кешируется, даже взять просто создал документ, опубликовал его, потом нажал редактировать, и из всех кнопок кнопка «открыть» не работает пока в админке не обновить кеш, что за хрень, ГДЕ ВЫКЛЮЧИТЬ КЕШИРОВАНИЕ!!! что бы вообще этот сайт не кешировался.
        Василий Наумкин
        13 февраля 2015, 21:52
        1
        0
        В последних версиях MODX есть настройка cache_alias_map — попробуй отключить. Настройка cache_handler должна быть xPDOFileCache.

        Также проверь все остальные настройки кэширования, чтобы были стандартными — прям сравни со свежеустановленным сайтом. Версию MODX тоже лучше обновить до последней стабильной — 2.3.3-pl.

        Как я и предполагал, проблема у тебя общая, с тикетами никак не связанная.
        Константин
        13 февраля 2015, 21:52
        0
        Вот в чем был весь геморой

          Василий Наумкин
          13 февраля 2015, 21:53
          0
          То есть, было выключено? Или ты отключил и заработало?

          Поясни, пожалуйста.
            Константин
            13 февраля 2015, 22:10
            0
            Было в режиме «Да», сделал «Нет» и теперь карта алиасов не кешируется, там собственно даже написано, что для больших сайтов лучше выключить. Теперь из плагина во общем то можно убрать эти строки за не надобностью.

            $results = $modx->cacheManager->generateContext($modx->context->key);
            $modx->context->resourceMap = $results['resourceMap'];
            $modx->context->aliasMap = $results['aliasMap'];
              Константин
              13 февраля 2015, 22:21
              0
              Правда это решило не все проблемы, такая ошибка как эта осталась, она в логах вылетает, если удалить тикет созданный пользователем. Но это будет редко, так что она мне не мешает.

              (ERROR @ /connectors/index.php) Error removing dependent object

              а вот этой пока не видно, дай бог что б ее и не было больше

              `[[+id]]` is not a valid integer and may not be passed to makeUrl()

              P.S на выводе тикетов в ссылки типа «Читать далее» вывел не [[~[[+id]]]] а [[+uri]]
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          17