Внимание! Форум временно закрыт. Все вопросы вы можете задать на странице MaxSite CMS в Github

Пример кастомизации html-кода без модификации функций ядра.

Только для тех, кто понимает.
Аватар пользователя
searchingman
Модератор
Сообщений: 1392
Зарегистрирован: 28 май 2012, 16:02

Пример кастомизации html-кода без модификации функций ядра.

Сообщение searchingman » 16 окт 2013, 18:32

Большинство функций ядра MaxSite CMS возвращают готовый html-код, что не всегда хорошо, если необходимо определенным образом задать html-структура с определенными тегами и их атрибутами.

Один из вариантов решения править функции ядра MaxSite CMS, что не является верным решением, т.к. при последующих обновлениях движка нужно делать повторные правки.
Другим вариантом может выступать создание своей функции на базе существующей с необходимым поведением.

Но часто требуются лишь незначительные правки структуры, н-р, добавить несколько нужных атрибутов определенных тегов.

В статье приведен пример кастомизации структуры html-кода стандартного компонента меню Maxsite CMS.

Интересно услышать мнения разработчиков.

Аватар пользователя
vimruler
Сообщений: 401
Зарегистрирован: 13 май 2009, 09:31

Re: Пример кастомизации html-кода без модификации функций ядра.

Сообщение vimruler » 17 окт 2013, 04:10

Способ хорош! Всяко легче, чем писать регулярные выражения.

Из минусов:
- незначительное увеличение потребляемой памяти и времени генерации кода страницы. Думаю, что для большинства проектов - не принципиально. Тем более при включенном кэшировании.
- метод требует доработки для случаев, когда функция сама делает вывод результата. Хорошо бы привести пример с использованием функций ob_start+ob_get_contents+ob_end_clean

Аватар пользователя
searchingman
Модератор
Сообщений: 1392
Зарегистрирован: 28 май 2012, 16:02

Re: Пример кастомизации html-кода без модификации функций ядра.

Сообщение searchingman » 17 окт 2013, 12:28

vimruler писал(а):Способ хорош! Всяко легче, чем писать регулярные выражения.

Искать можно и регулярными выражениями, а вот для модификации DOM лучше что-то более специфическое.

vimruler писал(а):Из минусов:
- незначительное увеличение потребляемой памяти и времени генерации кода страницы. Думаю, что для большинства проектов - не принципиально. Тем более при включенном кэшировании.

Если слишком не увлекаться такими способами , то производительность устроит.
vimruler писал(а): Хорошо бы привести пример с использованием функций ob_start+ob_get_contents+ob_end_clean

А при чем здесь буферизация вывода ?
При начале формирования любой страницы она включается , затем в конце отдается контент.
Править контент (сформированный html-код страницы) с помощью данного способа точно не имеет смысла, т.к. его формирование всегда можно поправить внутри своего шаблона.
Или речь не об этом ?

Аватар пользователя
vimruler
Сообщений: 401
Зарегистрирован: 13 май 2009, 09:31

Re: Пример кастомизации html-кода без модификации функций ядра.

Сообщение vimruler » 18 окт 2013, 05:46

searchingman писал(а):А при чем здесь буферизация вывода ?
При начале формирования любой страницы она включается , затем в конце отдается контент.
Править контент (сформированный html-код страницы) с помощью данного способа точно не имеет смысла, т.к. его формирование всегда можно поправить внутри своего шаблона.
Или речь не об этом ?


Именно, что не об этом речь. Возьмём к примеру функцию mso_link_rel - она не возвращает результат в виде строки, а сразу выводит результат в поток (используется echo). Вот для таких функций и нужно использовать буферизацию вывода (это не помешает глобальной буферизации вывода) и к полученной строке применять ваш метод. Тогда построения DOM из строки конечно будут менее ресурсозатратным (в отличии от работы с html-кодом всей страницы) и вполне приемлемыми.

Аватар пользователя
searchingman
Модератор
Сообщений: 1392
Зарегистрирован: 28 май 2012, 16:02

Re: Пример кастомизации html-кода без модификации функций ядра.

Сообщение searchingman » 18 окт 2013, 09:08

vimruler писал(а):Возьмём к примеру функцию mso_link_rel - она не возвращает результат в виде строки, а сразу выводит результат в поток (используется echo). Вот для таких функций и нужно использовать буферизацию вывода (это не помешает глобальной буферизации вывода) и к полученной строке применять ваш метод. Тогда построения DOM из строки конечно будут менее ресурсозатратным (в отличии от работы с html-кодом всей страницы) и вполне приемлемыми.


Да, теперь ясно о чем речь.

Для этого использовать стековость буферов вывода и callback-функцию для обработки вложенного буфера.

Функция для обработки буфера:

Код: Выбрать все

function my_function_for_buffer($buffer) {

// обрабатываем как-то $buffer
return $buffer;

}


Обработка нужной функции:

Код: Выбрать все

ob_start("my_function_for_buffer");
вывод какой-то функции
ob_end_clean();


Чуть позже в статье приведу полноценный пример использования.


Вернуться в «if (!is_type('Programmer')) die('not for you');»

Кто сейчас на форуме

Пользователь просматривает форум: нет зарегистрированных пользователей

cron