Наша совместная команда Banwar.org

Связаться с нами

  • (097) ?601-88-87
    (067) ?493-44-27
    (096) ?830-00-01

Статьи

PHP: як прибрати коментарі з html розмітки

  1. Загальна ідея
  2. «Чистий» PHP
  3. Yii фреймворк
  4. CMS (WordPress)

Перш за все, кілька пояснень. Припустимо, у вас є html сторінка з коментарями, які ви не хочете показувати відвідувачам сайту. Як їх прибрати? Природно, це можна зробити за допомогою будь-якого текстового редактора 🙂 Але це не найкращий варіант 😉

HTML коментарі допомагають читати розмітку під час розробки, особливо якщо макет сторінки розбитий на кілька частин. Тобто відкриває тег може перебувати в одному файлі, а закриває - в іншому. У таких випадках коментар близько закриває тега може дійсно заощадити ваш час.

З іншого боку, наявність таких коментарів в розмітці хоч і трохи, але збільшує розмір сторінки, та показувати їх відвідувачам якось неправильно.

Загальна ідея

Для того, щоб якимось чином змінити сторінку нам потрібно отримати доступ до її вмісту. В PHP для цього передбачені функції управління виводу . Вони дозволяють перехопити дані, які скрипт відправляє браузеру і якимось чином їх змінити.

На практиці це означає, що перед початком виведення нам потрібно викликати функцію ob_start, і в її першому параметрі вказати ім'я функції, яка буде обробляти дані. А в кінці скрипта потрібно викликати функцію ob_end_flush, яка відправить дані браузеру.

Сам функція видалення коментарів з HTML розмітки може виглядати якось так:

function removeHtmlComments ($ html) {return preg_replace ( '/<!--(.*?)-->/', '', $ html); }

Як бачите, в ній за допомогою регулярного виразу ми замінюємо HTML коментарі на порожній рядок.

Ідея, сподіваюся, зрозуміла. Переходимо до прикладів.

«Чистий» PHP

<? Php ob_start ( 'removeHtmlComments'); include 'header.php'; include 'content.php'; include 'footer.php'; ob_end_flush (); ?>

Код, звичайно, буде залежати від структури вашого застосування, але загальний принцип не змінюється - створюєте буфер перед формуванням сторінки і потім очищаєте.

Yii фреймворк

Тут завдання можна вирішити кількома способами. Я приведу один з найпростіших. Додайте в масив в файлі конфігурації (main.php) два елементи:

return array (... 'onBeginRequest' => function ($ event) {return ob_start (function ($ html) {return preg_replace ( '/<!--(.*?)-->/', '', $ html) ;});}, 'onEndRequest' => function ($ event) {return ob_get_flush ();} ...);

Тут використовуються вбудовані події фреймворка - onBeginRequest і onEndRequest. Перша подія відбувається на початку обробки запиту, друге - перед її завершенням.

Примітка. Якщо ви плануєте використовувати фреймворк Yii, дуже рекомендую ознайомитися з подіями більш детально .

З більшістю інших фреймворків ситуація аналогічна. Деталі реалізації, звичайно, будуть відрізнятися, але якщо ви знаєте в якій послідовності відбувається обробка запиту, то зможете легко визначити, де саме потрібно викликати ob_start і ob_get_flush.

CMS (WordPress)

Багато системи управління контентом, також як і фреймворки, надають можливість виконати потрібний код на різних етапах обробки запиту. Правда є свої нюанси.

Розглянемо як приклад WordPress. У більшості випадків для вирішення нашої задачі буде досить в файл functions.php теми додати такий код.

function removeHtmlComments ($ html) {return preg_replace ( '/<!--(.*?)-->/', '', $ html); } Function bufferStart () {ob_start ( 'removeHtmlComments'); } Function bufferEnd () {ob_end_flush (); } Add_action ( 'get_header', 'bufferStart'); add_action ( 'wp_footer', 'bufferEnd');

Тут використовуються дві події get_header і wp_footer. Такий код буде працювати, але проблема в тому, що обидві події викликаються з файлів теми, яка може мати довільну структуру. Простіше кажучи, тема може не викликати ці події.

У таких випадках можна використовувати власні події. Для цього потрібно знайти відкриває і закриває теги <html>.

Перед відкриває додаємо

do_action ( 'my_theme_output_begin');

після закриває -

do_action ( 'my_theme_output_end');

Тепер у нас є дві події, які можна використовувати для створення і очищення буфера.

Якщо є питання або зауваження, пишіть!

Успіхів!

Як їх прибрати?
Php'; ob_end_flush (); ?

Новости

Banwar.org
Наша совместная команда Banwar.org. Сайт казино "Пари Матч" теперь доступен для всех желающих, жаждущих волнения и азартных приключений.