Forums / National / Russian / Сборка «Фриланс-биржа» / Где почитать про Синтаксисы? Местной документации не хватает.

Macik
#42374 2016-11-21 13:25

Разъясняю...

По тегам — есть 3 типа тегов:

  1. «Системные» теги (в вашем примере `{INDEX_NEWS}`) — такие теги формируются системой (ядром или, чаще, расширениями). Их особенность в том, что, как правило, они доступны в определенной области видимости, т.е. в определенном шаблоне, и более того даже только в определенном блоке (есть конечно и глобальные, но их меньшинство). Что под собой подразумевает каждый конкретный тег иногда можно определить из его названия (толковый разработчик старается подобрать максимально описательное назваие). Если из названия или контекста не понятно, что содержит тег, то есть 2 варианта узнать: первый — заглянуть в код расширения, которое этот тег формитрует, или, что более просто, воспользоваться отладочным режимом и вывести список тегов и соотв. значений.
  2. Тег значение переменной/массива/объекта — (в вашем примере `{PHP.cot_plugins_active.userpoints}`). Здесь мы обращаемся к системным переменным или переменным конкретного расширения (если мы в его шаблоне). Про значение системных переменных можно прочитать тут (в том числе там упоминается массив `cot_plugins_active`).
  3. Теги с вызовом функций, т.н. колбеки — пример `{MY_STRING|str_replace('foo', 'bar', $this)|htmlspecialchars}`. Здесь значение тега `MY_STRING` передается в функцию `str_replace()` вместо переменной `$this`, далее по цепочке результат уйдет в функцию `htmlspecialchars()`. И полученный результат будет подставлен вместо тега.

В вашем примере вы привели теги «завернутые» в условный оператор. Суть его аналогично условным операторам в программировании — т.е. блок сработает если содержиние тега равно указанному значению. Пример:

<!-- IF {PHP.cfg.forums.edittimeout} != 0 -->
	{PHP.L.forums_edittimeoutnote} {FORUMS_POSTS_NEWPOST_EDITTIMEOUT}    
<!-- ENDIF -->

В вашем примере значение для сравнения не указано, значит блок сработает если заданный тег определен — т.е. возвращает не пустой результат.

Подробнее про типы, колбеки, а также блоки и операторы расписано в соотв. доке. Опять же, точные значение тегов смотри в отладочном режиме.

 

Теперь кратко про экстраполя.

В двух словах это системный механизм, позволяющий модулям быть более гибкими и предоставлять администратору возможность добавить дополнительные поля к текущим структурам данных. На примере — есть у нас модуль `Page` (Страницы). Он использует внутри себя структуру данных описывающих список страниц. По сути это таблица, которую создает при установке Модуль. Эта таблица имеет набор колонок с данными, описывающих отделную страницу — типа: время создания, автор, кол-во просмотров и пр. Этот набор данных, по умолчанию фиксирован и определяется самим Модулем. А вот механизм экстраполей позволяет расширить этот набо данных (при условии, что сам модуль разработан с учетом поддержки экстраполей). 

На практике, например, надо нам позволить пользователям размещающим страницы для каждой задавать персональную ссылку на сторонний сайт. Для хранения ссылки надо либо писать отдельный плагин со своей таблицей где они будут храниться, либо, что проще для данной задачи — использовать экстраполе. Добавляя его к модулю `Page` система по сути добавит дополнительную колонку в таблицу `cot_pages`, которую мы сможем использовать для наших целей.

Более того этот механизм берет на себя функции обслуживания этой колонки, т.е. формирование тегов поля ввода данных, созранения и отображения.

Добавив (через «Управление сайтом → Прочее → Экстраполя → Таблица cot_pages - Модуль Pages») экстра поле 'link' — мы автоматом получим от системы сгенерированные теги соотв. полей и описаний для различных шаблонов модуля `Page`. Внизу дана подсказка как будут именоваться сгенерированные теги. Вместо строки  «XXXXX» в названиях тегов нам надо подставить имя нашего экстар поля в верхнем регистре:

    page.list.tpl: {LIST_ROW_LINK}, {LIST_TOP_LINK};
    page.tpl: {PAGE_LINK}, {PAGE_LINK_TITLE};
    page.add.tpl: {PAGEADD_FORM_LINK}, {PAGEADD_FORM_LINK_TITLE};
    page.edit.tpl: {PAGEEDIT_FORM_LINK}, {PAGEEDIT_FORM_LINK_TITLE};
    news.tpl: {PAGE_ROW_LINK};
    recentitems.pages.tpl: {PAGE_ROW_LINK}; 

Т.е чтобы добавить наше поле в окно редактирования страницы мы должны добавить в шаблон `page.edit.tpl` теги  {PAGEEDIT_FORM_LINK}, {PAGEEDIT_FORM_LINK_TITLE}. Где  {PAGEEDIT_FORM_LINK} — это само поле ввода данных, а {PAGEEDIT_FORM_LINK_TITLE} его описание.

 

https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F