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

smit
#1 2016-11-21 03:52

Всем здрасте! Подскажите плиз, знающие люди, где почитать вот про эти блоки: 

<!-- IF {PHP.cot_plugins_active.userpoints} -->

<!-- IF {INDEX_NEWS} -->

И т.д..

Хочу разобраться уже наконец с этими тегами, операторами, условиями, параметрами.. Чтобы не задавать глупые вопросы.

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

Мне нужны точные значения этих операторов и тегов. 

Тоже самое касается экстраполей. Тоже если выходит за рамки подсказок - сразу стопорюсь. К примеру взять простейший: {LIST_ROW_XXXXX}. Я вижу, что оно состоит из 3 частей, но что здесь что - не понимаю... 

Либо, если кто-то напишет основной список - я буду безмерно благодарен.

Кто скажет про Гугл, тот цыска!

 

 

Macik
#2 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
smit
#3 2016-11-21 18:26
#42374 Macik:

 

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

В двух словах это системный механизм, позволяющий модулям быть более гибкими и предоставлять администратору возможность добавить дополнительные поля к текущим структурам данных. На примере — есть у нас модуль `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://www.cotonti.com/forums/42355?m=posts - Человек меня спрашивает: "А кто сказал что в форме теги будут LIST_ROW, не кажется что не логично?"

Я вот этот момент не понимаю: что логично? что не логично? какая там вообще логика? Просто мне нужно некоторые элементы раскидать по сайту. А мало того что одно и тоже экстраполе, на разных страницах принимает разную форму, так его еще нужно одним единственным правильным способом вызвать, который в другом месте скорее всего не сработает... Я вот с этим пытаюсь разобраться..

Добавлено 4 минуты спустя:

А конкретно сейчас парюсь с 2-мя задачами:

Фильтр поиска: https://www.cotonti.com/forums?m=posts&q=8279

И точки на карте: https://www.cotonti.com/forums?m=posts&q=8280

Macik
#4 2016-11-21 21:36
#42394 smit:
 

К примеру: https://www.cotonti.com/forums/42355?m=posts - Человек меня спрашивает: "А кто сказал что в форме теги будут LIST_ROW, не кажется что не логично?"

Я вот этот момент не понимаю: что логично? что не логично? какая там вообще логика?

Логика зависит от разработчика модуля. Почему там префикс `SEARCH` и почему он не указан в подсказке — я не могу сказать.

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

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

Добавлено 4 минуты спустя:

А конкретно сейчас парюсь с 2-мя задачами:

Фильтр поиска: https://www.cotonti.com/forums?m=posts&q=8279

И точки на карте: https://www.cotonti.com/forums?m=posts&q=8280

Тут я, увы не помощник. В бирже не работал, от слова совсем. А ставить специально и разбираться — увольте. Ж)

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