Страницы и разделы сайта

Урок 4 из 10

Легко

Немного теории

Страницы и разделы

Контент на сайте бывает двух видов:

Статический

Это редко изменяемая информация, которая размещается прямо в тексте страницы (то есть физического php-файла, соответствующего этой странице)

Динамический

Это однотипная и часто изменяемая информация, которая размещается не в коде страницы напрямую, а берется из некоторого источника (например, из другого файла или из базы данных) и выводится на ней с помощью специальных инструментов платформы.

Публичная часть сайта состоит из страниц и разделов. Они тоже бывают статическими и динамическими. Статической странице соответствует конкретный php-файл в структуре сайта, а статическому разделу - конкретная папка. Для динамических страниц и разделов в файловой структуре сайта нет однозначно соответствующих им файлов или папок. Такие страницы и разделы генерируются “на лету” специальными инструментами платформы при обращении к ним.

Допустим, сайту требуется новая страница для какого-либо статического контента, например, для информации о компании. Это можно сделать двумя способами:

  1. Создать страницу /about.php, то есть файл в структуре сайта.
  2. Создать раздел /about/, а в нем разместить так называемую “индексную страницу” - файл с названием index.php.

Индексная страница раздела открывается по умолчанию при открытии его адреса, если не указать название конкретной страницы. То есть адреса mysite.ru/about/index.php и mysite.ru/about/ - эквивалентны для пользователя, но не для поисковых роботов.

Всегда лучше создавать именно раздел, а не страницу

Это улучшает читаемость адреса страницы и создает меньше “мусора” в адресе (.php) для поисковых роботов, а также упрощает расширение структуры сайта: если в будущем потребуется реализовать вложенность у раздела /about/, то в нем достаточно создать новые подразделы, не меняя основную страницу “О компании”.

Если бы это была страница, то пришлось бы ее переносить в новый раздел и настраивать редиректы на новый адрес, чтобы не потерять старые позиции в поисковой выдаче.

Меню

Чтобы пользователь мог быстро ориентироваться по страницам и разделам сайта, на нем размещается меню. В платформе для этого есть особый механизм. Меню может быть разных типов, по умолчанию в системе их 3: верхнее (top), левое (left), нижнее (bottom). При необходимости можно создать свой тип меню в настройках модуля “Управление структурой”.

Пункты меню вручную задаются контент-редактором в специальных файлах с названием по такому шаблону: .тип_меню.menu.php. Эти файлы размещаются в тех разделах, где необходим показ этого типа меню. При этом меню является иерархически наследуемым, то есть оно будет применяться ко всем подразделам, если в них не задан свой файл с таким типом меню.

У меню-файлов есть 2 режима редактирования: упрощенный и расширенный. В упрощенном (рекомендуем именно такой режим для контент-редакторов) пользователь может задать только порядок, название и ссылку для пункта меню. В расширенном — задавать дополнительные ссылки для подсветки этого пункта меню, ограничивать доступ по разным условиям (для папки, группы пользователя, для вычисляемого в PHP выражения) и задавать дополнительные параметры для пунктов меню, которые можно использовать в шаблоне компонента для вывода пунктов.

В шаблоне компонента меню (о компонентах подробнее будет рассказано в следующих уроках), помимо названных, будет доступен узел PERMISSION, определяющий доступ к пункту меню. Многие стандартные шаблоны меню учитывают этот узел и делают ссылку на меню некликабельной, если доступа к разделу у текущего пользователя нет.

Есть еще файлы .тип_меню.menu_ext.php. Они дают возможность с помощью кода добавлять в меню динамические пункты, например, разделы определенного инфоблока.

Свойства страниц и разделов

Для любой страницы или раздела можно задавать свойства. Они помогают управлять отображением контента на страницах и настраивать их метаданные для индексации поисковыми системами. Свойства раздела автоматически наследуются всеми подразделами и страницами данного раздела. Помимо стандартных свойств (title, keywords, description) в системе можно создавать и свои собственные. Это делается в настройках модуля “Управление структурой”.

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

Отложенные функции

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

