Приховуємо контент від гостей

19

Від автора: На всіляких форумах і сайтах Ви могли не раз бачити якийсь прихований контент — посилання, зображення і пр. для перегляду якого необхідно авторизуватись. Гості замість прихованого вмісту бачать щось типу «Авторизуйтеся для перегляду прихованого вмісту. Авторизовані користувачі без проблем бачать прихований контент.

Сьогодні я поділюся з Вами способом, як організувати подібну річ на сайті. В якості вихідних до даного уроку я скористаюся з исходниками уроку Встановлення візуального редактора з файловим менеджером і джерела з уроку Створення простої системи авторизації. Також Ви можете написати власне рішення для управління контентом сторінок і розмежування гостей і авторизованих користувачів.

Увага!!! У зв’язку зі специфікою публікації (при публікації використовуються BB-теги, які перетинаються з публікуються BB-тегами) рекомендується переглянути текстову версію.

Деталі підручника

Тема: PHP, регулярні вирази

Складність: Середня

Урок: Відео версія (.mp4)

Час: 00:30:06

Розмір архіву: 67 Mb

Приховуємо контент від гостейПриховуємо контент від гостей

Отже, поєднавши исходники з обох зазначених уроків, я отримав приблизно таку картину:

Приховуємо контент від гостей

Тут форма авторизації нам потрібна саме для того, щоб відрізняти авторизованого користувача від гостя. Якщо користувач успішно авторизований, то в сесії створюється змінна $_SESSION[‘admin’]. Звичайно ж, якщо на сайті буде множинна реєстрація/авторизація, то змінну логічніше назвати $_SESSION[‘user’], але у нас передбачено 1 користувач. Створення системи реєстрації не є темою даного уроку.

Тепер про те, як би ми хотіли публікувати прихований вміст. Як правило, для цього використовуються BB-теги HIDE. Не будемо оригінальними і скористаємося традиційним назвою. Таким чином, публікація прихованої посилання буде мати наступний вигляд:

[HIDE]Прихована посилання[/HIDE]

Поки що, незалежно від того гість або авторизований користувач переглядає сторінку, ми побачимо одне і те ж:

Приховуємо контент від гостей

Насамперед, попрацюємо з гостем і доб’ємося того, щоб замість поточного результату він бачив повідомлення про прихованому контенті. Як Ви, напевно, вже здогадалися, нам потрібні можливості регулярних виразів. Отже, давайте складемо шаблон:

Даний шаблон шукає в тексті BB-теги HIDE і все, що в них міститься. При цьому шаблон буде регістронезавісімий (завдяки модификатору «i») і мультистрочным (завдяки модификатору «s», що забезпечує збіг метасимвола точки з переносом рядка). Варто також звернути увагу, що після квантификатора «*» ми поставили ще один квантіфікатор — «?» — тим самим роблячи перший квантіфікатор «ледачим». Це забезпечує коректну роботу шаблону з двома і більше блоками HIDE в тексті.

Отже, шаблон готовий і ми можемо приступити до написання нескладної функції:

function hide_content($content){
if(!$_SESSION[‘admin’]){
$pattern = ‘#\[hide].*?\[/hide]#is’;
$content = preg_replace($pattern, ‘

Авторизуйтеся для перегляду прихованого вмісту

‘, $content);
return $content;
}else{
return $content;
}
}

І кілька правил для класу hide:

.hide{
border: 1px solid #765858;
background: #ffeded;
color: #7f5354;
padding: 3px;
}

І викличемо функцію hide_content() для виведеного тексту. В нашому випадку це буде мати наступний вигляд:

$text = hide_content($item[‘text’]);
echo code_content($text);

У змінну $text потрапить пропущений через функцію hide_content() виводиться текст. Ну а рядком нижче він буде виведений.

Тепер замість BB-тегів HIDE і їх вмісту гість буде бачити те, що ми й хотіли:

Приховуємо контент від гостей

З гостями ми «розібралися», але авторизовані користувачі бачать приховане вміст у не зовсім найкращому вигляді — хотілося б прибрати BB-теги HIDE і як оформити даний блок. Трохи допишемо функцію hide_content():

function hide_content($content){
if(!$_SESSION[‘admin’]){
$pattern = ‘#\[hide].*?\[/hide]#is’;
$content = preg_replace($pattern, ‘

Авторизуйтеся для перегляду прихованого вмісту

‘, $content);
return $content;
}else{
$pattern = ‘#\[hide](.*?)\[/hide]#is’;
$content = preg_replace($pattern, ‘

$1

‘, $content);
return $content;
}
}

Тут ми трохи змінили шаблон. Оскільки нам потрібно показувати вміст тегів HIDE, ми скористалися запам’ятовуючими дужками — (.*?). Ну а в функції preg_replace(), відповідно, посилаємося на запомненное — $1.

І кілька правил для класу show:

.show{
border: 1px solid #adc092;
background: #f0faf1;
color: #58715e;
padding: 3px;
}
.show a{
color: #58715e;
}

Тепер можна оцінити результат і для авторизованого користувача:

Приховуємо контент від гостей

От і все. Завдання реалізована і, як бачите, вона реалізується досить просто. Удачі і до нових зустрічей!