Как я прикручивал php мануал (часть 2)
Прошу прощения за продолжительный перерыв, но к сожалению затянула рутина и работа, просто физически не было времени продолжать писать здесь.
Итак сегодня я хочу продолжить свой рассказ о том как я прикручивал мануал на данный ресурс.
В прошлой статье я описал, как возможно преобразовать html мануал под свои нужды. Надеюсь, что вы разобрались, что к чему. Ну что ж продолжим.
Мне требовалось интегрировать страницу в тело вордпресса. Они уже были подготовлены для этого, но полностью страница html мне была не нужна. Надо было выдернуть лишь часть ее внутри тэгов body. Вот тут-то мне и понадобились регулярки. Нет можно было конечно не осваиваться с регулярками, а взять мою любимую функцию explode и с ее помощью все сделать, но это было бы нудно, и, некрасиво. Согласитесь гораздо приятнее, когда весь код выглядит “элегантно”. Вот примерно такая функция работает у меня при запросах к мануалу php:
|
Что же она может? Данный алгоритм может как искать по имени функции, так и просто отдавать требуемые страницы. Хочу заметить что сделано все достаточно примитивно, ибо мне не нужны были какие-то изыски, единственное на данный момент что я хочу доработать это чтобы для каждой страницы в мануале генерился свой title и meta-description, но пока к сожаленеию не дошли руки. Ну это все на будущее, а теперь рассмотрим то что есть.
Первая строка:
|
Здесь в строке поиска (элемент массива POST с ключом search) мы смотрим чтобы значение соответствовало шаблону(только цифры, латинские символы, точка, пробел, нижнее подчеркивание). Результат в виде массива помещается в переменную $search. Если выражение будет соответствовать то первый элемент массива как раз и будет содержать его.
Дальше подобную же проверку проходит элемент глобального массива $_SERVER['QUERY_STRING'] (для запросов к различным страницам мануала используется именно этот элемент).
После чего нам требуется получить дирректорию в которой лежит мануал. Так как все написано под вордпресс то я воспользовался функцией WP которая получает сохраненные в админке данные(дирректорию в данном случае).
|
Далее если переменная $search не пустая-проверяем существует ли файл с такой функцией (все файлы мануала имеют удобное для нас имя. function.имя функции.html), если такой файл существует-читаем его в строку.
В ином случае:
если не задана $page выдаем индекс;
иначе ищем файл с таким названием и если существует читаем в строку.
Ну, а дальше самое “сладкое”:
|
регулярное выражение. Так как у боди могут быть параметры используем ([^>]*)
т.е любой символ, но не “>” и данные символы могут повторяться 0 или более раз (благодаря “*”).
(.*?) – это означает любой символ любое количество раз. Ну и ищем все это в переменной $man_func и пишем в $func_body. Таким образом $func_body[2] будет содержать именно то, что нам надо. (почему читайте в предыдущей статье цикла) Ну и собственно возвращаем результат обработки:
|
Все готово. Функция простая как топор.
Пишите свои комментарии, пожелания, указывайте на замеченные недостатки. Всегда буду рад обсудить.
Спасибо за мануал. Потратил около двух дней на изучение регулярных выражений, но обрезать содержание тэгов познал только после этой статьи.
Просьба написать ман с использованием регулярных выражений с функциями preg_* и параметрами, позволяющими минимизировать потредление памяти.
Бошка трещит от этих регулярок