К содержанию

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

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

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

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

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

(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
    то документ публикуется, выводится на странице где вызван «getTickets», но открыть его нельзя
    При публикации ты должен попасть сразу на эту страницу и увидеть опубликованный тикет. Если так и есть — то документ работает и проблема у тебя в выводе тикетов, а не в публикации.

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

      [[!mFilter2?
           &element=`getTickets`

      и если тикет сразу публикуешь, то да, редиректит сразу на тикет, если же его сразу в черновик, а потом опубликовать, то перекинет просто на главную, ( где вывод через mFilter ), документ выводится, и действительно на него можно перейти но если в админке сбросить кеш. Странно но ведь mFilter вызван не кешированным
        Константин
        Константин Проверенный
        13 февраля 2015, 17:35
        Судя по всему mFilter всегда кеширует. Может есть какая то возможность выключить вовсе кеширование данного сниппета?
          Василий Наумкин
          Василий Наумкин Администратор
          13 февраля 2015, 18:00
          Укажи &cacheTime=`-1`

          Но фильтр здесь не при чем.
          Василий Наумкин
          Василий Наумкин Администратор
          13 февраля 2015, 17:56
          и если тикет сразу публикуешь, то да, редиректит сразу на тикет, если же его сразу в черновик, а потом опубликовать, то перекинет просто на главную
          Так не должно быть.

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

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

              s1135.h3.modhost.pro/ — проверяй. Могу дать данные от админки.
        Константин
        Константин Проверенный
        13 февраля 2015, 18:35
        Обновил плагин срабатывающий на сохранение документа

        <?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
          Доп. ошибка стала появлятся после добовления этих строк

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

          хотя это не кретично, она ничего не портит, ресурс все ровно удаляется.
            Константин
            Константин Проверенный
            13 февраля 2015, 18:49
            При выключеных дружественных ЧПУ все работает нормально, и редирект и тикет на главной имеет 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
          Блин почти все работает, но вот не понятно, что где кешируется, даже взять просто создал документ, опубликовал его, потом нажал редактировать, и из всех кнопок кнопка «открыть» не работает пока в админке не обновить кеш, что за хрень, ГДЕ ВЫКЛЮЧИТЬ КЕШИРОВАНИЕ!!! что бы вообще этот сайт не кешировался.
            Василий Наумкин
            Василий Наумкин Администратор
            13 февраля 2015, 21:52
            В последних версиях MODX есть настройка cache_alias_map — попробуй отключить. Настройка cache_handler должна быть xPDOFileCache.

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

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

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

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

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

                  (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