Публикация из фронта на другие контексты Tickets Решено

Дополнение: Tickets

Приветствую!

Сразу к делу!
Есть ли функция у компонента Тикетс из фронта постить записи записи из одного контекста в другой!

Ясное дело если оставить значение выбора «Раздела с тикетами» то он будет выводить во фронте только те, которые созданы в этом контексте, попробовав такую конструкцию:

<input type="hidden" name="parent" value="Айди другого контекста" />
То сразу дало понять, что штатные средства не помогают!
Так понимаю, что придется ковыряться в самом сниппете или возможно подскажите более безопасный способ!

П.С.

Формитом не предлагать, этот месяц знаю, но вроде в плане безопасности он не очень безопасный! Все же хочется решить это при помощи компонента Тикетс!

Заранее спасибо за помощь!
01 сентября 2016, 19:48    Andrey   
0    356 0

Комментарии (10)

  1. Andrey 01 сентября 2016, 20:39 # 0
    Нашел строчку:
    $context = array_map('trim', explode(',', $this->getProperty('context', $this->modx->context->key)));
    Может надо её как то изменить? Или поковыряться в этом файле:
    core/components/tickets/processors/web/section/getlist.class.php

    На правильном ли я пути?
    1. Andrey 03 сентября 2016, 12:09 # 0
      Неужели не кто не знает? :(
      1. Сергей Шлоков 03 сентября 2016, 14:06 # 0
        <input type="hidden" name="context_key" value="Айди другого контекста" />
        А сниппету в параметре allowedFields нужно добавить context_key.
        1. Andrey 03 сентября 2016, 14:43 # 0
          Действительно забыл добавить «сontext_key» в разрешенные поля, но один фиг не помогает, при сохранении, форма выдает ошибку о том, что «Неверно казан раздел тикетов», вместо родного вызова списка вызываю:

          <input type="hidden" name="parent" value="25" />
          <input type="hidden" name="context_key" value="web2" />
          Помню, что до этого использовал чужой самописный сниппет, там тоже была проблема с публикацией из одного ресурса в другой, но не из-за того, что документ создавался с другим «сontext_key» или «class_key», он по крайней мере записывался в базу и стоило в ручную изменить «сontext_key» или «class_key», как он тут же появлялся в древе и публиковался, затем конечно я решил эту проблему тем, что добавил оба параметра в вызов!

          Но здесь ситуация совсем другая! При отправке он по какой то причине не видит другие разделы Тикетов на других контекстах, ясное дело через фронт это скорее всего штатная настройка созданная для безопасности, потому как в бэкенде можно перенести Тикет из одного контейнера в другой, при помощи штатной настройки! Вопрос состоит в том, как обойти эту фигню!
          1. Andrey 03 сентября 2016, 14:53 # 0
            Как я и думал, вот эта стока отвечала за указатель конкретного Контекста в месте вызова сниппета:
            $context = array_map('trim', explode(',', $this->getProperty('context', $this->modx->context->key)));
            Убрал её и статья публикуется туда, куда мне нннадо! :D
            1. Воеводский Михаил 04 сентября 2016, 20:11 # +1
              Эта строка где? В процессоре? Либо сниппету надо передать параметр &context, либо в форму закинуть скрытое поле с таким именем и добавить в разрешенные.
              1. Andrey 07 сентября 2016, 12:06 # 0
                Значит рассказываю как понял, перековыряв все файлы сниппета!
                Эта строка:
                $context = array_map('trim', explode(',', $this->getProperty('context', $this->modx->context->key)));
                отвечает за принудительный поиск «Секции тикетов» в том контексте в котором находится форма отправки через Фронт сайта!
                Находится по следующему адресу в Бекэнде:
                core/components/tickets/processors/web/section/getlist.class.php
                Но! Этого все еще не достаточно, чтобы форма позволила отправить Ресурс туда куда нам надо, а задача стоит такая, что необходимо отправить её в другой контекст из текущего!
                Для этого нам необходимо назначить «Ключ контекста» для того, чтобы наш опубликованный ресурс записался в древо и там же отображался, в противном случае, мы получим опубликованный ресурс в базе данных, но который не видно в древе ресурсов в Бэкегде, но на который разумеется можно выйти!
                Итак, это решается следующим способом:
                <input type="hidden" name="parent" value="Родитель элемента Тикетс в другом контексте" />
                <input type="hidden" name="context_key" value="ключ того контекста, в котором находится целевой параметр родителя" />
                Внимательнее учтите параметры родителя и Ключа контекста! Все тикеты публикуются строго в ресурсы родители с классом TicketSection с собственным классом Tickets!

                Разумеется можно реализовать скрытые параметры в виде выпадающего списка!
                1. Воеводский Михаил 07 сентября 2016, 12:20 # +2
                  Если сниппету TicketForm передать параметр &context с нужным контекстом, то список секций отобразится только из этого контекста, а не из текущего. Никакие правки исходников не требуются.

                  Что касается скрытых полей, ты написал правильно.
                  1. Andrey 07 сентября 2016, 13:05 # 0
                    ну вот пробовал первым же делом, он написал ошибку: «Неверная секция тикетов!»
                    Убрал строку, все чики-пики!
                    1. Andrey 07 сентября 2016, 19:08 # 0
                      мде… помогло! Я не так прочитал ваше сообщение! Чет не подумал про этот параметр, спасибо огромное!
            Вы должны авторизоваться, чтобы оставлять комментарии.