Поиск и замена терминов. Пример реализации.

Задача поиска и замены каких либо терминов в тексте кажется на первый взгляд довольно простой в PHP.  Есть очень мощные инструменты вроде str_replace, а также поиск и замена с помощью регулярных выражений, например, preg_replace и preg_replace_callback.

На практике возникает множество нюансов, которое не позволяют воспользоваться преимуществами «пакетной» замены.

Была бы очень кстати функция вроде str_replace_callback — гипотетическая функция, позволяющая анализировать каждый случай подстановки. Но пока такой функции в PHP нет, придется все делать вручную.

О каких нюансах идет речь?

Пример из практики : требуется подстановка термина в тексте статьи на сайте и создание связанных с термином описаний, которые открываются при нажатии на термин. При этом хотелось бы, чтобы:

  1. описания не дублировались — т.е. при многократной замене одного и того же термина и его словоформ в тексте — его описание добавлялось лишь однократно,
  2. присутствовали описания только тех терминов, которые были найдены в тексте.

При пакетной замене str_replace,  мы не сможем контролировать какие термины мы заменили. А регулярные выражения не позволят работать с любыми подстановками, т.к. нельзя использовать символы, участвующие в синтаксисе регулярных выражений.

Постановка задачи

Задача поставлена была для реализации в Drupal 7. Но может быть сформулирована в терминах любой CMS.

Термин — публикация, описывающая какой-либо специальный термин. Содержит — заголовок, текст описания и набор словоформ. Словоформы — это виды написания термина в публикациях, где будет произведена подстановка.

Необходимо создать функцию, которая находит словоформы термина в предложенном тексте и применяет к ним специальное HTML оформление. К тексту также добавляются описания найденных терминов (наподобие сносок).

Словоформа термина, обнаруженная в тексте, должна быть замена на следующий HTML код:

Реализация

Для реализации в Drupal, я добавил тип материала — termin, с произвольным полем field_wordforms для перечисления словоформ.

Помимо тега <term>, я буду добавлять ссылку на описание термина, добавляемого после текста.

Не всегда удобны описания терминов после текста. Лично я их показываю в отдельном «окне», создаваемом с помощью jquery плагина fancybox.

Завершающий штрих — добавим немного CSS :

Написать комментарий

Мало букафф? Читайте есчо !

Читаем курсы валют, реализация для drupal

Декабрь 5, 2012 г.

Как я писал ранее, хороший информ-сервис, это не куча вариантов виджетов для вашего сайта, а, в наиболее ценном случае, возможность грузить данные информ-сервиса в виде xml. В развитом случае, это целый API для разработчика, с возможностью выборки данных ...

Читать

Настраиваем мета информацию о картинке для соц. сетей в Drupal 7

Сентябрь 27, 2016 г.

Когда посетители делятся ссылкой на ваш сайт в какой нить соц.сети, то программа со стороны соц. сети (Facebook или вКонтакте) пытается собрать информацию ...

Читать

 

Комментарии к «Поиск и замена терминов. Пример реализации.»

Понравилась статья? Есть вопросы? - пишите в комментариях.



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