Категории форума

Руководство по тегам в шаблонах - полная версия шпаргалка

Плагин 'xtradbrowusers'. Интеграция и прописание тегов для вывода экстраполей в шаблонах. Текст полной версии шпаргалки в каком шаблоне какие теги прописывать правильно.

webitproff
webitproff • 16.08.2026 01:15 #579

Статьи, форумы, интернет-магазин, комментарии и теги нашего плагина. 

Прописание тегов и сборка "составов поездов" по предыдущему модулю, - модулю пользователей 'users', как по мне это было простенько.   
Разумеется это субъективный взгляд, и новичкам везде тяжело, пока не освоятся.   
Поэтому я и прибегаю к разного рода самым известным аналогиям, что бы вам, как новичку было проще сопоставить то, что вам уже известно с тем, что представлено в шпаргалке. Прибегая к такого рода "познанию в сравнении" вы по большей части не будете создавать новые знания, а будете пользоваться вашими текущими, еще с детства. 
Вы точно забудете, имена шаблонов, полей, что и где прописывать, но вы никогда не забудете про "паровозик с вагонами", который нужно собрать. Уверен также не забудете, что "официанту" нужно назвать корректное имя того, что желаете от него получить, и тут вспомните, что имя, - это уже собранный "железнодорожный состав", со своим локомотивом, собственными вагонами пассажирскими, грузовыми, багажными, почтовыми и т.д.

Но если "внутри" модуля 'users' нам было достаточно "официанту сказать", - «дай мне в шаблоне здесь {КАРТОШКА_ЖАРЕННАЯ}, {КЕТЧУП_ОСТРЫЙ}», то в расширениях за пределами шаблонов модуля 'users' (простите за тавтологию, но тут лучше так), мы будем вынужденны говорить, указывая явное "географическое" происхождение.
Например, - {ЕГИПЕТСКАЯ_КАРТОШКА_ЖАРЕННАЯ}, {АМЕРИКАНКСАЯ_КАРТОШКА_ЖАРЕННАЯ}, {ЧИЛИЙСКИЙ_КЕТЧУП_ОСТРЫЙ} и.д.
И так, чутку забегая вперед, покажу, как мы будем говорить, а точнее называть официанту (шаблонизатору XTemplate) имена "составов с географическим признаком":

В статьях на странице полной новости:

{PAGE_OWNER_XTRA_X200_RESUME_FILE}
{PAGE_OWNER_XTRA_X200_RESUME_FILE_TITLE}

{PAGE_OWNER_XTRA_X200_RESIDENCE_COUNTRY_TITLE}
{PAGE_OWNER_XTRA_X200_RESIDENCE_COUNTRY}
{PAGE_OWNER_XTRA_X200_RESIDENCE_COUNTRY_NAME}


На форуме, в списках постов (ответов в теме):

{FORUMS_POSTS_ROW_USER_XTRA_X200_RESUME_FILE}
{FORUMS_POSTS_ROW_USER_XTRA_X200_RESUME_FILE_TITLE}

{FORUMS_POSTS_ROW_USER_XTRA_X200_RESIDENCE_COUNTRY_TITLE}
{FORUMS_POSTS_ROW_USER_XTRA_X200_RESIDENCE_COUNTRY}
{FORUMS_POSTS_ROW_USER_XTRA_X200_RESIDENCE_COUNTRY_NAME}


В товарах, на странице карточки товара, в блоке информации о продавце:

{MARKET_OWNER_XTRA_X200_RESUME_FILE}
{MARKET_OWNER_XTRA_X200_RESUME_FILE_TITLE}

{MARKET_OWNER_XTRA_X200_RESIDENCE_COUNTRY_TITLE}
{MARKET_OWNER_XTRA_X200_RESIDENCE_COUNTRY}
{MARKET_OWNER_XTRA_X200_RESIDENCE_COUNTRY_NAME}


В комментариях, на странице статьи полной новости, в блоке списка комментариев и информации о авторе комментария:

{COMMENTS_ROW_AUTHOR_XTRA_X200_RESUME_FILE}
{COMMENTS_ROW_AUTHOR_XTRA_X200_RESUME_FILE_TITLE}

