KVS предоставляет движок с огромным спектром возможностей по созданию и настройке страниц сайта. Основные достоинства движка перечислены ниже:
Движок KVS использует 4 сущности для построения сайта:
Для того, чтобы наглядно представить себе все основные сущности сайта, рассмотрим скриншот выше. Все что отображается на скриншоте - это отдельная страница, которая доступна по отдельному адресу. В самом верху страницы находится шапка. Шапка - это компонент страниц, поскольку она не несет в себе никакой логики, только выводит верхнюю часть HTML кода страницы. В шапке вставлено рекламное место, в котором отображается один баннер. Если к этому рекламному месту привязать несколько баннеров, то они будут ротироваться. Ниже шапки отображается блок списка видео (list_videos), который выводит 9 последних просмотренных видео. Чем отличается блок от компонента страниц очевидно - блок обращается в базу данных для того, чтобы вывести некоторую информацию, а компонент страниц просто отображает HTML код. Справа от блока списка видео отображается компонент страниц с формой поиска видео и под ним блок облака тэгов (tags_cloud).
В качестве другого примера рассмотрим страницу Community, на которой мы хотим отобразить такую информацию:
Код шаблона страницы будет иметь приблизительно такой вид:
{{* Устанавливаем значение переменной page_title, которая используется в компоненте страниц header_general *}}
{{assign var=page_title value="Community"}}
{{* Подключаем компонент страниц header_general, который отображает шапку страницы *}}
{{include file="header_general.tpl"}}
<div id="data">
<div id="wide_col">
{{* Подключаем блок list_videos для отображения 3 премиум видео *}}
{{insert name="getBlock" block_id="list_videos" block_name="Recommended premium videos"}}
{{* Подключаем блок list_members для отображения 20 последних пользователей *}}
{{insert name="getBlock" block_id="list_members" block_name="Latest members"}}
{{* Подключаем блок list_albums для отображения 10 последних фотоальбомов *}}
{{insert name="getBlock" block_id="list_albums" block_name="Latest albums"}}
{{* Подключаем блок list_albums для отображения 10 популярных фотоальбомов *}}
{{insert name="getBlock" block_id="list_albums" block_name="Most popular albums"}}
</div>
<div id="side_col">
{{* Подключаем блок list_members для отображения 3 активных пользователей *}}
{{insert name="getBlock" block_id="list_members" block_name="Active members"}}
</div>
</div>
{{* Подключаем компонент страниц footer_general, который отображает нижнюю часть страницы *}}
{{include file="footer_general.tpl"}}
Кроме непосредственного подключения блоков в шаблоне страницы необходимо также настроить их параметры для данной страницы (например, блоку list_videos указать, что нужно выводить только 3 видео и обязательно премиум и т.д.) и при необходимости шаблоны блоков для данной страницы (логику отображения данных). Это будет детально рассмотрено в следующих разделах.
Компоненты страниц представляют собой используемые во многих местах элементы и компоненты верстки сайта. Поскольку страниц сайта может быть очень много и большинство из них будет иметь схожие элементы дизайна (например, шапка, блок поиска, и др.), то для простоты и удобства использования такие элементы дизайна рекомендуется выносить в компоненты страниц, которые затем использовать в нужных местах.
Компоненты страниц могут использоваться в любых местах, где ожидается шаблон Smarty (в шаблонах страниц, шаблонах блоков и даже в шаблонах самих компонентов). Для подключения компонента используется стандартная директива Smarty:
{{include file="%PAGE_COMPONENT_EXTERNAL_ID%.tpl"}}
В данном примере токен %PAGE_COMPONENT_EXTERNAL_ID% должен быть заменен на идентификатор требуемого компонента, например header_general:
{{include file="header_general.tpl"}}
Во время обработки страницы данная директива будет заменена движком Smarty на содержимое шаблона указанного компонента. Это позволяет использовать любые переменные в шаблоне компонента страниц, значения которых могут быть установлены в месте непосредственного использования компонента. Для примера, рассмотрим шапку сайта, которая содержит информацию о названии страницы. Шапка не может содержать конкретное название страницы, поскольку она используется на разных страницах сайта с разными названиями. Поэтому вместо конкреного названия следует использовать переменную (например, page_title), значение которой будет устанавливаться в шаблоне конкретной страницы непосредственно перед подключением компонента шапки на страницу. Код шаблона компонента шапки может выглядеть так:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<!-- Выводим значение переменной page_title в названии страницы -->
<title>{{$page_title}} - My Tube Site</title>
</head>
<body>
Для того, чтобы при отображении страницы переменная page_title заменилась на нужное значение, необходимо присвоить ей это значение перед подключением компонента. Это может быть сделано таким образом (страница со списком премиум видео):
{{* Устанавливаем значение переменной page_title *}}
{{assign var=page_title value="Premium Videos"}}
{{* Подключаем компонент страниц header_general, который отображает шапку страницы *}}
{{include file="header_general.tpl"}}
....
Файлы компонентов страниц хранятся в директории /template в корне проекта. Для создания компонентов Apache должен иметь права на создание файлов в данной директории. Для редактирования какого-либо компонента Apache должен иметь права на редактирование файла шаблона данного компонента.
Для создания компонента страниц вы можете воспользоваться любым из 3 способов:
Поля данных, которые поддерживаются компонентами:
Во время работы с содержимым страниц и блоков вы можете подключать даже несуществующие компоненты страниц (через директиву Smarty {{include ...}}). В этом случае необходимый компонент будет создан автоматически с пустым шаблоном. Все что вам нужно будет сделать - это просто задать для него шаблон позже.
Удаление компонентов страниц допускается только при отсутствии ссылок на них в других сущностях сайта (страницах, блоках или других компонентах).
Данная таблица содержит краткое описание и предназначение компонентов страниц, которые используются в дизайне по умолчанию. Часть из приведенных ниже компонентов недоступна в младших пакетах функциональности.
Многие компоненты поддерживают так называемые "внешние переменные". Что это значит? Если компонент имеет несколько вариаций, которые отличаются небольшими фрагментами (например, названия списков видео разные, но сами списки видео отображаются одинаково), то нет смысла делать по одному компоненту для каждого списка видео со своим названием. Достаточно сделать один компонент, но вместо названия списка вывести значение из переменной, которое будет устанавливаться перед подключением компонента. Например, компонент шапки поддерживает внешнюю переменную для HTML названия страницы:
<title>{{$page_title}} / Kernel Tube</title>
Перед подключением компонента шапки необходимо установить значение этой переменной, которое должно быть выведено внутри компонента:
{{assign var="page_title" value="Community"}}
{{include file="header_general.tpl"}}
Имя файла | Описание |
header_general.tpl |
Шапка сайта, поддерживает следующие внешние переменные: - page_title - название страницы. - page_description - описание страницы. Если переменная не задана, то выводится базовое описание (необходимо изменить его). - page_keywords - тэги страницы. Если переменная не задана, то выводятся базовые тэги (необходимо изменить их). - page_rss - RSS канал для текущей страницы. Если переменная не задана, то будет использоваться RSS канал по умолчанию. - page_canonical - канонический URL для данной страницы. Используется для SE-оптимизации, если одинаковые страницы отображаются под разными URL-ами. В этом случае они должны указывать одинаковый канонический URL. |
footer_general.tpl | Нижняя часть сайта. |
list_albums_block_common.tpl |
Отображение списка фотоальбомов на основных страницах сайта. Используется в шаблонах блока
list_albums. Поддерживает такие внешние переменные: - list_albums_title - название списка. - list_albums_show_all_link - ссылка на страницу просмотра всех фотоальбомов, если данный список отображает только часть из них без пагинации. - list_albums_show_rating - одно из значений [1,2,3,4], показывает текущую сортировку по рейтингу [сегодня, неделя, месяц, все время]. - list_albums_show_popularity - одно из значений [1,2,3,4], показывает текущую сортировку по популярности [сегодня, неделя, месяц, все время]. |
list_albums_block_internal.tpl | Отображение списка фотоальбомов на личных страницах сайта с возможностью опций удаления и редактирования. Используется в шаблонах блока list_albums. Поддерживает внешнюю переменную list_albums_title - название списка. |
list_members_block_common.tpl |
Отображение списка пользователей на основных страницах сайта. Используется в шаблонах блока
list_members. Поддерживает такие внешние переменные: - list_members_title - название списка. - list_members_show_all_link - ссылка на страницу просмотра всех пользователей, если данный список отображает только часть из них без пагинации. |
list_members_events_block_common.tpl |
Отображение списка событий пользователей на основных страницах сайта. Используется в шаблонах
блока list_members_events. Поддерживает такие внешние переменные: - list_members_events_title - название списка. - list_members_events_show_all_link - ссылка на страницу просмотра всех событий, если данный список отображает только часть из них без пагинации. |
list_members_blog_block_common.tpl |
Отображение списка сообщений блога пользователя на основных страницах сайта. Используется в
шаблонах блока list_members_blog. Поддерживает такие внешние переменные: - list_members_blog_title - название списка. - list_members_blog_show_all_link - ссылка на страницу просмотра всех сообщений блога, если данный список отображает только часть из них без пагинации. - list_members_blog_disable_edit - устанавливается в 1, если шаблон не должен предоставлять возможность редактирования. |
list_videos_block_common.tpl |
Отображение списка видео на основных страницах сайта. Используется в шаблонах блока
list_videos. Поддерживает такие внешние переменные: - list_videos_title - название списка. - list_videos_show_all_link - ссылка на страницу просмотра всех видео, если данный список отображает только часть из них без пагинации. - list_videos_show_rating - одно из значений [1,2,3,4], показывает текущую сортировку по рейтингу [сегодня, неделя, месяц, все время]. - list_videos_show_popularity - одно из значений [1,2,3,4], показывает текущую сортировку по популярности [сегодня, неделя, месяц, все время]. - list_videos_show_sorting - одно из значений [1,2,3,4], показывает текущую сортировку по разным показателям [дата появления, рейтинг, популярность, длительность]. - list_videos_show_sorting_link - используется совместно с list_videos_show_sorting для указания части сгенеренных ссылок сортировки. |
list_videos_block_internal.tpl | Отображение списка видео на личных страницах сайта с возможностью опций удаления и редактирования. Используется в шаблонах блока list_videos. Поддерживает внешнюю переменную list_videos_title - название списка. |
member_menu.tpl | Меню со ссылками на различные внутренние страницы сайта для зарегистрированных пользователей. |
pagination_block_common.tpl | Отображение пагинации для любого блока листинга. Используется в шаблонах блока pagination и шаблонах любых блоков списка. |
pagination_block_ajax.tpl | Отображение аяксовой пагинации для любого блока листинга. Используется в шаблонах блока pagination и шаблонах любых блоков списка. |
search_albums_block.tpl | Форма поиска по фотоальбомам. |
search_members_block.tpl | Форма поиска по пользователям. |
search_videos_block.tpl | Форма поиска по видео. |
side_advertising.tpl | Блок боковой рекламы для демонстрации. |
tags_cloud_block_albums.tpl | Отображение облака тэгов по фотоальбомам. Используется в шаблонах блока tags_cloud. |
tags_cloud_block_common.tpl | Отображение облака тэгов по видео. Используется в шаблонах блока tags_cloud. |
Блоки являются основными логическими модулями страниц. В отличие от компонентов страниц блоки предоставляют логику выборки / сохранения данных, а также большой спектр параметров конфигурации данной логики. Функциональность движка позволяет в любой момент времени изменить логику работы сайта путем изменения значений параметров блоков, а также добавления новых блоков на страницы и написания своих собственных блоков.
Список всех блоков и полную информацию о них с примерами использования можно посмотреть на странице Обзор блоков в разделе UI сайта панели администрирования. При открытии подробных данных о блоке можно получить информацию по его использованию, список и описание всех параметров блока, а также различные примеры конфигурации блока.
Блоки могут быть условно классифицированы по нескольким признакам. Например, по типу отображаемого контента блоки можно разделить на:
По уровню доступа блоки условно могут быть разделены на следующие группы:
Переменные с данными блока доступны только в самом шаблоне блока и недоступны извне. Если вам необходимо вывести какие-либо данные блока в шаблоне страницы, вам необходимо использовать глобальное хранилище, которое называется $storage. Почти все блоки использует глобальное хранилище данных на странице для сохранения туда некоторых результатов своей работы, чтобы они могли быть использованы на странице (снаружи блока). В шаблоне каждой страницы доступна глобальная переменная $storage, которая может использоваться для доступа к результатам блока (например, блок video_view помещает в глобальное хранилище некоторую информацию о видео, которое он отображает, например, название, описание, тэги и др.
Важно! Переменная $storage блока доступна только после места подключения блока в страницу.
Как узнать какие данные блока доступны для использования в шаблоне блока или на странице через его глобальное хранилище $storage? Для этого существует отладчик страниц, более подробную информацию вы найдете далее в руководстве.
Для подключения блока на странице необходимо использовать следующий синтаксис в коде шаблона страницы:
{{insert name="getBlock" block_id="%BLOCK_ID%" block_name="%UNIQUE_BLOCK_NAME%"}}
В данном примере токен %BLOCK_ID% должен быть заменен на идентификатор блока (block ID) требуемого блока, например, list_videos, а токен %UNIQUE_BLOCK_NAME% на любое уникальное имя блока для данной страницы:
{{insert name="getBlock" block_id="list_videos" block_name="Most Popular Videos"}}
Важно! При изменении названия блока произойдет удаление блока со старым названием и добавление блока с новым названием, а это значит что старые настройки блока на этой странице не сохранятся. Старайтесь сразу давать блокам актуальные названия.
Вы можете подключать любое количество блоков любых типов на одной странице, главное чтобы названия блоков были уникальны в контексте страницы:
{{* Первый блок list_videos *}}
{{insert name="getBlock" block_id="list_videos" block_name="Most Popular Videos"}}
{{* Еще один блок list_videos *}}
{{insert name="getBlock" block_id="list_videos" block_name="Top Rated Videos"}}
{{* Третий блок list_videos *}}
{{insert name="getBlock" block_id="list_videos" block_name="Premium Videos"}}
{{* Список трейдеров *}}
{{insert name="getBlock" block_id="top_referers" block_name="Traders Text Links"}}
...
При простом подключении блока на странице он будет вызываться и отображать результат непосредственно в том месте шаблона страницы, где вы его вставили. В некоторых случаях необходимо заставить блок выполниться в начале страницы, например, для того, чтобы показать данные из хранилища $storage блока в заголовке страницы (title, description, keywords). Этого можно добиться, используя дополнительный параметр assign директивы {{insert ...}}. При использовании этого параметра результат выполнения блока будет не отображаться в текущем месте шаблона страницы, а помещаться в переменную, указанную в значении параметра assign. Этот результат выполнения можно будет вывести в любом месте страницы, используя стандартный вывод Smarty:
{{* Вызов блока просмотра видео в самом начале страницы и присвоение результата в переменную video_view_result *}}
{{insert name="getBlock" block_id="video_view" block_name="View Video" assign="video_view_result"}}
{{* Дальше идет много всего, например использование $storage блока video_view *}}
...
{{* Теперь нужно вывести результат блока просмотра видео *}}
{{$video_view_result|smarty:nodefaults}}
...
Этого достаточно, чтобы показать название видео в заголовке страницы, т.к. после отработки блока можно использовать данные из его глобального хранилища storage:
{{* Вызов блока просмотра видео в самом начале страницы и присвоение результата в переменную video_view_result *}}
{{insert name="getBlock" block_id="video_view" block_name="View Video" assign="video_view_result"}}
{{* Присваиваем переменной page_title название видео доступное в глобальном хранилище *}}
{{assign var="page_title" value=$storage.video_view_video_view.title}}
{{* Подключаем компонент шапки, который отобразит значение из переменной page_title *}}
{{include file="header_general.tpl"}}
{{* Теперь нужно вывести результат блока просмотра видео *}}
{{$video_view_result|smarty:nodefaults}}
...
Как видно из примера, каждый блок использует глобальное хранилище данных под своим уникальным ключем (в примере это $storage.video_view_video_view). Нет никакого смысла понимать механизм формирования этих ключей, поскольку панель администрирования выводит эти ключи для каждого блока в таблице блоков данной страницы сайта. При необходимости использовать глобальное хранилище - ключ можно скопировать из таблицы. Вы также можете воспользоваться отладчиком страницы, чтобы увидеть какие данные доступны для использования в хранилище $storage блока (см. главу про отладку страниц сайта).
Для удаления блока со страницы достаточно удалить из кода шаблона страницы директиву, которая его вставляет. При этом файлы блока на самом деле удаляться не будут. Это сделано для того, чтобы можно было быстро восстановить блок на странице в случае его ошибочного удаления. Если вы вставите снова директиву подключения блока с такими же параметрами (имеются ввиду параметры директивы block_id и block_name) - блок будет восстановлен со всеми деталями его конфигурации. Если вы все же хотите финально удалить файлы блока (мы рекомендуем это делать, если вы проверили что блок удален корректно) - то откройте Список страниц и вы увидите, что в боковом меню появится новая опция Подчистить файлы, рядом с которой также показано количество файлов для очистки. Зайдите на эту опцию и удалите неиспользуемые файлы блоков.
Важно! После удаления файлов блоков (файл шаблона и файл конфигурации) на странице Подчистить файлы - восстановить детали удаленного блока будет невозможно. В случае необходимости восстановления вам придется заново создать и настроить блок на странице.
Параметры конфигурации блока определяют его поведение на странице. Почти все блоки поддерживают большое кол-во параметров конфигурации (кроме разве что самых простых блоков). Шаблон блока предназначен для отображения данных, подготовленных блоком, либо наоборот, подготавливает данные для бизнес логики блока (это скорее относится к блокам, которые отображают различные формы для заполнения). Важно понимать, что разные блоки на странице (даже блоки одного типа) могут иметь кaрдинально разные параметры и шаблоны. Таким образом, параметры блока и его шаблон определяют логику поведения и отображения конкретного блока на конкретной странице.
При подключении блока на странице он инициалируется параметрами по умолчанию и шаблоном, который содержит только текст с названием блока. Для изменения параметров блока и его шаблона следует зайти на страницу редактирования выбранного блока на выбранной странице. Сделать это можно либо с общего списка Cтраниц сайта, где для каждой страницы отображаются блоки со ссылками на их редактирование, либо с редактора отдельно взятой страницы, где отображается список подключенных на странице блоков.
Страница редактирования блока поддерживает следующие поля:
Среди разнообразных параметров стоит выделить так называемые var-параметры, которые используются во многих блоках, например, var_from - для пагинации, var_video_dir - для отображения видео и т.д. Данные параметры ссылаются на названия HTTP параметров, которые следует использовать блоку на данной странице для своей работы. Рассмотрим пример с блоком списка видео list_videos. Для того, чтобы отобразить список видео по какой-либо категории, блоку необходимо знать идентификатор этой категории. Категория может быть идентифицирована 2-мя способами: по числовому идентификатору и директории. Предположим, что мы хотим отобразить список видео по директории категории (как обычно и делается для создания красивых ссылок на сайте). Для этого блоку необходимо знать, в каком HTTP параметре передается директория категория для отображения, за что отвечает параметр блока var_category_dir, который указывает блоку в каком HTTP параметре искать значение директории категории. Это значит, что если для данного параметра установлено значение dir, то ссылка на страницу с текущим блоком должна содержать значение директории категории в HTTP параметре dir, т.е. /page_id.php?dir=category_directory_value. Аналогичное правило справедливо для всех var-параметров.
Почему бы не сделать фиксированными названия HTTP параметров, которые понимаются блоками? Здесь есть 2 аспекта, которые мы учли. Во-первых, само по себе включение параметра в настройках блока может влиять на работу блока, даже если значение для него не передается в HTTP запросе. Во-вторых, схема с указанием параметров, в которых блоку передаются данные, позволяет вывести несколько списков видео по разным категориям - например, можно сделать страницу, на которой отобразятся 3 списка видео по 3 наиболее популярным категориям у вас на сайте. Для этого вам придется передать на страницу директории (или ID) 3-х категорий, естественно в разных HTTP параметрах. Вероятно, вам вряд ли понадобится такая функциональность, но тем не менее движок KVS позволяет ее реализовать.
К счастью, в подавляющем большинстве случаев значение соответствующего var-параметра можно оставить как оно предлагается по умолчанию. Вам необходимо только учитывать, что для корректного поведения блока на странице ссылка на эту страницу должна содержать необходимые блоку значения var-параметров. Если на вашем сайте используется mod_rewrite для ссылок (что скорее всего), то правила mod_rewrite должны также учитывать необходимые блоку var-параметры.
var-параметры являются одним из ключевых звеньев движка сайта KVS, поскольку они обеспечивают блоки необходимой для работы информацией, а также используются для кэширования блоков и страниц. Названия и значения var-параметров по умолчанию настроены таким образом, чтобы подходящие друг к другу блоки могли работать совместно на одной странице. Так, например, блоки video_view, video_comments, list_videos и top_referers имеют параметры с одинаковым названием и значением var_video_dir и var_video_id. При подключении этих блоков на одной странице и включении во всех блоках одного из данных параметров блоки будут отображать информацию о видео, комментарии к видео, список похожих видео и список рефереров, подходящих к видео по категории соответственно.
В большинстве случаев одинаковые блоки на разных страницах имеют похожий внешний вид, за исключением конечного ряда элементов (например, название списка видео может быть разным на каждой странице - но в целом все списки видео выглядят одинаково). В таких случаях логику отображения блока (шаблон) стоит вынести в компонент страниц, а в самом шаблоне блока подключить этот компонент. Различающиеся элементы (как название) следует вывести через переменные Smarty, значение которым должно быть присвоено непосредственно перед подключением компонента на странице. Это сделано в дизайне по умолчанию, где существует несколько компонентов страниц для отображения наиболее часто используемых блоков (например, компоненты list_videos_block_common.tpl и list_videos_block_internal.tpl, которые используются блоком list_videos).
Почти половина существующих в KVS блоков является блоками списка. Блоки списка отличаются от других блоков тем, что они поддерживают возможность отображать только часть списка и навигацию по страницам списка (пагинацию), хотя могут быть также настроены на отображение полного списка объектов (сколько есть).
Все блоки списка поддерживают пагинацию внутри самого блока, а также поддерживают возможность пагинации через ajax без перезагрузки страницы (в шаблонах по умолчанию это не используется). Для включения пагинации в блоке списка должен быть включен параметр блока var_from, который указывает блоку в каком HTTP параметре приходит информация о текущей странице (по умолчанию var_from=from). Кроме этого параметра блока, вы можете также использовать другие параметры пагинации, которые поддерживаются каждым блоком списка:
После настройки параметров блока вам также необходимо добавить в шаблон блока отображение ссылок пагинации (по умолчанию шаблоны блоков не содержат этого). Для этого вы можете просто подключить в нужном месте шаблона блока компонент страниц pagination_block_common (который содержит логику отображения списка страниц):
...
{{* Подключаем пагинацию вверху списка *}}
{{include file="pagination_block_common.tpl"}}
{{* Дальше идет сам список *}}
{{foreach name=data item=item from=$data}}
...
{{/foreach}}
{{* Подключаем вторую пагинацию снизу списка - это пример того, что можно в блоке 2 раза подключить *}}
{{include file="pagination_block_common.tpl"}}
...
Все ссылки пагинации, которые отображаются внутри блока работают по схеме, удобной для поисковых ботов:
http://your_domain.com/popular_videos/
http://your_domain.com/popular_videos/1/
http://your_domain.com/popular_videos/2/
... и т.д.
Альтернативно вы можете настроить другую схему ссылок, полная информация об этом есть в FAQ.
Для того, чтобы эти ссылки работали корректно, необходимы корректные правила mod_rewrite, которые созданы для всех существующих списков. Если вы добавляете новые списки либо изменяете адреса страниц для существующих, вам необходимо следить за тем, чтобы правила mod_rewrite для пагинации были указаны верно.
Несмотря на то, что пагинация поддерживается всеми блоками списка, она может также отображаться отдельным блоком pagination. Во-первых, это необходимо для совместимости со старыми версиями KVS. Во-вторых, отдельный блок пагинации поддерживает некоторые расширенные возможности пагинации для особых случаев (информация об этом есть в документации блока pagination).
Важно! Вы не должны использовать одинаковые значения параметров var_from для блоков, которые находятся на одной странице. Поскольку разные списки могут иметь разное кол-во элементов, для каждого блока номер страницы должен передаваться в разных параметрах, иначе в каких-то блоках такого номера страницы может не существовать и страница будет показывать 404 ошибку. Повторимся, это актуально только для тех страниц, на которых добавлено несколько блоков списков.
В завершение разговора о пагинации рассмотрим пагинацию через ajax. Для этого вам нужно внести всего 2 изменения в концепцию пагинации описанную выше:
При подключении блока на странице сайта, вам необходимо задать его параметры и шаблон, которые будут использоваться блоком на данной странице. Зачастую при работе с сайтом возникает необходимость использовать одинаково настроенные блоки на многих страницах сайта. Например, вы можете показывать облако тэгов на разных страницах, либо топ 10 поисковых запросов по сайту за последние 7 дней. Чтобы избежать дублирования в настройках таких блоков и их шаблонах, KVS предоставляет возможность создавать глобальные блоки сайта и подключать их на разных страницах.
Глобальные блоки создаются вручную на списке Глобальных блоков в разделе UI сайта. Вы должны выбрать тип блока и указать его название. Затем вы можете зайти на страницу редактирования этого блока и настроить его шаблон и параметры один раз.
Для вставки глобального блока на любой странице сайта необходимо использовать специальный синтаксис глобального блока:
{{insert name="getGlobal" global_id="%UNIQUE_BLOCK_ID%"}}
Директива для подключения глобального блока отображается прямо на списке глобальных блоков, вам необходимо лишь скопировать ее и вставить в нужное место шаблона страницы. Если вы в какой-то момент захотите изменить шаблон или параметры глобального блока - внесенные изменения затронут все страницы, где используется данный блок.
Важно! Подключать глобальные блоки как и обычные блоки можно только в шаблонах страниц.
KVS предоставляет простой модуль управления рекламой, функциональности которого достаточно для большинства нужд.
Рекламные места являются контейнерами (или слотами) для рекламы на сайте. Они могут использоваться где угодно: в шаблонах страниц, компонентов и блоков. К каждому рекламному месту можно привязать любое кол-во рекламы, в таком случае реклама будет ротироваться в случайном порядке.
Для подключения рекламного места в шаблоне страницы, компонента или блока используется такая директива:
{{insert name="getAdv" place_id="%ADVERTISING_LOCATION_EXTERNAL_ID%"}}
В данном примере токен %ADVERTISING_LOCATION_EXTERNAL_ID% должен быть заменен на идентификатор требуемого рекламного места, например top_banner:
{{insert name="getAdv" place_id="top_banner"}}
Поля данных, которые поддерживаются рекламными местами:
Поля данных, которые поддерживаются рекламой:
Страницы являются точками входа в движок KVS и элементами построения сайта самого верхнего уровня. Страницы могут состоять из всех элементов, описанных выше: компонентов, блоков и рекламных мест.
Каждая страница имеет свой уникальный идентификатор, на основе которого создается PHP файл страницы и ее шаблон отображения. PHP файл страницы используется для указания ссылок на нее.
Вы можете создать страницу в любой момент, при этом она не будет использоваться до тех пор, пока вы не установите ссылку на нее в каком-либо месте сайта. Точно так же вы можете удалить страницу в любой момент, и, если на нее остались ссылки с других страниц, - ссылки перестанут работать.
Ссылки на страницу должны содержать все необходимые параметры для ее работы (этими параметрами на самом деле являются включенные var-параметры всех блоков данной страницы, как было описано выше. В большинстве случаев в шаблонах по умолчанию используются абстрактные ссылки, которые перекрываются через mod_rewrite, всвязи с чем многие необходимые странице параметры подставляются на основе частей URL-ов, например для ссылки на страницу просмотра видео /videos/123/my-uploaded-video/ применяется такое правило перенаправления:
RewriteRule ^videos/([0-9]+)/([^/]+)/$ /view_video.php?id=$1&dir=$2 [L,QSA]
Это правило говорит о том, что ссылка /videos/123/my-uploaded-video/ будет перенаправлена на страницу с идентификатором view_video (PHP файл страницы view_video.php), при этом в качестве параметра id будет использоваться число после videos/, а в качестве параметра dir будет использоваться последняя часть URL-а, т.е. в нашем примере будет осуществлен такой вызов:
/view_video.php?id=123&dir=my-uploaded-video
Далее этот вызов подхватится движком, который вызовет все блоки на данной странице с параметрами id=123 и dir=my-uploaded-video. Блоки выведут всю необходимую информацию, базируясь на значениях данных параметров. В приведенном примере блок video_view, который находится на данной странице, отобразит информацию о видео с айди 123, если директория этого видео совпадает с директорией, переданной в параметре dir. Если же директория не совпадает, то блок сделает 301 редирект на это же видео, но с корректной директорией.
Аналогичным образом происходит обработка всех страниц сайта, которые созданы через панель администрирования.
Дополнительно к правилам mod_rewrite есть также глобальные настройки, в которых требуется указать паттерны для ссылок на страницы просмотра различных объектов (видео, фотоальбомов, моделей и т.д.). Эти паттерны используются для создания ссылок на просмотр видео и других объектов на сайте и из панели администрирования. Эти настройки находятся на странице Настройки сайта в разделе Настройки панели администрирования. Заданные в настройках паттерны должны иметь соответствующие правила mod_rewrite, чтобы ссылки на генерировали 404 ошибок.
Файлы страниц хранятся в корне домена на сервере (PHP файл) и в директории /template (файл шаблона).
Если Apache не имеет привилегий на создание файлов в корне сайта, перед созданием страницы вам необходимо вручную скопировать ее шаблон PHP файла из /admin/tools/page_template.php в корневую директорию проекта и переименовать его в PHP файл страницы. Переименованный файл должен иметь имя %external_id%.php, где в качестве токена %external_id% нужно использовать тот идентификатор, который вы будете использовать при создании страницы (например, если вы хотите создать страницу с идентификатором my_new_page, то перед ее созданием вы должны скопировать шаблон PHP файла в файл /my_new_page.php в корневой директории проекта). Если вы не скопировали PHP файл страницы в нужное место и KVS не может сделать это самостоятельно - вы увидите ошибку при попытке создания страницы.
Аналогичным образом перед удалением страницы вы должны удалить ее PHP файл из корневой директории проекта, только тогда вы сможете удалить саму страницу целиком.
Список страниц является основным в разделе UI сайта панели администрирования. Список отображает иерархическую структуру страниц с блоками на них (строки, относящиеся к страницам выделены жирным), а также позволяет изменять базовые настройки кэширования страниц и блоков. Список содержит следующие столбцы:
Создать новую страницу можно 2 способами:
При добавлении / редактировании страницы поддерживают следующие поля:
Более подробная информация о кэшировании будет представлена ниже.
Все существующие в дизайне по умолчанию страницы можно разбить на три логические группы:
При создании новых страниц мы рекомендуем учитывать данные конвенции наименования.
Кэширование позволяет заметно снизить нагрузку на сервер при увеличении трафика на сайте. Движок Kernel Video Sharing поддерживает 2 уровня кэширования: стандартное кэширование на уровне шаблонов блоков и сверхбыстрое кэширование целых страниц в оперативной памяти.
Основным управляющим параметром кэширования является поле Время жизни кэша, которое используется как для блоков, так и для страниц. Чем больше время жизни кэша, тем меньше нагрузка на сервер, но в то же время меньше и актуальность информации. Страницы / блоки, которые обновляются не часто, могут быть закэшированы на более длительное время (например, список категорий). Страницы / блоки, которые должны обновляться регулярно - на меньшее время (например, индексная страница). Если вы хотите выключить кэширование для страницы или блока, просто установите время жизни кэша в 0.
Кэширование первого уровня (кэширование блоков) является относительно медленным кэшированием. Этот вид кэширования можно использовать практически везде, где он поддерживается блоками. Как уже было замечено выше, некоторые блоки не поддерживают кэширование (в основном это блоки, которые содержат формы для заполнения, т.е. блок логина, блок загрузки видео и д.р.). Некоторые блоки не поддерживают кэширование при определенной конфигурации параметров, например, блок списка видео не включает кэширование при отображении результатов поиска, а также в некоторых других случаях. В любом случае, даже при включенном кэшировании движок самостоятельно решит, что следует кэшировать, а что нет.
Для включения кэширования первого уровня вы можете установить время жизни кэша для каждого блока индивидуально. Вы можете сделать это в панели администрирования практически везде, где есть возможность редактирования блока. Лучше всего это сделать на Списке страниц, где можно настроить кэширование для всего сайта глобально.
Кэширование второго уровня (кэширование страниц целиком) является исключительно быстрым видом кэширования. Закэшированные страницы помещаются в оперативную память и сбрасываются пользователю при запросе. Кэширование страниц зависит во многом от блоков, которые используются на данной странице. Если хотя бы один из блоков не поддерживает кэширование, то страница целиком также не сможет быть закэширована. В то же время любые другие блоки на этой странице, которые поддерживают кэширование, могут быть закэшированы, используя кэширование первого уровня.
Кэширование второго уровня дополнительно поддерживает опцию сжатия кэша, которая помогает сэкономить оперативную память, но в то же время уменьшает скорость работы кэша. Данную опцию следует использовать на страницах, количество экземпляров которых в кэше относительно большое (например, для страницы просмотра видео, поскольку в кэше хранится большое количество экземпляров страницы для всех видео).
Для включения кэширования второго уровня вы можете установить время жизни кэша для каждой страницы индивидуально. Вы можете сделать это в панели администрирования на Списке страниц, где можно настроить кэширование для всего сайта глобально.
Существует несколько важных аспектов кэширования, которые обязательно необходимо прочитать и понять, прежде чем работать с настройкой сайта.
Кэширование не включается для администратора (если он залогинен в панели администрирования). Это сделано для того, чтобы при работе с сайтом не возникало каких-либо задержек при начальной отладке. Финальное же тестирование сайта должно быть выполнено с учетом кэширования. Этого можно добиться, если тестировать сайт в другом браузере (не в том, в котором идет работа с панелью администрирования).
Кэширование не используется, если на страницу передан параметр mode со значение async. Данный параметр используется для асинхронных запросов в различных блоках сайта (например, отправка пользовательского рейтинга на видео, либо отображение captcha).
Кэширование ограничивает возможности кастомизации сайта (особенно кэширование второго уровня). Так, нельзя, чтобы отображение какого-либо контента зависело от параметров, которые передаются на страницу. Рассмотрим простейший пример: необходимо передать идентификатор вебмастера, который затем будет подставлен в ссылку на спонсора (учет партнерского трафика). Если данный идентификатор передается в параметре wm_id, то простой вариант, который может прийти в голову - это вывести ссылку на спонсора и в ней указать значение из параметра запроса:
<a href="http://sponsor.com?wm_id={{$smarty.request.wm_id}}">
Это не будет работать при включенном кэшировании, поскольку в течение времени жизни кэша данная ссылка будет содержать одно и то же значение параметра wm_id. Для корректной работы подобных параметров следует использовать поля Динамические HTTP параметры в Настройках сайта в разделе Настройки панели администрирования. В этих полях вы можете перечислить до 5 HTTP параметров, которые будут учитываться независимо от кэширования. Кроме того, эти HTTP параметры будут также учитываться в ссылках на контент провайдеров и на рекламу.
Для использования этих параметров вам нужно вставить в шаблоне (URL-е контент провайдера, URL-е рекламы) токен вида %param_name%, т.е. для примера выше ссылка на спонсора должна выглядеть таким образом:
<a href="http://sponsor.com?wm_id=%wm_id%">
Это подразумевает, что вы указали параметр wm_id в одном из полей Динамические HTTP параметры.
В случаях, когда блок не поддерживает кэширование, использование параметров запроса все-таки корректно. В качестве примера можно рассмотреть блок редактирования профиля пользователя, который отображает 3 различные формы в зависимости от значения HTTP параметра action, переданного на страницу. Поскольку данный блок не поддерживает кэширование и, соответственно, страница на которой он включается также не поддерживает кэширование - использование параметров запроса в данным контексте представляется возможным.
Таким образом, в большинстве случаев вы не можете безболезненно использовать переменные типа $smarty.request, $smarty.get, $smarty.post в шаблонах сайта. Вместо них следует использовать динамические HTTP параметры.
Кэширование второго уровня автоматически отключается для залогиненных пользователей. Это позволяет не только показывать "Привет, username" в шапке сайта, но и вообще использовать любые данные из сессии пользователя в шаблоне самой страницы (но не в шаблонах блоков!)
В большинстве случаев вы не можете использовать значения из сессии пользователя ($smarty.session) в шаблонах блоков, чтобы показывать различный контент различным пользователям сайта, поскольку для всех пользователей используется один и тот же экземпляр кэша блока. Исключение на данный момент составляют блоки video_view, video_comments, album_view, album_comments, album_images, dvd_view и dvd_comments. Эти блоки сохраняют разные версии кэша для разных пользователей. Также использовать данные из сессии пользователя можно во всех блоках, которые не кэшируются.
Для проверки корректности настройки кэширования запустите проверку страниц, блоков и шаблонов сайта в плагине аудита. Если проверка не выдает ошибок - скорее всего проблем никаких не будет. Любые ошибки должны быть исправлены, т.к. скорее всего они влияют на работоспособность сайта.
При необходимости сбросить кэш первого или второго уровня вы можете воспользоваться опциями Сбросить файловый кэш и Сбросить MemCache соответственно. Эти опции находятся в боковой панели раздела UI сайта панели администрирования. Сброс кэша приведет к большому скачку нагрузки при большом трафике, поэтому эту операцию стоит выполнять только в исключительных случаях (например, при срочной необходимости обновить все страницы сайта). Сначала следует сбросить файловый кэш (кэш блоков), а через некоторое время MemCache (кэш страниц).
Кэширование является одним из самых сложных аспектов движка KVS. Вы можете не использовать его вообще, можете использовать только кэширование блоков первого уровня - в этом случае все ограничения, описанные выше, накладываются только на шаблоны блоков. В случае необходимости кастомизации сайта, которая может иметь проблемы с кэшированием, мы рекомендуем вам обращаться к нам за дополнительной информацией.
Статистика производительности позволяет оценить нагрузку на любую страницу или блок и понять, насколько корректно выбрана стратегия кэширования.
Для каждой страницы / блока на списке страниц выводятся 4 цифры:
Статистика производительности может быть сброшена в любой момент используя опцию Сбросить статистику производительности в боковой панели раздела UI сайта панели администрирования.
KVS использует несколько JavaScript файлов для работы сайта. Эти скрипты находятся в директории /js в корне домена. Некоторые блоки используют функции данных JavaScript файлов, поэтому требуют их включения на странице. JavaScript файлы, которые требуются блоками на какой-либо странице будут подключены автоматически. За вывод отвечает такая строка в шаблоне header_general.tpl:
{{$js_includes|smarty:nodefaults}}
Все JavaScript файлы подключаются ссылками, в которых указана текущая версия софта и которые используют расширение jsx, вместо js. Это нужно для того, чтобы при обновлении на новую версию софта у всех пользователей не осталось закэшированных браузеров JavaScript файлов (т.к. поменяются все ссылки на них). Вот пример одной из ссылок:
http://your_domain.com/js/KernelTeamVideoSharingSystem_2.0.0.jsx
Среди всех JavaScript файлов есть системные, которые добавляются независимо от блоков: KernelTeamVideoSharingSystem.js (добавляется всегда) и KernelTeamVideoSharingMembers.js (добавляется только для залогиненных пользователей).
По умолчанию все списки видео настроены на ротацию скриншотов видео формата 240x180. JavaScript с кодом ротатора подключается в шапке и доступен на каждой странице. Если вы используете только 1 скриншот для видео, либо вам не нужна ротация скриншотов, мы рекомендуем удалить включение скрипта ротатора в шаблоне шапки. Подключение ротатора задается таким образом:
<script type="text/javascript" src="{{$config.project_url}}/js/KernelTeamImageRotator_{{$config.project_version}}.jsx"></script>
<script type="text/javascript">
KT_rotationEngineStartup(0.2, 0.5);
</script>
Второй параметр при вызове функции KT_rotationEngineStartup устанавливает длительность показа одного скриншота в секундах до переключения на следующий. Первый параметр игнорируется.
Сама ротация скриншотов запускается при наведении (останавливается при выходе) мышки на изображение скриншота:
// второй параметр - путь к директории, где лежат скриншоты
// третий параметр - кол-во скриншотов
onmouseover="KT_rotationStart(this, '{{$config.content_url_videos_screenshots}}/{{$item.screen_url}}/240x180/', {{$item.screen_amount}})"
onmouseout="KT_rotationStop(this)"
Если вам необходима ротация скриншотов других форматов, в обработчие события наведения мышки нужно заменить размер 240x180 на другой нужный.
Следующая таблица перечисляет все JavaScript файлы, которые поставляются по умолчанию (все они находятся в директории /js в корне домена). Часть из них доступна только в полной версии KVS.
Имя файла | Описание |
KernelTeamImageRotator.js | Ротатор скриншотов. Подключается в шаблоне шапки сайта и может использоваться на всех страницах. |
KernelTeamVideoSharingAlbumEdit.js | Скрипт для проверки и поддержки формы создания / редактирования фотоальбомов. |
KernelTeamVideoSharingAlbumView.js | Скрипт для проверки и поддержки различных форм, которые используются в блоках фотоальбомов: рейтинг фотоальбомов, добавление в избранное, отправка комментария и др. |
KernelTeamVideoSharingCSView.js | Скрипт для проверки и поддержки различных форм, которые используются в блоках контент провайдеров: рейтинг контент провайдеров, отправка комментария и др. |
KernelTeamVideoSharingDVDView.js | Скрипт для проверки и поддержки различных форм, которые используются в блоках DVD / каналов: рейтинг DVD / каналов, отправка комментария и др. |
KernelTeamVideoSharingForms.js | Скрипт для проверки и поддержки различных форм, которые используются во внешних блоках сайта: формы логина, регистрации, приглашения друзей и др. |
KernelTeamVideoSharingMembers.js | Скрипт для проверки и поддержки различных форм, которые связаны с пользовательской активностью на сайте: редактирование профиля, управление закладками, внутренняя почта, управление подписками и др. |
KernelTeamVideoSharingModelView.js | Скрипт для проверки и поддержки различных форм, которые используются в блоках моделей: рейтинг моделей, отправка комментария и др. |
KernelTeamVideoSharingSystem.js | Системный скрипт, который подключается на всех страницах. |
KernelTeamVideoSharingVideoEdit.js | Скрипт для проверки и поддержки формы загрузки / редактирования видео. |
KernelTeamVideoSharingVideoView.js | Скрипт для проверки и поддержки различных форм, которые используются в блоках видео: рейтинг видео, добавление в избранное, отправка комментария и др. |
Некоторые блоки сайта имеют функционал для отправки email сообщений различного содержания (например, отправка ссылки на сайт другу и др.). Текстовки и заголовки этих сообщений находятся в директории emails для каждого блока, который поддерживает отправку email сообщений. При необходимости эти файлы могут быть изменены вручную:
Важно! Все файлы писем сохранены в кодировке UTF8.
Название блока | Путь к email файлам | Описание |
album_view | /blocks/album_view/emails |
Блок поддерживает отправку другу ссылки на страницу с текущим фотоальбомом по email.
Поддерживаются следующие токены: - {{$message}} - сообщение, которое пользователь ввел при отправке ссылки. - {{$link}} - ссылка на текущую страницу с фотоальбомом. - {{$project_name}} - название сайта, которое указывается при установке в файле setup.php. - {{$support_email}} - email адрес, который указывается при установке в файле setup.php и который будет указываться в поле From. - {{$project_licence_domain}} - домен сайта, который указывается при установке в файле setup.php. |
invite_friend | /blocks/invite_friend/emails |
Блок поддерживает отправку другу ссылки на данный сайт. Поддерживаются следующие токены: - {{$message}} - сообщение, которое пользователь ввел при отправке ссылки. - {{$project_name}} - название сайта, которое указывается при установке в файле setup.php. - {{$support_email}} - email адрес, который указывается при установке в файле setup.php и который будет указываться в поле From. - {{$project_licence_domain}} - домен сайта, который указывается при установке в файле setup.php. |
logon | /blocks/logon/emails |
Блок поддерживает отправку сообщений в случае временной блокировки пользователей.
Поддерживаются следующие токены: - {{$link}} - ссылка для разблокировки. - {{$email}} - email адрес пользователя. - {{$username}} - имя пользователя (логин). - {{$pass}} - старый пароль пользователя, который был заблокирован. - {{$new_pass}} - новый сгенерированный пароль пользователя. - {{$project_name}} - название сайта, которое указывается при установке в файле setup.php. - {{$support_email}} - email адрес, который указывается при установке в файле setup.php и который будет указываться в поле From. - {{$project_licence_domain}} - домен сайта, который указывается при установке в файле setup.php. |
member_profile_edit | /blocks/member_profile_edit/emails |
Блок поддерживает отправку пользователю email сообщения для подтверждения смены email адреса.
Поддерживаются следующие токены: - {{$link}} - ссылка для подтверждения смены email адреса. - {{$email}} - новый email адрес пользователя. - {{$username}} - имя данного пользователя (логин). - {{$project_name}} - название сайта, которое указывается при установке в файле setup.php. - {{$support_email}} - email адрес, который указывается при установке в файле setup.php и который будет указываться в поле From. - {{$project_licence_domain}} - домен сайта, который указывается при установке в файле setup.php. |
signup | /blocks/signup/emails |
Блок поддерживает отправку пользователю email сообщения для подтверждения регистрации, а также
после восстановления пароля. Поддерживаются следующие токены: - {{$link}} - ссылка для подтверждения регистрации / сброса пароля. - {{$email}} - email адрес пользователя. - {{$username}} - имя данного пользователя (логин). - {{$pass}} - пароль пользователя при регистрации или новый (сгенерированный) пароль для пользователя в случае сброса пароля. - {{$project_name}} - название сайта, которое указывается при установке в файле setup.php. - {{$support_email}} - email адрес, который указывается при установке в файле setup.php и который будет указываться в поле From. - {{$project_licence_domain}} - домен сайта, который указывается при установке в файле setup.php. |
video_view | /blocks/video_view/emails |
Блок поддерживает отправку другу ссылки на страницу с текущим видео по email. Поддерживаются
следующие токены: - {{$message}} - сообщение, которое пользователь ввел при отправке ссылки. - {{$link}} - ссылка на текущую страницу с видео. - {{$project_name}} - название сайта, которое указывается при установке в файле setup.php. - {{$support_email}} - email адрес, который указывается при установке в файле setup.php и который будет указываться в поле From. - {{$project_licence_domain}} - домен сайта, который указывается при установке в файле setup.php. |
Ниже приведен список полей сессии залогиненного пользователя, которые доступны в шаблонах сайта. Посмотреть актуальные значения всех данных сессии можно в отладчике страниц. Данные из сессии будут видны только если вы залогинены в зону сайта.
Важно! Переменные из сессии пользователя можно использовать только в шаблонах самих страниц, а также в шаблонах некоторых блоков (video_view, video_comments, album_view, album_comments, album_images, dvd_view и dvd_comments).
Имя переменной | Описание |
$smarty.session.user_id |
Идентификатор пользователя. Если установлен - то пользователь залогинен. Если не установлен, то
все параметры сессии будут пустыми. Пример использования: {{if $smarty.session.user_id>0}} пользователь залогинен {{/if}} |
$smarty.session.display_name | Ник пользователя. |
$smarty.session.username | Логин пользователя. |
$smarty.session.last_login_date | Дата последнего входа пользователя в свою личную зону. |
$smarty.session.added_date | Дата регистрации пользователя. |
$smarty.session.avatar |
Аватар пользователя. Это путь относительно директории $config.content_url_avatars: {{$config.content_url_avatars}}/{{$smarty.session.avatar}} |
$smarty.session.content_source_group_id | Идентификатор группы контент провайдеров, если назначена пользователю. |
$smarty.session.is_trusted | Если пользователь доверенный (в настройках пользователя можно установить флаг), то данная переменная содержит значение 1. |
$smarty.session.unread_messages | Количество непрочитанных сообщений внутренней почты. По умолчанию эта переменная не обновляется во время нахождения пользователя на сайте, поскольку ее вычисление приводит к нагрузке на базу данных. Чтобы включить ее обновление в реальном времени, вам необходимо включить опцию Синхронизировать новые сообщения пользователей в настройках сайта. |
$smarty.session.unread_invites | Количество непрочитанных приглашений подружиться. По умолчанию эта переменная не обновляется во время нахождения пользователя на сайте (см. описание переменной $smarty.session.unread_messages). |
$smarty.session.unread_non_invites | Количество непрочитанных сообщений, кроме приглашений подружиться (вычисляется как разница между значениями $smarty.session.unread_messages и $smarty.session.unread_invites). По умолчанию эта переменная не обновляется во время нахождения пользователя на сайте (см. описание переменной $smarty.session.unread_messages). |
$smarty.session.status_id | Статус пользователя (2 - активный, 3 - премиум, 6 - вебмастер). Если вы используете платный доступ, то вам необходимо включить опцию синхронизации статуса пользователей, которая находится в настройках сайта. Эта опция необходима, чтобы у пользователя пропал доступ (по сути - поменялся статус в сессии), когда время доступа истекло. |
$smarty.session.tokens_available | Количество токенов, доступных пользователю. Если вы используете доступ по токенам, то вам необходимо включить опцию синхронизации статуса пользователей, которая находится в настройках сайта. |
$smarty.session.paid_access_hours_left | Эта переменная может использоваться только при включенной опции синхронизации статуса пользователей в настройках сайта. Она выставляется только для премиум пользователей и показывает сколько полных часов осталось до окончания действия их привилегированного статуса. |
$smarty.session.paid_access_is_unlimited | Эта переменная может использоваться только при включенной опции синхронизации статуса пользователей в настройках сайта. Она выставляется только для премиум пользователей и показывает, является ли действие их привилегированного статуса временным (=0), или безлимитным (=1). |
$smarty.session.external_package_id | Эта переменная может использоваться только при включенной опции синхронизации статуса пользователей в настройках сайта. Она выставляется только для премиум пользователей и содержит внешний идентификатор выбранного пакета доступа. Вы можете использовать ее в шаблонах, если хотите отобразить разную информацию для пользователей, купивших разные пакеты. |
$smarty.session.playlists | Массив с плэйлистами пользователя. Структуру элементов массива вы можете посмотреть в отладчике страниц. |
$smarty.session.user_info | Полные данные профиля пользователя. Структуру данных вы можете посмотреть в отладчике страниц. |
При необходимости подключить кастомный функционал к движку обработки сайта вы можете редактировать несколько PHP файлов, которые вызываются в цикле обработки каждой страницы. Данные скрипты не подлежат обновлениям, соответственно ваши изменения не затрутся.
Путь к файлу | Описание | Типы запросов | XML страницы |
/admin/include/pre_initialize_page_code.php | Вызывается непосредственно перед началом обработки страницы. Может использоваться для замены HTTP параметров запроса, что также может влиять на кэширование. | POST и GET | Да |
/admin/include/pre_process_page_code.php | Вызывается в начале обработки страницы. Вызов не зависит от того, кэшируется ли страница или нет. Заменять HTTP параметры в этом скрипте нельзя. Данный скрипт вызывается в том числе и для POST запросов, поэтому в нем нельзя подключать логику, которая выводит содержимое в поток вывода. | POST и GET | Нет |
/admin/include/pre_display_page_code.php | Вызывается перед отображением содержимого страницы. Вызов не зависит от того, кэшируется ли страница или нет. Данный скрипт вызывается только для GET запросов. Здесь можно подключать сторонние скрипты, которые выводят содержимое в поток страницы (например, входящий трейд скрипт). | GET | Нет |
/admin/include/post_process_page_code.php | Вызывается непосредственно после того как страница обработана и ее контент отправлен клиенту. Вызов не зависит от того, кэшируется ли страница или нет. Данный скрипт вызывается в том числе и для POST запросов. | POST и GET | Нет |
KVS предоставляет модульный движок сайта, в который вы можете добавлять свои блоки. Каждый блок имеет свой уникальный идентификатор (скорее это идентификатор типа блока) и все файлы этого блока должны находиться в директории /blocks/%block_id%, где %block_id% - это и есть идентификатор блока.
Блок должен содержать 3 главных файла, а также файлы локализации:
Основным файлом блока является, конечно же, PHP файл. Этот файл должен содержать набор функций со специальными названиями, которые вызываются движком сайта по мере необходимости. Кроме функций PHP файл блока также должен содержать такую строчку кода для отклика на механизм тестирования блоков:
if ($_SERVER['argv'][1]=='test' && $_SERVER['DOCUMENT_ROOT']=='') {echo "OK";}
Каждая функция блока должна иметь название, которое начинается с идентификатора блока, т.е. %block_id%FunctionName. Например Show функция для блока list_videos должна иметь название list_videosShow.
Набор поддерживаемых функций таков:
Файл локализации блока должен предоставлять базовые описания, а также описание всех параметров конфигурации и названия значений для параметров типа CHOICE и SORTING, которые задаются MetaData-функцией. Вот пример типового файла локализации:
$lang['%block_id%']['block_short_desc'] = "Краткое описание блока";
$lang['%block_id%']['block_desc'] = "Полное описание блока";
$lang['%block_id%']['params']['integer_parameter'] = "Описание параметра integer_parameter";
$lang['%block_id%']['params']['string_parameter'] = "Описание параметра string_parameter";
$lang['%block_id%']['params']['checkbox_parameter'] = "Описание параметра checkbox_parameter";
$lang['%block_id%']['params']['integer_list_parameter'] = "Описание параметра integer_list_parameter";
$lang['%block_id%']['params']['combobox_parameter'] = "Описание параметра combobox_parameter";
$lang['%block_id%']['params']['sorting_parameter'] = "Описание параметра sorting_parameter";
$lang['%block_id%']['values']['combobox_parameter']['1'] = "Название опции 1 параметра combobox_parameter";
$lang['%block_id%']['values']['combobox_parameter']['2'] = "Название опции 2 параметра combobox_parameter";
$lang['%block_id%']['values']['combobox_parameter']['3'] = "Название опции 3 параметра combobox_parameter";
$lang['%block_id%']['values']['sorting_parameter']['field1'] = "Название опции field1 параметра sorting_parameter";
$lang['%block_id%']['values']['sorting_parameter']['field2'] = "Название опции field2 параметра sorting_parameter";
$lang['%block_id%']['values']['sorting_parameter']['rand()'] = "Название опции rand() параметра sorting_parameter";
Для того, чтобы заметно упростить разработку и кастомизацию сайта, KVS предоставляет "отладчик" страниц, который может помочь вам быстро и без детального разбора документации внести как небольшие коррективы в уже заданные шаблоны, так и полностью создавать новые страницы под ваши нужды. Отладчик может быть запущен для любой страницы сайта и что самое главное - отладчик показывает детали и данные именно той страницы, которую вы видите на экране в настоящий момент.
Важно! Доступ к отладчику страниц доступен только если вы залогинены в панель администрирования.
Для того, чтобы открыть отладчик страницы сайта, на которой вы в данный момент находитесь, вам необходимо к адресу страницы добавить HTTP параметр debug=true, после чего KVS выведет всю отладочную информацию по текущей странице:
http://domain.com/videos/123/video/?debug=true
Отладчик отображает следующие отладочные данные по странице:
По каждому блоку, который присутствует на странице, отладчик отображает следующие данные:
Пример использования любой переменной:
// вывод ID видео из storage блока video_view в шаблоне страницы сайта
{{$storage.video_view_video_view.video_id}}
// вывод ID видео в шаблоне блока video_view
{{$data.video_id}}
Для итерации по переменной-массиву следует использовать конструкцию {{foreach}}:
{{foreach name=data item=item from=$storage.video_view_video_view.tags}}
{{* Обращение к элементу массива идет через переменную $item *}}
{{$item.tag_id}}
{{$item.tag}}
{{/foreach}}
Обратите внимание, что если у вас уже есть один цикл {{foreach}} (например, по списку видео), и внутри него вы хотите добавить еще один цикл (например, вывести категории для каждого видео в списке), то вам необходимо использовать другое название для переменных item и name:
{{foreach name=data item=item from=$data}}
{{* Обращение к элементу основного массива идет через переменную $item *}}
Название: {{$item.title}}
Категории:
{{* Внутренний цикл по категориям, список категорий доступен в переменной $item.categories *}}
{{foreach name=data_inner item=item_inner from=$item.categories}}
{{* Обращение к элементу внутреннего массива идет через переменную $item_inner *}}
{{$item_inner.title}},
{{/foreach}}
{{/foreach}}