Немного теории
Страницы и разделы
Контент на сайте бывает двух видов:
Статический
Это редко изменяемая информация, которая размещается прямо в тексте страницы (то есть физического php-файла, соответствующего этой странице)
Динамический
Это однотипная и часто изменяемая информация, которая размещается не в коде страницы напрямую, а берется из некоторого источника (например, из другого файла или из базы данных) и выводится на ней с помощью специальных инструментов платформы.
Публичная часть сайта состоит из страниц и разделов. Они тоже бывают статическими и динамическими. Статической странице соответствует конкретный php-файл в структуре сайта, а статическому разделу - конкретная папка. Для динамических страниц и разделов в файловой структуре сайта нет однозначно соответствующих им файлов или папок. Такие страницы и разделы генерируются “на лету” специальными инструментами платформы при обращении к ним.
Допустим, сайту требуется новая страница для какого-либо статического контента, например, для информации о компании. Это можно сделать двумя способами:
- Создать страницу /about.php, то есть файл в структуре сайта.
- Создать раздел /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) в системе можно создавать и свои собственные. Это делается в настройках модуля “Управление структурой”.
Часто значение этих свойств зависит от контента, отображаемого в теле страницы, но выводиться должно “выше”, например, в шапке сайта. Чтобы такое реализовать, в системе существуют так называемые отложенные функции.
Отложенные функции
Это технология, благодаря которой некоторую информацию или контент можно вывести раньше, чем то место в коде, где она фактически задается.
Принцип их работы простыми словами:
- В том месте, где требуется вывести контент, вызывается отложенная функция (обычно они начинаются со слова “Show”).
- В буфере с формируемым HTML страницы в месте вызова отложенной функции добавляется метка.
- Выполнение скрипта доходит до того места, где устанавливается нужное значение для этой метки с помощью соответствующего метода (обычно такие методы начинаются с “Set”).
- В служебной части эпилога метка из пункта 1 заменяется на значение, установленное в пункте 3.
- 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 мин
Полезные ссылки и материалы