Скрываем контент от гостей

Скрываем контент от гостей

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

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

Внимание!!! В связи со спецификой публикации (при публикации используются BB-теги, которые пересекаются с публикуемыми BB-тегами) рекомендуется просмотреть текстовую версию.

Детали учебника

Тема: PHP, регулярные выражения

Сложность: Средняя

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

Время: 00:30:06

Размер архива: 67 Mb

скачать исходникискачать урок

Итак, соединив исходники из обоих указанных уроков, я получил примерно такую картину:

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

Теперь о том, как бы мы хотели публиковать скрытое содержимое. Как правило, для этого используются BB-теги HIDE. Не будем оригинальными и воспользуемся традиционным названием. Таким образом, публикация скрытой ссылки будет иметь следующий вид:

Пока что, независимо от того гость или авторизованный пользователь просматривает страницу, мы увидим одно и то же:

Прежде всего, поработаем с гостем и добьемся того, чтобы вместо текущего результата он видел сообщение о скрытом контенте. Как Вы, наверное, уже догадались, нам потребуются возможности регулярных выражений. Итак, давайте составим шаблон:

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

Итак, шаблон готов и мы можем приступить к написанию несложной функции:

И несколько правил для класса hide:

И вызовем функцию hide_content() для выводимого текста. В нашем случае это будет иметь следующий вид:

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

Теперь вместо BB-тегов HIDE и их содержимого гость будет видеть то, что мы и хотели:

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

Здесь мы немного изменили шаблон. Поскольку нам нужно показывать содержимое тегов HIDE, мы воспользовались запоминающими скобками — (.*?). Ну а в функции preg_replace(), соответственно, ссылаемся на запомненное — $1.

И несколько правил для класса show:

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

Вот и все. Задача реализована и, как видите, реализуется она довольно просто. Удачи и до новых встреч!

Метки: ,

Похожие статьи:

Комментарии Вконтакте:

Комментарии (4)