Принцип их работы простыми словами:

  1. В том месте, где требуется вывести контент, вызывается отложенная функция (обычно они начинаются со слова “Show”).
  2. В буфере с формируемым HTML страницы в месте вызова отложенной функции добавляется метка.
  3. Выполнение скрипта доходит до того места, где устанавливается нужное значение для этой метки с помощью соответствующего метода (обычно такие методы начинаются с “Set”).
  4. В служебной части эпилога метка из пункта 1 заменяется на значение, установленное в пункте 3.
  5. HTML в итоговом виде выводится на экран.

На примере вывода свойств страницы/раздела:

  • CMain::ShowProperty - этим методом в коде задается место (метка), куда нужно будет вывести значение свойства страницы.
  • CMain::SetPageProperty - этим методом где-то в скрипте далее будет задано значение свойства.
  • CMain::GetProperty - та функция, выполнение которой “откладывается”. Именно эта функция вызывается в эпилоге, когда формируется итоговый HTML и она возвращает последнее значение, установленное методом CMain::SetPageProperty.

Важно понимать разницу между “echo Get…” и “Show…”

В первом случае на странице будет выведено текущее значение, а во втором – пометка, что после завершения работы страницы, сюда нужно поместить последнее значение.

В реальной разработке “echo Get…” почти никогда не используется.

Стандартные функции, обеспечивающие отложенный вывод внутри себя, так или иначе используют метод CMain::AddBufferContent. Этим же методом можно создавать и свои собственные отложенные функции, по аналогии со стандартными.

Если компонент предусматривает кеширование, то установка значения для отложенных функций с помощью того же CMain::SetPageProperty или ему подобных, не будет работать в кешируемой области компонента (то есть в result_modifier.php и template.php). Это объясняется тем, что при наличии валидного кеша, эти файлы попросту не исполняются и Set-метод не будет вызван.

Для применения технологии отложенных функций в кешируемой области компонента предусмотрены специальные методы:

  • Для установки значения: CBitrixComponentTemplate::SetViewTarget / EndViewTarget.
  • Для обозначения места, где контент должен быть выведен: CMain::ShowViewContent.

Права доступа

Просмотрами и редактированием тех или иных страниц, разделов можно управлять с помощью настройки прав доступа к ним.

Их можно назначать для:

  • отдельных пользователей;
  • групп пользователей;
  • некоторых специальных ролей в системе (как, например, “Все авторизованные пользователи”).

Права доступа на разделы иерархически наследуемы, то есть распространяются на всю их внутреннюю структуру, если для какой-либо внутренней страницы или раздела не задано собственное правило.

Права доступа на содержимое раздела хранятся в специальных файлах .access.php в этом разделе.

Служебные файлы и папки

Путь в докрут Что находится
/bitrix/ Ядро платформы “1C-Битрикс: Управление сайтом”.
/templates/ Папка для размещения собственного кода: шаблонов, компонентов, модулей.
/upload/ По-умолчанию является папкой для хранения загруженных файлов. В ней находятся, например, файлы, прикрепляемые к элементам инфоблоков, загружаемые в медиабиблиотеку, файлы экспорта из инфоблоков и т.п. Ее название и расположение можно изменить в настройке главного модуля “Папка по умолчанию для загрузки файлов”.

Практика

В этом видеоуроке мы научимся создавать статические страницы и разделы сайта, управлять их свойствами и правами доступа к ним, создавать свои типы меню, познакомимся с механизмом отложенных функций.

В примере:

  • Создадим раздел сайта “Партнерам” со своей собственной внутренней структурой страниц.
  • Добавим новые пункты в меню.
  • Разместим контент на странице сайта.
  • Установим значение свойства страницы "Заголовок окна браузера".
  • Реализуем вывод уникального текста в шаблоне для каждой страницы сайта с помощью метода ShowProperty.
  • Посмотрим, как хранятся настройки прав для публичных страниц сайта.
  • Настроим доступ к созданному разделу “Партнерам”, дадим возможность контент-редакторам изменять страницы.
  • Посмотрим как хранятся настройки прав для публичных страниц сайта.
  • Скроем некоторые пункты меню.
  • Настроим верхнее меню сайта, для этого создадим свой тип меню.

Страницы и разделы сайта

26 мин