Как лучше оформить замены в тексте?
Приветствую.
Размышляю над тем, как сделать замены в тексте — слово заменить на ссылку. Надеюсь вы подскажете алгоритм. Есть несколько разных шаблонов и текст, в котором надо делать замены, размещен в разных блоках (в стандартных полях типа description и content, а также в дополнительных полях). Количество полей разное, зависит от шаблона — от двух до пяти. Мне понятно, вероятно я так думаю, что нужно взять все эти поля о объединить их в одно (добавить какой-нибудь разделитель), затем пройтись алгоритмом замены по объединенному тексту, а после разделить текст по разделителю и вернуть модифицированный текст в каждое поле.
Подскажите пожалуйста как конкретно это лучше всего реализовать?
Размышляю над тем, как сделать замены в тексте — слово заменить на ссылку. Надеюсь вы подскажете алгоритм. Есть несколько разных шаблонов и текст, в котором надо делать замены, размещен в разных блоках (в стандартных полях типа description и content, а также в дополнительных полях). Количество полей разное, зависит от шаблона — от двух до пяти. Мне понятно, вероятно я так думаю, что нужно взять все эти поля о объединить их в одно (добавить какой-нибудь разделитель), затем пройтись алгоритмом замены по объединенному тексту, а после разделить текст по разделителю и вернуть модифицированный текст в каждое поле.
Подскажите пожалуйста как конкретно это лучше всего реализовать?
Комментарии: 16
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Например, сниппет link:
В шаблоне выводите:
Вывод:
Если Вам все равно, в каком поле встретится слово, то это как раз первый вариант. Прописываете в нем замену 100 слов и при парсинге шаблона система их заменит там, где они встречаются.
Можно вообще не привязываться к полям, а сделать плагин замены на событие OnWebPagePrerender и тогда будет обрабатываться вообще весь код страницы перед выводом в браузер.
Давайте попробую еще раз. Для примера возьмем всего два поля и две замены. В первом и во втором полях встречаются по два искомых для замены слова. Используя первый вариант (через один и тот же модификатор для каждого поля), в каждом из двух полей мы получим по две замены. Этот вариант не подходит, так как в нем должно было бы замениться только два первых совпадения, а они встречаются в первом поле. Во втором же поле замен не должно было быть, так как по одной из них уже сделано было в первом поле.
Список замен один, общий для всех полей. Таким образом первый вариант не подходит из-за возможности повторения множественности замен, а второй — из-за того, что список замен общий для всех полей.
Третий предложенный вами вариант с обработкой всего кода страницы тоже не подход, так как нужна обработка данных именно в некоторых полях, а не во всех.
В этом варианте заменятся все совпадения во всех полях. Модификатор вызывается по отдельности для каждого поля.
То есть если у Вас в поле description такой текст:
Lorem ipsum dolor слово1 sit amet, consectetur adipiscing слово2 elit.
А в поле content такой:
Lorem слово1 ipsum dolor sit amet, consectetur adipiscing слово2 elit слово3.
То в результате работы сниппета:
У Вас [[*description:snippet]] выведет:
Lorem ipsum dolor замена1 sit amet, consectetur adipiscing замена2 elit.
А [[*content:snippet]] выведет:
Lorem замена1 ipsum dolor sit amet, consectetur adipiscing замена2 elit замена3.
Имеем три поля:
Имеем список замен (список будет исключительно в единичном экземпляре):
После преобразования должно получиться вот что:
Т. е. должна быть только одна замена из списка замен по всем полям, если их объединить.
А так да — объединяйте все в один текст, делите, меняйте, потом пишите результат в плейсхолдеры и выводите на страницу.
В сниппете:
Выводите на страницу:
Я просто никогда раньше с плейсхолдерами не сталкивался.
Может быть у вас завалялась ссылочка на полезный материал по этим плейсхолдерам. Посмотрел информацию по ссылке, данной вами выше, — она скудна и без объяснений подобно вашим не разберешься.