{COMMENTS_ROW_AUTHOR_XTRA_X200_RESIDENCE_COUNTRY_TITLE}
{COMMENTS_ROW_AUTHOR_XTRA_X200_RESIDENCE_COUNTRY}
{COMMENTS_ROW_AUTHOR_XTRA_X200_RESIDENCE_COUNTRY_NAME}


На первый взгляд, здесь тоже все очень просто и оно действительно так, но есть ньюанс, если раньше, с модулем пользователей, наш плагин сам указывал "локомотив", главный, ключевой тягач всех вагонов, то здесь, с расширения за пределами модуля пользователей, плагин заранее не знает его.

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

Так как же составлять правильно имена тегов?

1. Правило первое.

К  "локомотиву" цепляемся в последнюю очередь, сразу собираем состав вагонов.

2. Правило второе.

Состав вагонов, за пределами модуля пользователей, всегда начинается с "вагона обслуживания", а именно с постпрефикса "XTRA_".

К "вагону обслуги" цепляем "первый ключевой" вагон, а это имя вашего поля, которое всегда видете в админке плагина, на вкладке "Статистика", в колонке "Имя поля".
К "первому ключевому", с характерным звуком, пристыковываем замыкающий суффиксный вагон атрибутов, в виде "_TITLE", "_NAME" или "_VALUE", взамисимости от характера "груза", но об этом позже.

3. Правило третье.

Если "поехал" один собранный поезд из вагона обслуги и первого ключевого, - поедут все остальные.

Собираем состав:

- "XTRA_"                         - вагон обслуги, для дальних поездок, за пределами модуля 'users';
- "X011_TG_VENDOR_ORDERS"         - ключевой вагон, с именем нашего поля, в данном случае, для перевозки данных поля "телеграм"

Стыкуем эти два вагона

"XTRA_" + "X011_TG_VENDOR_ORDERS" = XTRA_X011_TG_VENDOR_ORDERS

Всё! у нас есть основа поезда, это основа нашего состава.
Теперь, можно цепляться к любому локомотиву, который тягает другие поезда в нужном "географическом" направлении.
Выше о них уже я писал, это:

- "PAGE_OWNER_"                - тягач, всего, что связано с пользователем, владельцем статьи, на ее полной странице, по собственной ссылке. 

- "FORUMS_POSTS_ROW_USER_"     - тягач, всего, что связано с пользователем, владельцем/автором поста/ответа в любой теме форума.  

- "COMMENTS_ROW_AUTHOR_"       - тягач, всего, что связано с пользователем, автором комментария, в списке комментариев к кокнретной статье.

- "MARKET_OWNER_"              - тягач, всего, что связано с пользователем, владельцем товара, в карточке его полной страницы.


Стыкуем локомотив и основу поезда для статьи, что бы вывести в шаблоне page.tpl, он же page.news.tpl или page.usersblog.tpl - это просто вариации одного шаблона.

"PAGE_OWNER_" + "XTRA_X011_TG_VENDOR_ORDERS" = "PAGE_OWNER_XTRA_X011_TG_VENDOR_ORDERS"

Вот и получили наш поезд в сборе, он почти готов к отправке. 
Осталось нам, обратиться к "официанту", который обслуживает наши шаблоны, а сейчас это page.tpl (полная статья) и правильно сказать, обернув составленное имя в фигурные скобки:

{PAGE_OWNER_XTRA_X011_TG_VENDOR_ORDERS}


Для нас это звучит примерно так:

Принеси мне в статью, "служебный вагон" плагина 'xtradbrowusers' и прикрепленный к нему, "ключевой вагон", я надеюсь там есть нужные мне данные поля телеграм этого пользователя.

Мы проверяем, и в нужном месте появились данные, которые мы попросили у официанта. 
Но нам этого мало, и мы хотим получить название этого поля. 
Не путать с "имя поля". 
Зайдите в админку, таблица "Параметры экстраполей" вы наглядно увидите разницу. 
Название поля, - это описательная пояснительная записка к каждому полю, что бы мы понимали, что это за данные. Например, можно вывести дату, а это дата чего именно? Вот для этого и существуют названия полей, которые мы получаем, стыкуя с нашим составом, суффиксный вагон атрибута "_TITLE".

