Tickets introtext и Jevix Новый

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

Я так и не понял баг это или фича. Tickets сохраняет content, обработанный Jevix, в introtext. Делает это даже когда Jevix отключен. Чтоб избавиться от этого нужно отредактировать 2 файла: create.class.php и update.class.php по адресу /core/components/tickets/controllers/ticket/.

Я заменил:
// Define introtext
$introtext = $this->getProperty('introtext');
if (empty($introtext)) {
$introtext = $this->object->getIntroText($this->getProperty('content'), false);
}
if (empty($properties['disable_jevix'])) {
$introtext = $this->object->Jevix($introtext);
}
На:
// Define introtext
$introtext = $this->getProperty('introtext');
// if (empty($introtext)) {
// $introtext = $this->object->getIntroText($this->getProperty('content'), false);
// }
if (empty($properties['disable_jevix'])) {
$content2intro = $this->object->getIntroText($this->getProperty('content'), false);
$introtext = $this->object->Jevix($content2intro);
}
Теперь content в introtext сохраняется только если Jevix включен. Вроде как так и должно быть. Нет?
01 февраля 2016, 12:06    Денис Дыранов   
3    930 0


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

  1. Сергей Шлоков 01 февраля 2016, 12:34 # 0
    Ну если заходить с позиции «Для настоящих пацанов Страдивари делал барабаны», то сойдёт. Возможно придется ещё много чего переделывать, ибо проблем из-за Jevix море. Даже если его отключить, письма всё-равно отправляются, комментарии пишутся, просмотры считаются, рейтинги не отключаются и т.д.
    Какая связь между introtext и Jevix?
    1. Денис Дыранов 01 февраля 2016, 12:54 # 0
      Не надо преувеличивать. Связь описана.
      Если включена обработка Jevix и introtext пуст, то в него попадает обработанный content для вывода на страницах сайта в списке тикета.
      Проблема в том, что content туда попадает, даже если jevix выключен. В результате не работает такая конструкция при отображении списка тикетов:
      [[+introtext:isnot=``:then=`
      [[+introtext]]
      <a href="[[+link]]">Читать дальше</a>
      `:else=`[[+content]]`]]
      1. Сергей Шлоков 01 февраля 2016, 13:09 # 0
        Не надо преувеличивать. Связь описана.
        Где это можно прочитать?

        Зачем в списке тикетов выводить контент тикета?
        1. Денис Дыранов 01 февраля 2016, 13:11 # 0
          Здесь: github.com/bezumkin/Tickets/issues/96

          Если статья короткая, я хочу выводить её полностью без «Читать дальше». Кат тоже не катит, потому что краткое описание статьи может отличаться от её начала.
          1. Сергей Шлоков 01 февраля 2016, 13:27 # 0
            Автор пишет про пустой introtext и cut.
            Не используй тег cut и пропиши свой introtext.
            Лично я в этом
            Если включена обработка Jevix и introtext пуст, то в него попадает обработанный content для вывода на страницах сайта в списке тикета.
            не вижу связи. Если Jevix включен, то попадет обработанный контент. Если отключен, то необработанный. Что и логично.

            Выход.
            Не используй тег cut и пропиши свой introtext.
            1. Денис Дыранов 01 февраля 2016, 13:31 # 0
              Что логичного в дублировании контента? Вот в ветке ниже я об этом же.
              1. Сергей Шлоков 06 февраля 2016, 15:08 # +1
                В чём проблема-то с этим дублированием? Не по феншую или mySql теперь такие записи в выдаче через SELECT понижает?
                Изначально сниппеты getResources и pdoResources (да и некоторые другие) не подгружают поле content без специального указания (&includeContent=`1`), чтобы не раздувать память.
    2. Пётр Молчанов 01 февраля 2016, 12:36 # 0
      так и задумано
      1. Денис Дыранов 01 февраля 2016, 13:04 # 0
        1. Пётр Молчанов 01 февраля 2016, 13:11 # 0
          я имею ввиду, что так и задумано, что, если интротекст пустой, то подставляется контент
          1. Денис Дыранов 01 февраля 2016, 13:14 # 0
            Для чего это делается? Насколько я понимаю, в интротекст должен вставляться обработанный джевиксом контент. Ну типа должен же он где-то храниться, чтоб каждый раз не обрабатывать. Но если я не использую джевикс, зачем мне хранить дубли в базе?
            1. Пётр Молчанов 01 февраля 2016, 13:20 # +1
              нет. интротекст — это краткая инфа статьи, контент — полная инфа статьи.
              на примере новостей: главная новостей, где выводится список всех новостей, у каждой новости выводится интротекст, а при подробном просмотре — уже контент.
              так, вроде, во всех CMS сделано
              1. Денис Дыранов 01 февраля 2016, 13:27 # 0
                Спасибо, кэп! :-) Но проблема в том, что мне в краткое описание статьи, попадает её полное содержание. И в БД у меня каждая статья дублируется. Вопрос: зачем?
                1. Пётр Молчанов 01 февраля 2016, 13:28 # 0
                  предполагается, что ты будешь заполнять интротекст
                  1. Денис Дыранов 01 февраля 2016, 13:38 # 0
                    …и что мне плевать на дубли в БД.

                    Я думаю, предполагалось, что нужно где-то хранить результат работы джевикса. И интротекст для этого вполне подошел. Но если у джевикса нет результатов работы, соответственно и нет смысла хранить контент 2 раза.
                    1. Пётр Молчанов 01 февраля 2016, 13:56 # 0
                      я вот заполняю интротекст каждый раз и у меня всё норм. что мешает делать также? в админке это поле даже так и называется «Аннотация (введение)»
                      1. Денис Дыранов 01 февраля 2016, 14:20 # 0
                        Интротекст — чаще всего используется как подобие ката. В большинстве случаев кат — зло. Если у меня статья не на 10 экранов с кучей фотографий, кат мне не нужен. Потому как чтение блога превращается в чтение огрызков статей. Плюс открытие полных версий в куче табов. Однако, в ряде случаев он необходим.

                        Если я хочу отобразить статью полностью, то нет смысла забивать интротекст.

                        Конечно, можно придумать кучу решений этой проблемы. Отображать ссылку на полную версию, если интротекст=контенту или если в интротексте лежит какой-то текст-триггер, но это тоже костыли. И вообще, есть вероятность, что вся эта проблема — просто следствие недоработки.
                        1. Пётр Молчанов 01 февраля 2016, 14:44 # 0
                          ок, у каждого своя ситуация) как вариант решения без влезания в код дополнения, могу предложить на событие OnDocFormSave делать проверку, либо ставить интротекст пустым принудительно
                          1. Денис Дыранов 01 февраля 2016, 14:53 # 0
                            Спасибо за ещё один вариант. Конечно, влезать в код дополнения — плохая идея. Но я надеялся привлечь этим Василия к обсуждению. Похоже, зря :-)
                            1. Денис Дыранов 01 февраля 2016, 16:24 # 0
                              Похоже что всё-таки на OnDocFormRender. У меня это, вроде как, работает, может ещё кому пригодится:
                              <?php
                              switch ($modx->event->name) {
                                  case 'OnDocFormRender';
                              	$content = $resource->getContent();
                              	$introtext = $resource->get('introtext');
                              	if ($introtext = $content) {
                                    		$resource->set('introtext','');
                              		$resource->save();
                                 	}
                                  break;
                              }
                              1. Илья Уткин 14 марта 2016, 17:06 # 0
                                Немного дополнил плагин, так как не всегда $introtext = $content
                                if ($modx->event->name == "OnDocFormSave") {
                                    $introtext = $resource->get('introtext');
                                    $generateIntrotext = $resource->getIntroText($resource->get('content'), false);
                                    if (empty($resource->getProperty('disable_jevix'))) {
                                        $generateIntrotext = $resource->Jevix($generateIntrotext);
                                    }
                                    if ($introtext == $generateIntrotext) {
                                        $resource->set('introtext', '');
                                    $resource->save();
                                    }
                                }
              Вы должны авторизоваться, чтобы оставлять комментарии.