Создание компонента подразумевает автоматическое создание новой таблицы в базе данных. Структура таблицы определяется набором полей для нее. Для добавления компонента (или его редактирования) необходимо заполнить соответствующую форму (см. «Руководство пользователя»).
Четыре макета (префикс, суффикс, макет вывода объекта в списке и полного вывода) представляют собой HTML-текст со вставками функций PHP, системных функций NetCat и специальных переменных. Так же, как и содержимое макетов дизайна, эти макеты выполняются при помощи функции eval(): eval(“echo $template;”). Поэтому к ним применимы все те же правила, что и для макетов дизайна: маскировка кавычек и обратного слеша, сцепление строк при помощи точки и пр. В Приложении 2 приведен список функций и переменных, которые можно использовать в макетах и компонентах.
Префикс и суффикс обычно используются в следующих случаях:
1. Если компонент подразумевает какой-либо HTML-текст перед списочной частью (или после нее), он указывается в макетах префикса и суффикса соответственно. Например, теги < table…> и < /table> (а также, возможно, заголовочная часть страницы), если данные на страницах компонента должны представляться в табличном виде.
2. Если компонент содержит элементы навигации по компоненту раздела (если подразумевается, что список будет многостраничным). Например, необходимо реализовать навигацию в следующем виде:
Новости 11 - 20 из 35 пред. | 1 | 2 | 3 | след.
Для реализации этого примера необходимо внести в суффикс (или префикс, что встречается реже) примерно следующий текст:
При этом настройки вывода блока навигации (поле «Шаблоны вывода навигации» в макете дизайна) должны быть следующими:
В этом примере ссылка «пред.» или «след.» будут показаны только в том случае, если мы находимся не на первой (или последней) странице списка.
Все записи в списке будут показаны в соответствии с макетом вывода записи. Он также представляет собой HTML-текст со вставками переменных и функций, полный список которых приводится в Приложении 2. Для каждой записи определен набор переменных, каждая из которых соответствует полю компонента. Если Name – название поля в компоненте, то для ее отображения в макете вывода записи нужно указывать переменную $f_Name, т.е. к названию поля прибавлять префикс «$f_».
К любым переменным (в т.ч. и соответствующим полям компонента) можно применять любые доступные функции, например, opt($var, $output) (вывод $output в том случае, если $var не пусто и не равно нулю), is_even($var) (проверка на четность), стандартные функции PHP.
К примеру, необходимо вывести анкету сотрудника. Сущность «Сотрудник» состоит из полей:
- ФИО (Name, Строка, обязательное для заполнения)
- Дата рождения (Date, Дата и Время, обязательное для заполнения)
- Фото (Photo, Файл)
- Характеристика (Description, Текстовый блок, обязательное для заполнения)
- Отдел (Depart, Список)
Сортировать записи нужно по фамилиям сотрудников. Для этого в поле «Сортировать по полю» установим значение «Name». Вывод записей должен происходить в следующем виде:
| Фото Фото Фото Фото | Иванов Иван Иванович |
| Фото Фото Фото Фото | Родился 32.13.1999, «Отдел маркетинга» |
| Фото Фото Фото Фото | |
| Фото Фото Фото Фото | Не пьет, не курит, не судим, женат, имеет трех детей и |
| Фото Фото Фото Фото | автомобиль ВАЗ. |
Данный пример может быть реализован примерно так.
Префикс:
Макет вывода записи:
Родился $f_Date_day.$f_Date_month.$f_Date_year.”opt($f_Depart, “, отдел «$f_Depart»”).”
$_Description
В приведенном примере префикс открывает таблицу, суффикс ее закрывает, а каждый объект представляет собой строку из 2х ячеек. В первой ячейке показывается фотография сотрудника с альтернативным текстом, соответствующим имени сотрудника. Если фотографии нет, показывается другая картинка (например, пустая или с надписью «Нет фото»). Во второй ячейке выводится имя сотрудника, дата рождения, затем отдел (если он есть) и потом характеристика. Обратите внимание: т.к. отдел является необязательным параметром, он проверяется на «не пустоту». Эту проверку можно было бы не осуществлять, но в тогда будет выведен некорректный текст:
…32.13.1999, отдел «»…
Поэтому весь текст, относящийся к необязательному параметру, нужно выводить только в том случае, если параметр не пустой. Если же в данном примере поле «Характеристика» было бы необязательным, код бы не изменился, т.к. отсутствие значения между «< br>< br>» и «< /td>» не повлияло бы на вид страницы.
Для демонстрации следующего приема усложним задачу. Пусть сотрудники должны выводиться по 10 человек на странице. Для этого установим соответствующий атрибут компонента в 10. Если оставить шаблоны компонента такими же, будут выведены первые 10 сотрудников, а на следующие страницы попасть будет нельзя. Для исправления этого необходимо ввести в суффикс или префикс элементы навигации по списку записей.
В NetCat поддерживается навигация по списку двух типов, которые могут совмещаться. В первом типе на каждой странице содержатся ссылки на следующую и предыдущую страницу. Для реализации этого типа навигации в суффикс должен быть введен примерно следующий код:
Вместо надписей «назад» и «вперед» можно использовать и другие надписи, а также картинки (например, изображение стрелок). В приведенном примере на первой странице списка слово «назад» будет показано без ссылки, поэтому целесообразно проверять параметр $prevLink:
Аналогично следует поступить и с параметром $nextLink. Также можно использовать переменные $begRow, $endRow, $totRows, которые обозначают соответственно номер первой записи на странице, номер последней записи на странице и общее число записей на всех страницах.
Второй способ навигации подразумевает вывод списка всех страниц. Для его реализации нужно в суффикс или префикс внести функцию:
Внешний вид этого блока навигации должен быть настроен:
Следующий прием одновременно показывает пример присваивания переменной значения и реализации такой частой задачи, как чередование формата вывода записей. Пусть необходимо выводить по две записи в строке. Для реализации этого примера нам потребуется ввести некую переменную-счетчик, четность которой необходимо проверять. Ввести счетчик нужно в префиксе, добавив в него строчку:
В данном случае функция opt() ничего не выводит, только присваивает начальное значение переменной $f_Counter (название может быть другим). В макете же вывода записи нужно:
- проверять четность счетчика и выводить в зависимости от этого код;
- прибавлять единицу к счетчику.
Для этого содержимое макета должно быть примерно таким:
Родился $f_Date_day.$f_Date_month.$f_Date_year.”opt($f_Depart, “, отдел \”$f_Depart\””).”
$_Description
В первой строке, в случае четности записи, выводится тег < tr>, в предпоследней, в случае нечетности, выводится тег < /tr>, а в последней к параметру прибавляется единица. Примерно так же можно организовать, например, вывод строк с разным цветом фона через одну.
Для демонстрации примера применения макета полного вывода еще усложним задачу. У каждого сотрудника должна быть еще и более полная характеристика (FullDescr, Текстовый блок, обязательное для заполнения), которая будет выводиться на отдельной странице при нажатии на ссылку «подробнее». Для этого добавим в макет вывода записи ссылку «подробнее» (ее можно продублировать, например, на фотографии или имени сотрудника):
Ссылка будет иметь вид /about/persons/person_117.html, где /about/persons/ – адрес текущего раздела, person – ключевое слово компонента раздела, а 117 – номер объекта. Если при добавлении сотрудника было введено ключевое слово объекта, оно будет использовано в адресе страницы, который будет выглядеть так: /about/persons/ivanov.html. Пока шаблон отображения одного объекта на отдельной странице пуст, страница, куда можно попасть после нажатия на ссылку, также будет пуста. Для ее заполнения внесем следующий текст в этот шаблон:
|
Родился $f_Date_day.$f_Date_month.$f_Date_year.”opt($f_Depart, “, отдел
\”$f_Depart\””).”
$_FullDescr |
Чтобы вывести имя сотрудника в название страницы, укажем шаблон заголовка данного компонента:
Стоит отметить, что в шаблон отображения объекта в списке необходимо добавить переменную $f_AdminButtons (в произвольном месте). В обычном режиме она пуста, а в режиме администрирования содержит статусную информацию о записи, ссылки «изменить», «удалить» и «включить/выключить». Также в шаблон (обычно в его начало) необходимо добавить переменную $f_AdminCommon. В режиме администрирования она будет выводить блок с технической информацией о компоненте и ссылками на добавление объекта и удаление всех объектов. Настройка дизайна этих административных блоков будет описана ниже.