Плагин 'xtradbrowusers' - Руководство по тегам в шаблонах. Интеграция и прописание тегов для вывода экстраполей в шаблонах. Текст полной версии шпаргалки.
Начало шпаргалки, а также все скриншоты для наглядности, - всё это лежит в статье “Плагин xtradbrowusers — Руководство по тегам в шаблонах”
Пользователи (модуль 'users')
Список шаблонов модуля в папке вашей темы, например "2waydeal", "index36", "nemesis" — важно то, что они должны лежать именно в папке темы, соблюдая такой путь:
/themes/2waydeal/modules/users/users.edit.tpl
/themes/2waydeal/modules/users/users.profile.tpl
/themes/2waydeal/modules/users/users.details.contractor.tpl
/themes/2waydeal/modules/users/users.details.tpl
/themes/2waydeal/modules/users/users.register.tpl
/themes/2waydeal/modules/users/users.tpl
users.edit.tpl
шаблон редактирования данных пользователя администратором.
Открываем шаблон, и обязательно внутри формы
<form action="{USERS_EDIT_SEND}" method="post" name="useredit" enctype="multipart/form-data" class="needs-validation" novalidate>
<input type="hidden" name="id" value="{USERS_EDIT_ID}" />
....
....
<button type="submit" class="btn btn-outline-primary">
<i class="fa-solid fa-floppy-disk me-1"></i> {PHP.L.Update}
</button>
</form>в любом для вас удобном месте вставляем блок с выводом наших полей:
<!-- IF {PHP|cot_plugin_active('xtradbrowusers')} -->
<div class="row my-5">
<p>{PHP.L.xtradbrowusers_edit_tpl_title}</p>
<div class="list-group list-group-striped list-group-flush border-bottom">
<!-- IF {USERS_EDIT_XTRA_X020_ABOUT_VENDOR_TEXT} -->
<div class="list-group-item py-3">
<label>{USERS_EDIT_XTRA_X020_ABOUT_VENDOR_TEXT_TITLE}:</label>
{USERS_EDIT_XTRA_X020_ABOUT_VENDOR_TEXT}
</div>
<!-- IF {USERS_EDIT_XTRA_X020_ABOUT_VENDOR_TEXT_EN} -->
<div class="list-group-item py-3">
<label>{USERS_EDIT_XTRA_X020_ABOUT_VENDOR_TEXT_EN_TITLE}:</label>
{USERS_EDIT_XTRA_X020_ABOUT_VENDOR_TEXT_EN}
</div>
<!-- ENDIF -->
<!-- ENDIF -->
<!-- IF {USERS_EDIT_XTRA_X010_PHONE_VENDOR_ORDERS} -->
<div class="list-group-item py-3">
<label>{USERS_EDIT_XTRA_X010_PHONE_VENDOR_ORDERS_TITLE}:</label>
{USERS_EDIT_XTRA_X010_PHONE_VENDOR_ORDERS}
</div>
<!-- ENDIF -->
<!-- IF {USERS_EDIT_XTRA_X011_TG_VENDOR_ORDERS} -->
<div class="list-group-item py-3">
<label>{USERS_EDIT_XTRA_X011_TG_VENDOR_ORDERS_TITLE}:</label>
{USERS_EDIT_XTRA_X011_TG_VENDOR_ORDERS}
</div>
<!-- ENDIF -->
<!-- IF {USERS_EDIT_XTRA_X012_TG_CHANEL_VENDOR} -->
<div class="list-group-item py-3">
<label>{USERS_EDIT_XTRA_X012_TG_CHANEL_VENDOR_TITLE}:</label>
{USERS_EDIT_XTRA_X012_TG_CHANEL_VENDOR}
</div>
<!-- ENDIF -->
<!-- IF {USERS_EDIT_XTRA_X200_RESUME_FILE} -->
<div class="list-group-item py-3">
<label>{USERS_EDIT_XTRA_X200_RESUME_FILE_TITLE}:</label>
{USERS_EDIT_XTRA_X200_RESUME_FILE}
</div>
<!-- ENDIF -->
<!-- IF {USERS_EDIT_XTRA_X200_LAST_PROMOTION} -->
<div class="list-group-item py-3">
<label>{USERS_EDIT_XTRA_X200_LAST_PROMOTION_TITLE}:</label>
{USERS_EDIT_XTRA_X200_LAST_PROMOTION}
</div>
<!-- ENDIF -->
<!-- IF {USERS_EDIT_XTRA_X200_DEPARTMENT} -->
<div class="list-group-item py-3">
<label>{USERS_EDIT_XTRA_X200_DEPARTMENT_TITLE}:</label>
{USERS_EDIT_XTRA_X200_DEPARTMENT}
</div>
<!-- ENDIF -->
</div>
</div>
<!-- ENDIF -->Важно: этот код выведет лишь некоторые поля из всего «демонстрационного набора» экстраполей при установке плагина.
Моя задача — создать для вас хоть какую-то шпаргалку с иллюстрацией механизма включения (прописания) полей в шаблоны.
Здесь можно запутаться, но на самом деле всё предельно просто.
Собрать правильный тег для вашего шаблона, чтобы в нём получить своё поле, — это как собрать игрушечный паровозик из нескольких вагончиков:
USERS_EDIT_XTRA_— префикс из нашего плагинаX020_ABOUT_VENDOR_TEXT— имя нашего поля
USERS_EDIT_XTRA_ + X020_ABOUT_VENDOR_TEXT = USERS_EDIT_XTRA_X020_ABOUT_VENDOR_TEXT
Видите, как просто.
Обернув в фигурные скобки, мы нашему шаблонизатору XTemplate говорим:
«дай мне в шаблоне здесь
{КАРТОШКА_ЖАРЕННАЯ},{КЕТЧУП_ОСТРЫЙ}»,
и если имя корректное — он принесёт сюда в шаблон то, что туда положили повара на кухне. Поваром здесь может быть и разработчик, и вы сами как пользователь или администратор.
В нашем случае у шаблонизатора мы попросили {USERS_EDIT_XTRA_X020_ABOUT_VENDOR_TEXT} в шаблоне редактирования, и он нам сюда принесёт поле для заполнения, редактирования и сохранения данных текстового типа.
Теперь как собрать заголовок поля, то есть получить его «Описание поля (_TITLE)»?
Всё также предельно просто:
USERS_EDIT_XTRA_— префикс из нашего плагинаX020_ABOUT_VENDOR_TEXT— имя нашего поля_TITLE— суффикс из нашего плагина
USERS_EDIT_XTRA_ + X020_ABOUT_VENDOR_TEXT + _TITLE = USERS_EDIT_XTRA_X020_ABOUT_VENDOR_TEXT_TITLE
Подробнее в файле хукинга.
Снова обернули наш «паровозик» в фигурные скобки и кричим нашему шаблонизатору XTemplate в шаблоне:
«Эй, официант, хочу
{USERS_EDIT_XTRA_X020_ABOUT_VENDOR_TEXT_TITLE}!».
И разумеется, если такое есть — он вернёт нам описание поля. В демке это лейбл поля «Обо мне кратко».
Однажды вникнув, потратив с практикой и чтением шпаргалки минут 15, — вас уже не будут смущать ни «вагончики» детского «паровозика», ни незнакомец-официант по имени «шаблонизатор XTemplate».
Запомнили одно: собрали паровозик из нужных вагончиков — всё, теперь зовём официанта и корректно называем то, что хотите от него!
Для разработчиков
В Cotonti шаблонизатор работает так:
В PHP-коде вы присваиваете значение переменной:
$t->assign('FIELD_NAME', htmlspecialchars(mb_strtoupper($exfld['field_name'])));В шаблоне вы используете фигурные скобки:
{FIELD_NAME}Класс
Cotpl_dataпри загрузке шаблонного блока разбирает его содержимое и находит все подстроки вида{...}.Именно этот фрагмент кода выделяет имя переменной:
if ($firstSymbol === '{' && $lastSymbol === '}') { $this->chunks[] = new Cotpl_var(mb_substr($chunk, 1, mb_strlen($chunk) - 2)); }Он убирает
{и}, берёт внутреннее имя (FIELD_NAME) и создаёт объектCotpl_var, который позже при выводе заменится на значение из массива, переданного черезassign().- Когда шаблон рендерится,
XTemplateпроходит по чанкам блока, находитCotpl_varдляFIELD_NAMEи подставляет актуальное значение (в вашем случае — имя поля в верхнем регистре).
Таким образом, фигурные скобки — это обязательный синтаксис для вывода переменных, а Cotpl_data отвечает за то, чтобы эти переменные были распознаны и корректно заменены при парсинге шаблона.
Подробнее в файле cotemplate.php.