Jevix - как отключить тег br?
Возникла проблема с простановкой тегов br вместо переноса строки. Хочется отключить соответствующую замену через вызов сниппета Jevix.
Самым простым вариантом решения кажется убрать отступ между тегами p в стилях, но ситуация такая, что br проставляется 2 раза:
1) перенос строки;
2) пустая строка.
Есть ли какое-то решение именно при вызове сниппета? Отключать глобально не хочется, чтобы не было проблем с тикетами.
Самым простым вариантом решения кажется убрать отступ между тегами p в стилях, но ситуация такая, что br проставляется 2 раза:
1) перенос строки;
2) пустая строка.
Есть ли какое-то решение именно при вызове сниппета? Отключать глобально не хочется, чтобы не было проблем с тикетами.
Комментарии: 52
Отключать глобально не хочется, чтобы не было проблем с тикетами.Не будет. Для тикетов используется другой набор параметров (Ticket), как и для комментариев (Comment).
Спасибо!
Нашел и прописал в вызове сниппета параметры
Нашел и прописал в вызове сниппета параметры
&cfgSetAutoBrMode=`0`
&cfgSetTagBlockType=`p,div`
Если второй отработал нормально сразу, то первый игнорировался пока не выставилprotected $isAutoBrMode = false; // \n =
protected $isAutoBrMode = false;Ну это как-то совсем не комильфо. До первого обновления.
Ничего лучше, увы, не придумал(
Сергей, подскажите, есть более изящное решение?
А что, сейчас параметры сниппета не работают?
Не работает, если выставляю &cfgSetAutoBrMode=1
&cfgSetAutoBrMode=1
Я уже давно не пишу через синтаксис MODX, поэтому могу ошибаться, но разве без обратных кавычек можно указывать параметры? Если тебе не нужно переключать этот параметр в разных местах вызова, то измени его в дефолтных параметрах сниппета.
Параметр указываю с кавычками. Все равно не отрабатывает.
Можно как-то это
Можно как-то это
protected $isAutoBrMode = false; // \n =
повесить с помощью плагина? Или только изменив код?
Ну так измени это значение в дефольных параметрах сниппета. Я так подозреваю, что значение `0` является строкой, и если в сниппете оно не приводится к логическому типу, то получается всегда true. Хотя могу и ошибаться. Комп остался в Москве, а я сижу на даче, семью спасаю ))
Решения вижу 2.
1. Вызывай через феном синтаксис с указанием параметра
Решения вижу 2.
1. Вызывай через феном синтаксис с указанием параметра
...
'cfgSetAutoBrMode' => false,
...
2. Скопируй сниппет Jevix и в нем приводи к булеву типу этот параметр. Комп остался в Москве, а я сижу на даче, семью спасаю ))Похвально! :)
Решения вижу 2.Не сработало.
1. Вызывай через феном синтаксис с указанием параметра
…
'cfgSetAutoBrMode' => false,
...
Илья, я не понимаю, как у тебя это получается.
Вот не поленился и проверил (Спасибо огромное modhost.pro за механизм тестовых сайтов!). Всё работает!!!
Вот не поленился и проверил (Спасибо огромное modhost.pro за механизм тестовых сайтов!). Всё работает!!!
Сергей, спасибо за ответ. У меня точно такой же вызов и он не работает:
joxi.ru/eAOYVYPI9lgERm
{$_modx->runSnippet('!Jevix', [
'input' => $_modx->resource.content,
'cfgSetAutoBrMode' => false,
])}
У тебя в наборах параметров глобально для тикетов эта опция включена?joxi.ru/eAOYVYPI9lgERm
s21923.h10.modhost.pro/manager
s21923
8GVLBfZco8xy
Только я вызываю сниппет с дефолтными параметрами.
s21923
8GVLBfZco8xy
Только я вызываю сниппет с дефолтными параметрами.
Да, вижу. Только это сделано на обычном ресурсе. Я создал тестовую категорию тикетов и вызвал тот же шаблон на тестовом тикете. Работать перестало.
Только это сделано на обычном ресурсе.Ты где-то писал про тикеты? Прямо как маленький.
Тебе ниже уже написали про тикеты. Их надо заново пересохранить с отключенным Jevix. В противном случае изменённый джевисом тикет сохранится в БД уже с тегом br. Поэтому ты и не можешь его изменить через сниппет. Чтобы это стало возможным, нужно в БД сохранять исходный текст тикета.
Спасибо, что продолжаешь отвечать.
Если я выключаю эту настройку в наборах параметров joxi.ru/eAOYVYPI9lgERm ничего пресохранять не нужно. Текст выводится без переносов. Включаю её — переносит. Почему так работает, а с вызовом через сниппет — нет? Я чего-то не понимаю?
Я хотел понять — можно ли добиться того же (как я выключаю настройку joxi.ru/eAOYVYPI9lgERm) с помощью вывода контента тикета через сниппет Jevix.
Если я выключаю эту настройку в наборах параметров joxi.ru/eAOYVYPI9lgERm ничего пресохранять не нужно. Текст выводится без переносов. Включаю её — переносит. Почему так работает, а с вызовом через сниппет — нет? Я чего-то не понимаю?
Я хотел понять — можно ли добиться того же (как я выключаю настройку joxi.ru/eAOYVYPI9lgERm) с помощью вывода контента тикета через сниппет Jevix.
Заглянул в код (кстати, ты бы мог сделать это сам). По поводу сохранения в БД измененного тикета беру свои слова обратно. В БД хранится исходный текст. Поэтому пересохранять ничего не нужно.
Теперь объясняю, почему тебе кажется, что не работает вывод через сниппет. На самом деле он работает. Просто работает 2 раза. Первый раз сниппет Jevix вызывается в классе Ticket, когда идет получение ресурса по алиасу. В этот момент отрабатывают опции Ticket сниппета Jevix. Тут и добавляется тег br. Второй раз он вызывается в шаблоне. Отсюда напрашиваются 2 вывода:
1. Достаточно отключить опцию cfgSetAutoBrMode в параметрах Ticket.
2. Выводить контент тикета через сниппет Jevix нет никакой необходимости.
Теперь объясняю, почему тебе кажется, что не работает вывод через сниппет. На самом деле он работает. Просто работает 2 раза. Первый раз сниппет Jevix вызывается в классе Ticket, когда идет получение ресурса по алиасу. В этот момент отрабатывают опции Ticket сниппета Jevix. Тут и добавляется тег br. Второй раз он вызывается в шаблоне. Отсюда напрашиваются 2 вывода:
1. Достаточно отключить опцию cfgSetAutoBrMode в параметрах Ticket.
2. Выводить контент тикета через сниппет Jevix нет никакой необходимости.
Спасибо, Сергей.
Под
Если да, то я бы давно отключил cfgSetAutoBrMode для всех тикетов через наборы параметров. Но у меня есть больше кол-во тикетов где мне нужны автоматические br (потому что они публикуются через фронтенд пользователями без wysiwyg редактора). И так же есть тикеты в которых эти автоматические br не нужны (они создаются на бекенде). Выход нашёл такой:
Создал набор параметров Site. Связал его со сниппетом Jevix. В нём запретил тег br. Вывожу его в нужных шаблонах [[!Jevix@Site? &input=`[[*content]]`]]. Понимаю, что это криво, но другого выхода пока что не вижу. Если есть что-то более изящное для моей ситуации — буду признателен.
Может быть сможешь подсказать, где автор принудительно прописывал это
Заглянул в код (кстати, ты бы мог сделать это сам).Так уж получилось, что я не программист. Что-то понимаю, но не настолько.
Под
Достаточно отключить опцию cfgSetAutoBrMode в параметрах Ticketты имеешь в виду отключение в наборах параметров joxi.ru/brR545Pi7EbxoA?
Если да, то я бы давно отключил cfgSetAutoBrMode для всех тикетов через наборы параметров. Но у меня есть больше кол-во тикетов где мне нужны автоматические br (потому что они публикуются через фронтенд пользователями без wysiwyg редактора). И так же есть тикеты в которых эти автоматические br не нужны (они создаются на бекенде). Выход нашёл такой:
Создал набор параметров Site. Связал его со сниппетом Jevix. В нём запретил тег br. Вывожу его в нужных шаблонах [[!Jevix@Site? &input=`[[*content]]`]]. Понимаю, что это криво, но другого выхода пока что не вижу. Если есть что-то более изящное для моей ситуации — буду признателен.
Может быть сможешь подсказать, где автор принудительно прописывал это
protected $isAutoBrMode = false; // \n =
? Создал набор параметров Site. Связал его со сниппетом Jevix. Понимаю, что это криво, но другого выхода пока что не вижу.Вполне себе годное решение, но от двойной обработки контента Jevix'ом не спасает. МОжет проще в плагине при загрузке документа вырезать теги br?
Можешь подсказать пример плагина? Я не силён в программировании. Плагин как-то можно вешать на определенные шаблоны через «Параметры» плагина joxi.ru/ZrJYDYPIwl7EvA?
Сорри, пропустил твой коммент. Самый простой вариант
// Событие OnWebPagePrerender
$templates = [1,2,3]; // id шаблонов, у которых нужно удалять br.
if (in_array($modx->resource->template, $templates)) {
$modx->resource->_output = str_replace('<br>', '' , $modx->resource->_output);
}
Мне кажется, в таких случаях всегда нужно смотреть на корень проблемы. Почитал комменты, у нас с Wassi разные нюансы ситуации. Всё, что ему нужно это сбросить кэш старых тикетов, чтобы при первом заходе на страницу пользователя они перегенерировались. Он меняет настройки джевикса для тикетов, но на старых документах ситуация остаётся прежней из-за особенностей кэширования. По-моему, это уже лет 5 обсуждается с разных сторон. То есть, второе заворачивание тиветов в джевикс возникло как попытка исправить проблему для старых доков.
В сообществе уже могли создать небольшой плагин или пример кода для запуска через консоль, которые бы очищали кэш всех тикетов. Если не создали, то имеет смысл это сделать)
В сообществе уже могли создать небольшой плагин или пример кода для запуска через консоль, которые бы очищали кэш всех тикетов. Если не создали, то имеет смысл это сделать)
Спасибо за ответ. На самом деле, как только я меняю значение набора параметров и вызываю контент через сниппет Jevix — на старых и новых тикетах всё сбрасывается.
Сергей, благодарю!
Пересохранить большое ко-во тикетов не смогу. И Jevix отключать не хочется. Можно же, по-идее, почистить эти br фильтрами вывода?
Все работает, только что проверил. После установки параметра на true, нужно просто заново сохранить тикет или комментарий и тогда br пропадут.
Подскажите, что именно у вас работает?
Удаление или установка тегов br в тикетах и комментариях.
С помощью вызова сниппета Jevix или вы в настройках изменили значение?
В параметрах изменил значение.
В моём случае не решает проблему.
Спасибо, что ответили.
Спасибо, что ответили.
Алексей, подскажите, где вы прописали
protected $isAutoBrMode = false; // \n =
?
Добрый день. Не сразу заметил сообщение (и лучше «на ты», интернет же). Прописывал в файле компонента
prnt.sc/rqkm3g
Но как писал Серегй выше, решение «до первого обновления». Насколько помню, раньше обновление бутстраповского набора шаблонов могло обновить и джевикс за компанию (но это не точно).
prnt.sc/rqkm3g
Но как писал Серегй выше, решение «до первого обновления». Насколько помню, раньше обновление бутстраповского набора шаблонов могло обновить и джевикс за компанию (но это не точно).
Да забудь ты уже про это. Во-первых, не надо лазить в ядро. Во-вторых, этот же результат можно получить отключив опцию cfgSetAutoBrMode в наборе параметров Ticket.
Можно было бы использовать второй вариант, а в нужных шаблонах выводить контент через Jevix с включенной опцией. Но тут возможны проблемы типа предпросмотра тикета. Ибо нет возможности повлиять на вывод.
Можно было бы использовать второй вариант, а в нужных шаблонах выводить контент через Jevix с включенной опцией. Но тут возможны проблемы типа предпросмотра тикета. Ибо нет возможности повлиять на вывод.
Сергей, привет.
Если есть возможность, помоги разобраться с ещё одной проблемой. Почему-то Jevix вырезает из контента тикета ссылки, в которые я проставляю плейсхолдеры Modx вида [[~88]]. Хотя в самом тикете ставлю галку «Выполнять теги MODx».
Если есть возможность, помоги разобраться с ещё одной проблемой. Почему-то Jevix вырезает из контента тикета ссылки, в которые я проставляю плейсхолдеры Modx вида [[~88]]. Хотя в самом тикете ставлю галку «Выполнять теги MODx».
Олá. А ты уверен, что это Jevix вырезает? Отключал его?
Да, если отключить — всё работает.
Насколько я знаю, вроде не должен резать. Может как-то параметр cfgSetAutoLinkMode влияет?
Проверял. Отключал этот и другие параметры. Даже стал баловаться вот такими вещами:
Ставлю галку «Выполнять теги MODx». Если отключаю Jevix — всё выводит без проблем. Но не хотелось бы совсем отключать Jevix. Пробую добавить исключение для содержимого href. Делаю это таким образом:
Вставляю это в наборе параметров Tickets (cfgAllowTagParams)
Ставлю галку «Выполнять теги 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()
На новом тестовом сайте та же история.
"a":{"title","href"}
А что, href вырезается даже если указать готовую ссылку?
Нет, готовая выводится нормально.
Честно, не знаю. Проверил у себя — всё норм. Где-то у тебя накосячено возможно.
Ты как проверял? Я создал тестовый сайт на модхост — там такая же проблема.
s22021.h10.modhost.pro
login: s22021
pass: rPzsAiaKbm7F
s22021.h10.modhost.pro
login: s22021
pass: rPzsAiaKbm7F
Забавный баг. Остальные теги MODX нормально работают.
Тикеты сейчас поддерживает не Василий, а чел из этого сообщества. Попробуй обратиться к нему. У меня с ним контакта не получилось.
Тикеты сейчас поддерживает не Василий, а чел из этого сообщества. Попробуй обратиться к нему. У меня с ним контакта не получилось.
Спасибо, Сергей. Пробую общаться. :)
Я тебе за прошлый раз «спасибо» не отправил. Куда удобнее?
Я тебе за прошлый раз «спасибо» не отправил. Куда удобнее?
Думаю, ты найдешь куда потратить это «спасибо». Мне хватит благодарности. :) Редкое по нынешним временам явление.
Для тех, кто будет искать решение проблемы: тикетс вырезает из контента ссылки с тегами MODx вида [[~88]] (даже при активной «галке» «Выполнять теги MODx»).
Решение такое:
В «Наборах параметров» ( joxi.ru/Q2KYEYPILob0Lr ) для Тикетов заменить в cfgAllowTagParams:
Это
Решение такое:
В «Наборах параметров» ( joxi.ru/Q2KYEYPILob0Lr ) для Тикетов заменить в cfgAllowTagParams:
Это
"a":["title","href"]
заменить на "a":{"title":"#text","href":"#skip"}
Спасибо @tolanych за подсказку.
Небольшое уточнение. Согласно документации коду достаточно написать так
Самое интересное, что ты можешь указать практически любое значение
П.С. Вообще, у Jevix самый большой минус — это отсутствие документации. Не программисту разобраться тяжело.
"a":{"title":"#text","href":"#text"}
Ибо по-умолчанию атрибуту href присваивается тип #link. А при указании в атрибуте тега MODX, он фильтрацию не проходит и тег a вырезается. Поэтому нужно указать другой тип. А чтобы foreach не сломался, нужно указать типы для всех атрибутов. Иначе выпадает ошибка, о которой ты писал выше. Самое интересное, что ты можешь указать практически любое значение
"a":{"title":"#text","href":"#modx"}
"a":{"title":"#text","href":"#fuck"}
В этом случае Jevix не найдёт соответствующего фильтра и оставит значение без обработки. В случае же с типом #text, значение прогонится через функцию htmlspecialchars().П.С. Вообще, у Jevix самый большой минус — это отсутствие документации. Не программисту разобраться тяжело.
Я первым делом попробовал вариант «a»:{«title»:"#text",«href»:"#text"}. Но не помогло. И в логах стали сыпаться ошибки парсера Fenom.
Помог вариант с произвольным значением фильтра.
Помог вариант с произвольным значением фильтра.
Вполне возможен ещё один вариант. В админке у тикетов отключить Jevix, а в нужных шаблонах добавить вывод контента через сниппет Jevix. В этом случае тег [[~88]] должен распарситься до обработки Jevix и всё отработает как положено. Чисто в теории.
В этом случае, кстати, ты можешь динамически управлять поведением Jevix через параметры сниппета, в отличие от наборов параметров.
В этом случае, кстати, ты можешь динамически управлять поведением Jevix через параметры сниппета, в отличие от наборов параметров.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.