Для предельной простоты, рекомендую запомнить, что бы не путаться, увидели атрибут "_TITLE" в составе экстраполя - это этикетка, лейба, лейбл, стикер того, что лежит в ОСНОВНОМ СОСТАВЕ из служебного и ключевого вагонов.

И по аналогии, с тем, что мы уже знаем, берем наш основной поезд, уже с локомотивом и дополнительно стыкуем:

"PAGE_OWNER_XTRA_X011_TG_VENDOR_ORDERS" + "_TITLE" = "PAGE_OWNER_XTRA_X011_TG_VENDOR_ORDERS_TITLE"

Заворачиваем в обертку из фигурных скобок, и передаем официанту новый поезд и в новом составе, вот в таком виде:

{PAGE_OWNER_XTRA_X011_TG_VENDOR_ORDERS_TITLE}

И если он уже приносил {PAGE_OWNER_XTRA_X011_TG_VENDOR_ORDERS}, то на ваш новый запрос, ответит "мм-гу" и тут же покажет {PAGE_OWNER_XTRA_X011_TG_VENDOR_ORDERS_TITLE}.

Оформим это разметкой HTML-кода, и в нужном месте, где-то после никнейма пользователя (владельца статьи) добавим:

<!-- IF {PHP|cot_plugin_active('xtradbrowusers')} -->
<!-- IF {PAGE_OWNER_XTRA_X020_ABOUT_VENDOR_TEXT} -->
<div class="d-flex mb-3">
    <div class="contact-icon about me-3">
        <i class="fa-solid fa-circle-info fa-xl"></i>
    </div>
    <div>
        <div class="contact-label">{PAGE_OWNER_XTRA_X020_ABOUT_VENDOR_TEXT_TITLE}</div>
        <div class="contact-value">{PAGE_OWNER_XTRA_X020_ABOUT_VENDOR_TEXT}</div>
    </div>
</div>
<!-- ENDIF -->
<!-- IF {PAGE_OWNER_XTRA_X010_PHONE_VENDOR_ORDERS_VALUE} -->
<div class="d-flex align-items-center mb-3">
    <div class="contact-icon phone me-3">
        <i class="fa-solid fa-phone fa-xl"></i>
    </div>
    <div>
        <div class="contact-label">{PAGE_OWNER_XTRA_X010_PHONE_VENDOR_ORDERS_TITLE}</div>
        <div class="d-flex align-items-center">
            <span id="phone-{PAGE_OWNER_ID}" class="contact-value fs-3" style="letter-spacing:2px"></span>
            <button type="button" class="btn btn-outline-primary btn-sm ms-2"
            id="show-phone-btn-{PAGE_OWNER_ID}"
            data-phone="{PAGE_OWNER_XTRA_X010_PHONE_VENDOR_ORDERS_VALUE}"
            onclick="document.getElementById('phone-{PAGE_OWNER_ID}').textContent = this.dataset.phone; this.style.display='none';">
                <i class="fa-solid fa-eye me-1"></i> {PHP.L.xtradbrowusers_details_tpl_show_hidden_content}
            </button>
        </div>
    </div>
</div>
<!-- ENDIF -->
<!-- IF {PAGE_OWNER_XTRA_X011_TG_VENDOR_ORDERS} -->
<div class="d-flex align-items-center mb-3">
    <div class="contact-icon telegram me-3">
        <i class="fa-brands fa-telegram fa-xl"></i>
    </div>
    <div>
        <div class="contact-label">{PAGE_OWNER_XTRA_X011_TG_VENDOR_ORDERS_TITLE}</div>
        <a href="https://t.me/{PAGE_OWNER_XTRA_X011_TG_VENDOR_ORDERS}" target="_blank" rel="noopener noreferrer" class="telegram-link">
            @{PAGE_OWNER_XTRA_X011_TG_VENDOR_ORDERS}
        </a>
    </div>
</div>
<!-- ENDIF -->
<!-- IF {PAGE_OWNER_XTRA_X012_TG_CHANEL_VENDOR_VALUE} -->
<div class="d-flex align-items-center mb-3">
    <div class="contact-icon telegram me-3">
        <i class="fa-brands fa-telegram fa-xl"></i>
    </div>
    <div>
        <div class="contact-label">{PAGE_OWNER_XTRA_X012_TG_CHANEL_VENDOR_TITLE}</div>
        <a href="https://t.me/{PAGE_OWNER_XTRA_X012_TG_CHANEL_VENDOR_VALUE}" target="_blank" rel="noopener noreferrer" class="telegram-link">
            @{PAGE_OWNER_XTRA_X012_TG_CHANEL_VENDOR_VALUE}
        </a>
    </div>
