xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Как работает система фильтров

Опубликовано в

Схема работы системы фильтров из книги Pro Drupal development:

Схема работы фильтра

А теперь подробнее на примере отображения фильтрованного текста ноды:

  1. Пользователь открывает страницу ноды.

  2. Нода загружается из базы и её содержимое проходит через функцию check_markup(). В качестве одного из параметров присутствует формат ввода, выбранный автором при создании или сохранении ноды.

  3. Ф-я check_markup() по md5 хэшу текста проверяет есть ли в кэше (таблица cache_filter) уже отфильтрованный текст и если есть, то возвращает его.

  4. Если отфильтрованного текста в кэше нет, то загружается список включённых фильтров текущего формата ввода. Фильтры сортируются согласно их весу.

  5. Вызывается хук hook_filter() с параметром prepare. На этом этапе каждый включённый фильтр подготавливает текст для дальнейшей обработки.

  6. Вызывается хук hook_filter() с параметром process и текст проходит обработку каждым фильтром (смайлики заменяются на картинки, ссылки оборачиваются в тег <a /> и т.д.).

  7. Если фильтры позволяют кэшировать результат, то он сохраняется в кэш на 1 день.

  8. Отфильтрованный текст выводится пользователю.

Вот так вот всё просто. Не лишним будет почитать описание хука hook_filter().

Кстати! Если контент на сайте изменяется редко, то можно увеличить время хранения отфильтрованного текста в кэше например дней до 30 (зачем каждый день производить одни и те же манипуляции?!). Для этого нужно в файле modules/filter/filter.module, в строчке 460, заменить:

cache_set($cache_id, $text, 'cache_filter', time() + (60 * 60 * 24));

на

cache_set($cache_id, $text, 'cache_filter', time() + (60 * 60 * 24 * 30));

В семёрке это строчка 765.

Написанное актуально для Drupal 6
Похожие записи

Комментарии RSS

В настройках в админке друпал 7 ведь есть минимальное и максимальное время кеша. Это не одно и тоже с изменением строки 765?

нет

Настройки кэша в админке влияют только на кэш страниц и кэш блоков. Остальные варианты кэша, в том числе и кэш фильтров, не управляются из админки.

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании