Jevix - как отключить тег br?

Возникла проблема с простановкой тегов br вместо переноса строки. Хочется отключить соответствующую замену через вызов сниппета Jevix.
Самым простым вариантом решения кажется убрать отступ между тегами p в стилях, но ситуация такая, что br проставляется 2 раза:
1) перенос строки;
2) пустая строка.

Есть ли какое-то решение именно при вызове сниппета? Отключать глобально не хочется, чтобы не было проблем с тикетами.
Алексей Федоров
20 апреля 2017, 18:46
modx.pro
2 525
0

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

Сергей Шлоков
21 апреля 2017, 07:14
+1
Отключать глобально не хочется, чтобы не было проблем с тикетами.
Не будет. Для тикетов используется другой набор параметров (Ticket), как и для комментариев (Comment).
    Алексей Федоров
    21 апреля 2017, 08:06
    0
    Спасибо!
    Нашел и прописал в вызове сниппета параметры
    &cfgSetAutoBrMode=`0`
    &cfgSetTagBlockType=`p,div`
    Если второй отработал нормально сразу, то первый игнорировался пока не выставил
    protected $isAutoBrMode = false; // \n =
      Сергей Шлоков
      21 апреля 2017, 09:45
      0
      protected $isAutoBrMode = false;
      Ну это как-то совсем не комильфо. До первого обновления.
        Алексей Федоров
        21 апреля 2017, 10:41
        0
        Ничего лучше, увы, не придумал(
          Wassi Wassinen
          30 марта 2020, 05:19
          0
          Сергей, подскажите, есть более изящное решение?
            Сергей Шлоков
            30 марта 2020, 07:20
            +1
            А что, сейчас параметры сниппета не работают?
              Wassi Wassinen
              30 марта 2020, 11:42
              0
              Не работает, если выставляю &cfgSetAutoBrMode=1
                Сергей Шлоков
                30 марта 2020, 13:39
                0
                &cfgSetAutoBrMode=1
                Я уже давно не пишу через синтаксис MODX, поэтому могу ошибаться, но разве без обратных кавычек можно указывать параметры?

                Если тебе не нужно переключать этот параметр в разных местах вызова, то измени его в дефолтных параметрах сниппета.
                  Wassi Wassinen
                  30 марта 2020, 13:54
                  0
                  Параметр указываю с кавычками. Все равно не отрабатывает.
                  Можно как-то это
                  protected $isAutoBrMode = false; // \n =
                  повесить с помощью плагина? Или только изменив код?
                    Сергей Шлоков
                    30 марта 2020, 14:05
                    0
                    Ну так измени это значение в дефольных параметрах сниппета. Я так подозреваю, что значение `0` является строкой, и если в сниппете оно не приводится к логическому типу, то получается всегда true. Хотя могу и ошибаться. Комп остался в Москве, а я сижу на даче, семью спасаю ))

                    Решения вижу 2.
                    1. Вызывай через феном синтаксис с указанием параметра
                    ...
                    'cfgSetAutoBrMode' => false,
                    ...
                    2. Скопируй сниппет Jevix и в нем приводи к булеву типу этот параметр.
                      Wassi Wassinen
                      30 марта 2020, 23:34
                      0
                      Комп остался в Москве, а я сижу на даче, семью спасаю ))
                      Похвально! :)

                      Решения вижу 2.
                      1. Вызывай через феном синтаксис с указанием параметра

                      'cfgSetAutoBrMode' => false,
                      ...
                      Не сработало.
                        Сергей Шлоков
                        31 марта 2020, 09:12
                        0
                        Илья, я не понимаю, как у тебя это получается.
                        Вот не поленился и проверил (Спасибо огромное modhost.pro за механизм тестовых сайтов!). Всё работает!!!
                        Wassi Wassinen
                        31 марта 2020, 10:33
                        0
                        Сергей, спасибо за ответ. У меня точно такой же вызов и он не работает:

                        {$_modx->runSnippet('!Jevix', [
                                                    'input' => $_modx->resource.content,
                                                    'cfgSetAutoBrMode' => false,
                                                ])}
                        У тебя в наборах параметров глобально для тикетов эта опция включена?
                        joxi.ru/eAOYVYPI9lgERm
                        Сергей Шлоков
                        31 марта 2020, 10:47
                        0
                        s21923.h10.modhost.pro/manager
                        s21923
                        8GVLBfZco8xy

                        Только я вызываю сниппет с дефолтными параметрами.
                        Wassi Wassinen
                        31 марта 2020, 11:12
                        0
                        Да, вижу. Только это сделано на обычном ресурсе. Я создал тестовую категорию тикетов и вызвал тот же шаблон на тестовом тикете. Работать перестало.
                        Сергей Шлоков
                        31 марта 2020, 11:45
                        0
                        Только это сделано на обычном ресурсе.
                        Ты где-то писал про тикеты? Прямо как маленький.

                        Тебе ниже уже написали про тикеты. Их надо заново пересохранить с отключенным Jevix. В противном случае изменённый джевисом тикет сохранится в БД уже с тегом br. Поэтому ты и не можешь его изменить через сниппет. Чтобы это стало возможным, нужно в БД сохранять исходный текст тикета.
                        Wassi Wassinen
                        31 марта 2020, 11:53
                        0
                        Спасибо, что продолжаешь отвечать.

                        Если я выключаю эту настройку в наборах параметров joxi.ru/eAOYVYPI9lgERm ничего пресохранять не нужно. Текст выводится без переносов. Включаю её — переносит. Почему так работает, а с вызовом через сниппет — нет? Я чего-то не понимаю?

                        Я хотел понять — можно ли добиться того же (как я выключаю настройку joxi.ru/eAOYVYPI9lgERm) с помощью вывода контента тикета через сниппет Jevix.
                        Сергей Шлоков
                        31 марта 2020, 13:58
                        +1
                        Заглянул в код (кстати, ты бы мог сделать это сам). По поводу сохранения в БД измененного тикета беру свои слова обратно. В БД хранится исходный текст. Поэтому пересохранять ничего не нужно.

                        Теперь объясняю, почему тебе кажется, что не работает вывод через сниппет. На самом деле он работает. Просто работает 2 раза. Первый раз сниппет Jevix вызывается в классе Ticket, когда идет получение ресурса по алиасу. В этот момент отрабатывают опции Ticket сниппета Jevix. Тут и добавляется тег br. Второй раз он вызывается в шаблоне. Отсюда напрашиваются 2 вывода:
                        1. Достаточно отключить опцию cfgSetAutoBrMode в параметрах Ticket.
                        2. Выводить контент тикета через сниппет Jevix нет никакой необходимости.
                        Wassi Wassinen
                        31 марта 2020, 14:20
                        0
                        Спасибо, Сергей.
                        Заглянул в код (кстати, ты бы мог сделать это сам).
                        Так уж получилось, что я не программист. Что-то понимаю, но не настолько.

                        Под
                        Достаточно отключить опцию cfgSetAutoBrMode в параметрах Ticket
                        ты имеешь в виду отключение в наборах параметров joxi.ru/brR545Pi7EbxoA?
                        Если да, то я бы давно отключил cfgSetAutoBrMode для всех тикетов через наборы параметров. Но у меня есть больше кол-во тикетов где мне нужны автоматические br (потому что они публикуются через фронтенд пользователями без wysiwyg редактора). И так же есть тикеты в которых эти автоматические br не нужны (они создаются на бекенде). Выход нашёл такой:

                        Создал набор параметров Site. Связал его со сниппетом Jevix. В нём запретил тег br. Вывожу его в нужных шаблонах [[!Jevix@Site? &input=`[[*content]]`]]. Понимаю, что это криво, но другого выхода пока что не вижу. Если есть что-то более изящное для моей ситуации — буду признателен.

                        Может быть сможешь подсказать, где автор принудительно прописывал это
                        protected $isAutoBrMode = false; // \n =
                        ?
                        Сергей Шлоков
                        31 марта 2020, 14:30
                        0
                        Создал набор параметров Site. Связал его со сниппетом Jevix. Понимаю, что это криво, но другого выхода пока что не вижу.
                        Вполне себе годное решение, но от двойной обработки контента Jevix'ом не спасает. МОжет проще в плагине при загрузке документа вырезать теги br?
                        Wassi Wassinen
                        31 марта 2020, 14:48
                        0
                        Можешь подсказать пример плагина? Я не силён в программировании. Плагин как-то можно вешать на определенные шаблоны через «Параметры» плагина joxi.ru/ZrJYDYPIwl7EvA?
                        Сергей Шлоков
                        01 апреля 2020, 07:57
                        0
                        Сорри, пропустил твой коммент. Самый простой вариант
                        // Событие OnWebPagePrerender
                        
                        $templates = [1,2,3]; // id шаблонов, у которых нужно удалять br.
                        if (in_array($modx->resource->template, $templates)) {
                            $modx->resource->_output = str_replace('<br>', '' , $modx->resource->_output); 
                        }
                        Алексей Федоров
                        01 апреля 2020, 12:08
                        0
                        Мне кажется, в таких случаях всегда нужно смотреть на корень проблемы. Почитал комменты, у нас с Wassi разные нюансы ситуации. Всё, что ему нужно это сбросить кэш старых тикетов, чтобы при первом заходе на страницу пользователя они перегенерировались. Он меняет настройки джевикса для тикетов, но на старых документах ситуация остаётся прежней из-за особенностей кэширования. По-моему, это уже лет 5 обсуждается с разных сторон. То есть, второе заворачивание тиветов в джевикс возникло как попытка исправить проблему для старых доков.

                        В сообществе уже могли создать небольшой плагин или пример кода для запуска через консоль, которые бы очищали кэш всех тикетов. Если не создали, то имеет смысл это сделать)
                        Wassi Wassinen
                        01 апреля 2020, 16:58
                        0
                        Спасибо за ответ. На самом деле, как только я меняю значение набора параметров и вызываю контент через сниппет Jevix — на старых и новых тикетах всё сбрасывается.
                        Wassi Wassinen
                        01 апреля 2020, 16:57
                        0
                        Сергей, благодарю!
                        Wassi Wassinen
                        31 марта 2020, 13:16
                        0
                        Пересохранить большое ко-во тикетов не смогу. И Jevix отключать не хочется. Можно же, по-идее, почистить эти br фильтрами вывода?
                iWatchYouFromAfar
                30 марта 2020, 22:59
                0
                Все работает, только что проверил. После установки параметра на true, нужно просто заново сохранить тикет или комментарий и тогда br пропадут.
                  Wassi Wassinen
                  30 марта 2020, 23:34
                  0
                  Подскажите, что именно у вас работает?
                    iWatchYouFromAfar
                    30 марта 2020, 23:36
                    0
                    Удаление или установка тегов br в тикетах и комментариях.
                      Wassi Wassinen
                      31 марта 2020, 01:42
                      0
                      С помощью вызова сниппета Jevix или вы в настройках изменили значение?
                        iWatchYouFromAfar
                        31 марта 2020, 15:35
                        0
                        В параметрах изменил значение.
                        Wassi Wassinen
                        31 марта 2020, 16:39
                        0
                        В моём случае не решает проблему.
                        Спасибо, что ответили.
        Wassi Wassinen
        31 марта 2020, 13:14
        0
        Алексей, подскажите, где вы прописали
        protected $isAutoBrMode = false; // \n =
        ?
          Алексей Федоров
          01 апреля 2020, 07:22
          0
          Добрый день. Не сразу заметил сообщение (и лучше «на ты», интернет же). Прописывал в файле компонента
          prnt.sc/rqkm3g
          Но как писал Серегй выше, решение «до первого обновления». Насколько помню, раньше обновление бутстраповского набора шаблонов могло обновить и джевикс за компанию (но это не точно).
            Сергей Шлоков
            01 апреля 2020, 08:04
            0
            Да забудь ты уже про это. Во-первых, не надо лазить в ядро. Во-вторых, этот же результат можно получить отключив опцию cfgSetAutoBrMode в наборе параметров Ticket.

            Можно было бы использовать второй вариант, а в нужных шаблонах выводить контент через Jevix с включенной опцией. Но тут возможны проблемы типа предпросмотра тикета. Ибо нет возможности повлиять на вывод.
              Wassi Wassinen
              10 апреля 2020, 13:22
              0
              Сергей, привет.
              Если есть возможность, помоги разобраться с ещё одной проблемой. Почему-то Jevix вырезает из контента тикета ссылки, в которые я проставляю плейсхолдеры Modx вида [[~88]]. Хотя в самом тикете ставлю галку «Выполнять теги MODx».
                Сергей Шлоков
                10 апреля 2020, 17:03
                0
                Олá. А ты уверен, что это Jevix вырезает? Отключал его?
                  Wassi Wassinen
                  10 апреля 2020, 17:04
                  0
                  Да, если отключить — всё работает.
                    Сергей Шлоков
                    10 апреля 2020, 19:41
                    0
                    Насколько я знаю, вроде не должен резать. Может как-то параметр cfgSetAutoLinkMode влияет?
                      Wassi Wassinen
                      10 апреля 2020, 19:49
                      0
                      Проверял. Отключал этот и другие параметры. Даже стал баловаться вот такими вещами:

                      Ставлю галку «Выполнять теги MODx». Если отключаю Jevix — всё выводит без проблем. Но не хотелось бы совсем отключать Jevix. Пробую добавить исключение для содержимого href. Делаю это таким образом:
                      Вставляю это в наборе параметров Tickets (cfgAllowTagParams)
                      "a":{"title","href":["#text"]}
                      Но Jevix начинает ругаться в логах таким образом:
                      [2020-04-10 15:21:31] (ERROR @ /core/components/jevix/model/jevix.class.php : 118) PHP warning: Invalid argument supplied for foreach()
                        Wassi Wassinen
                        10 апреля 2020, 19:49
                        0
                        На новом тестовом сайте та же история.
                          Сергей Шлоков
                          10 апреля 2020, 19:56
                          0
                          "a":{"title","href"}
                          А что, href вырезается даже если указать готовую ссылку?
                            Wassi Wassinen
                            10 апреля 2020, 19:58
                            0
                            Нет, готовая выводится нормально.
                            Сергей Шлоков
                            10 апреля 2020, 20:05
                            0
                            Честно, не знаю. Проверил у себя — всё норм. Где-то у тебя накосячено возможно.
                            Wassi Wassinen
                            10 апреля 2020, 20:11
                            0
                            Ты как проверял? Я создал тестовый сайт на модхост — там такая же проблема.

                            s22021.h10.modhost.pro
                            login: s22021
                            pass: rPzsAiaKbm7F
                            Сергей Шлоков
                            10 апреля 2020, 20:51
                            0
                            Забавный баг. Остальные теги MODX нормально работают.

                            Тикеты сейчас поддерживает не Василий, а чел из этого сообщества. Попробуй обратиться к нему. У меня с ним контакта не получилось.
                            Wassi Wassinen
                            10 апреля 2020, 21:36
                            0
                            Спасибо, Сергей. Пробую общаться. :)

                            Я тебе за прошлый раз «спасибо» не отправил. Куда удобнее?
                            Сергей Шлоков
                            10 апреля 2020, 22:14
                            0
                            Думаю, ты найдешь куда потратить это «спасибо». Мне хватит благодарности. :) Редкое по нынешним временам явление.
        Wassi Wassinen
        11 апреля 2020, 21:24
        0
        Для тех, кто будет искать решение проблемы: тикетс вырезает из контента ссылки с тегами MODx вида [[~88]] (даже при активной «галке» «Выполнять теги MODx»).

        Решение такое:
        В «Наборах параметров» ( joxi.ru/Q2KYEYPILob0Lr ) для Тикетов заменить в cfgAllowTagParams:
        Это
        "a":["title","href"]
        заменить на
        "a":{"title":"#text","href":"#skip"}
        Спасибо @tolanych за подсказку.
          Сергей Шлоков
          12 апреля 2020, 08:28
          +2
          Небольшое уточнение. Согласно документации коду достаточно написать так
          "a":{"title":"#text","href":"#text"}
          Ибо по-умолчанию атрибуту href присваивается тип #link. А при указании в атрибуте тега MODX, он фильтрацию не проходит и тег a вырезается. Поэтому нужно указать другой тип. А чтобы foreach не сломался, нужно указать типы для всех атрибутов. Иначе выпадает ошибка, о которой ты писал выше.

          Самое интересное, что ты можешь указать практически любое значение
          "a":{"title":"#text","href":"#modx"}
          "a":{"title":"#text","href":"#fuck"}
          В этом случае Jevix не найдёт соответствующего фильтра и оставит значение без обработки. В случае же с типом #text, значение прогонится через функцию htmlspecialchars().

          П.С. Вообще, у Jevix самый большой минус — это отсутствие документации. Не программисту разобраться тяжело.
            Wassi Wassinen
            12 апреля 2020, 16:20
            0
            Я первым делом попробовал вариант «a»:{«title»:"#text",«href»:"#text"}. Но не помогло. И в логах стали сыпаться ошибки парсера Fenom.
            Помог вариант с произвольным значением фильтра.
            Сергей Шлоков
            12 апреля 2020, 08:45
            0
            Вполне возможен ещё один вариант. В админке у тикетов отключить Jevix, а в нужных шаблонах добавить вывод контента через сниппет Jevix. В этом случае тег [[~88]] должен распарситься до обработки Jevix и всё отработает как положено. Чисто в теории.
            В этом случае, кстати, ты можешь динамически управлять поведением Jevix через параметры сниппета, в отличие от наборов параметров.
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            52