</div>
<!-- ENDIF -->
<!-- IF {PAGE_OWNER_XTRA_X200_RESUME_FILE} -->
<div class="d-flex align-items-center mb-3">
    <div class="me-3">
        <label>{PAGE_OWNER_XTRA_X200_RESUME_FILE_TITLE}:</label>
    </div>
    <div>
        <a href="{PHP.cfg.mainurl}/datas/exflds/xtradbrowusers/{PAGE_OWNER_XTRA_X200_RESUME_FILE}"
        class="btn btn-primary btn-sm"
        target="_blank"
        rel="noopener noreferrer">
            <i class="fa-solid fa-download me-1"></i> {PHP.L.Download}
        </a>
    </div>
</div>
<!-- ENDIF -->
<!-- IF {PAGE_OWNER_XTRA_X200_LAST_PROMOTION} -->
<div class="d-flex align-items-center mb-3">
    <div class="contact-icon calendar me-3">
        <i class="fa-solid fa-calendar-alt fa-xl"></i>
    </div>
    <div>
        <div class="contact-label">{PAGE_OWNER_XTRA_X200_LAST_PROMOTION_TITLE}</div>
        <div class="contact-value">{PAGE_OWNER_XTRA_X200_LAST_PROMOTION}</div>
    </div>
</div>
<!-- ENDIF -->
<!-- IF {PAGE_OWNER_XTRA_X200_DEPARTMENT} -->
<div class="d-flex align-items-center mb-3">
    <div class="contact-icon building me-3">
        <i class="fa-solid fa-building fa-xl"></i>
    </div>
    <div>
        <div class="contact-label">{PAGE_OWNER_XTRA_X200_DEPARTMENT_TITLE}</div>
        <div class="contact-value">{PAGE_OWNER_XTRA_X200_DEPARTMENT}</div>
    </div>
</div>
<!-- ENDIF -->
<!-- IF {PAGE_OWNER_XTRA_X200_RESIDENCE_COUNTRY} -->
<div class="d-flex align-items-center mb-3">
    <div class="contact-icon building me-3">
        <i class="fa-solid fa-building fa-xl"></i>
    </div>
    <div>
        <div class="contact-label">{PAGE_OWNER_XTRA_X200_RESIDENCE_COUNTRY_TITLE}</div>
        <div class="contact-value">{PAGE_OWNER_XTRA_X200_RESIDENCE_COUNTRY} | {PAGE_OWNER_XTRA_X200_RESIDENCE_COUNTRY_NAME}</div>
    </div>
</div>
<!-- ENDIF -->
<!-- ENDIF -->

    

Смотрите пояснительные скриншоты в статье с краткой шпаргалкой.

Файл хукинга

 

 

 

Отредактировано: webitproff (16.08.2026 01:27, 5 часов назад)
🗿

🧙‍♂️ Радуйся, странниче добрый и честный! Не понапрасну привела тя стезя в земли сии. Зде бо мужи мудры и искусники дела писменнаго и численнаго, что куют словеса и плетут узоры кода, тайны разгадывают и знанием делятся, летописи множа и ремесло цифровое творя.
⬅️ Аще налево пойдеши — обрящеши грамоты древния, писания старинныя и свитки учения. ⬆️ Аще прямо — слово мудрое и совет от мужей разумеющих, что в деле кодописном искусны, получиши. ➡️ Аще направо — сам в писцы и летописцы внидеши, и в ремесло цифровое, где строки и знаки в дело живое обращаются, слово свое в память веков вложиши.
📝 Не медли же — нареки имя свое, и вниди в чин наш, и стань с нами в братстве, где код есть магия, а строки — заклятия живыя, числом и буквою слово едины суть.
🏰 Не тайно есть собрание сие, и не инициации в нем, но многое сокрыто от пришлых и ступалого, понеже не всякому открывается знание, но токмо ищущим и пребывающим в деле сем.