Drupal → Дружим GeSHi filter и validator.w3.org
Уже около года на drupal.org весит предложение к разработчикам GeSHi, подружить их фильтр с валидатором. Но воз и ныне там :(
Проблема в том, что блок с кодом, с помощью дефолтных фильтров, оборачивается тегом p
. Но по стандартам, параграфы не могут содержать блочных элементов. На такой код валидатор ругается error-ом:
No p element in scope but a p end tag seen.
Если гора не идёт к Магомету… =) Подправить контент до его вывода, можно с помощью создания своего фильтра. Всё очень просто:
/** * Реализация hook_filter() */ function mymodule_filter($op, $delta = 0, $format = -1, $text = '', $cache_id = 0) { // Регистрируем в друпале свой фильтр if ($op == 'list') { return array('GeSHi filter paragraph fix'); } // Описание фильтра if ($op == 'description') { return 'Удаляет теги параграфов в которые заключён блок с кодом. Необходимо для прохождения валидации на w3c.org.'; } // Подготовка контента if ($op == 'prepare') { return $text; } // Обработка контента if ($op == 'process') { return preg_replace('#<p>(<div class="geshifilter">.+?</div>)</p>#s', '$1', $text); } }
После включения модуля с этим кодом, на странице настроек форматов ввода (admin/settings/filters) появится новый фильтр, который нужно включить:
При этом, в настройках GeSHi, пункт "Code container, wrapping technique" должен быть установлен в GESHI_HEADER_PRE, и блоки с кодом, нужно будет всегда отбивать пустой строкой.
Подробнее про создание своих фильтров.
Теперь мой блог наконец full HTML5 valid! =)
Комментарии
Спасибо за решение!
Уже нет.
Оставить комментарий