Здесь представлен готовый пример шаблона market.tpl, в котором динамически создаем модульное описание товара при помощи экстраполей Cotonti и конкретно с использованием плагина xtradbrowmarket.
<!--
Шаблон страницы товара market.tpl
Использует плагин xtradbrowmarket для модульного описания товаров.
Каждый блок снабжён комментариями, поясняющими назначение и тип экстраполя.
Предполагается, что плагин xtradbrowmarket установлен и активен.
-->
<!-- Проверяем, активен ли плагин xtradbrowmarket -->
<!-- IF {PHP|cot_plugin_active('xtradbrowmarket')} -->
<div class="container my-5">
<!-- Заголовок товара (стандартный тег модуля Market) -->
<h1 class="mb-3">{MARKET_TITLE}</h1>
<!-- Краткие ключевые параметры (комбинация нескольких экстраполей) -->
<p class="lead">
<!-- Поле ab_volt (select) + ab_capacity (select) + wheel_size (select) + max_speed (range) + range_km (inputint) -->
{MARKET_XTRA_MOTOR_POWER}W •
{MARKET_XTRA_AB_VOLT} {MARKET_XTRA_AB_CAPACITY} •
{MARKET_XTRA_WHEEL_SIZE}×4.0 •
до {MARKET_XTRA_MAX_SPEED} км/ч •
до {MARKET_XTRA_RANGE_KM} км
</p>
<!-- Карточка с вкладками Bootstrap -->
<div class="card">
<div class="card-header">
<ul class="nav nav-tabs card-header-tabs" id="productTabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="specs-tab" data-bs-toggle="tab" data-bs-target="#specs" type="button" role="tab">Характеристики</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="desc-tab" data-bs-toggle="tab" data-bs-target="#description" type="button" role="tab">Описание и конструкция</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="dimensions-tab" data-bs-toggle="tab" data-bs-target="#dimensions" type="button" role="tab">Габариты и геометрия</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="features-tab" data-bs-toggle="tab" data-bs-target="#features" type="button" role="tab">Особенности</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="faq-tab" data-bs-toggle="tab" data-bs-target="#faq" type="button" role="tab">FAQ</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="delivery-tab" data-bs-toggle="tab" data-bs-target="#delivery" type="button" role="tab">Доставка и оплата</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="service-tab" data-bs-toggle="tab" data-bs-target="#service" type="button" role="tab">Гарантия и сервис</button>
</li>
</ul>
</div>
<div class="card-body">
<div class="tab-content" id="productTabsContent">
<!-- ========== Вкладка Характеристики ========== -->
<div class="tab-pane fade show active" id="specs" role="tabpanel">
<div class="row">
<!-- Аккумулятор: комбинация двух полей select (вольтаж + ёмкость) -->
<!-- IF {MARKET_XTRA_AB_VOLT} OR {MARKET_XTRA_AB_CAPACITY} -->
<div class="col-md-6 mb-3">
<strong>{MARKET_XTRA_AB_VOLT_TITLE}:</strong>
<span>⚡ {MARKET_XTRA_AB_VOLT} 🔋 {MARKET_XTRA_AB_CAPACITY}</span>
</div>
<!-- ENDIF -->
<!-- Мощность двигателя (inputint) -->
<!-- IF {MARKET_XTRA_MOTOR_POWER} -->
<div class="col-md-6 mb-3">
<strong>{MARKET_XTRA_MOTOR_POWER_TITLE}:</strong> <span>{MARKET_XTRA_MOTOR_POWER} Вт</span>
</div>
<!-- ENDIF -->
<!-- Максимальная скорость (range) – отображаем значение с прогресс-баром -->
<!-- IF {MARKET_XTRA_MAX_SPEED} -->
<div class="col-md-6 mb-3">
<strong>{MARKET_XTRA_MAX_SPEED_TITLE}:</strong>
<div class="progress mt-1" style="height:20px;">
<!--
Процент вычисляется как (значение / максимальное_значение_диапазона)*100.
Здесь максимальное значение диапазона = 80 (задано в параметрах поля range).
Для простоты используется статический процент (рассчитывается вручную при вёрстке).
В реальном шаблоне можно вычислить через PHP-фильтр или оставить статику.
-->
<div class="progress-bar bg-success" role="progressbar" style="width: 75%;"
aria-valuenow="{MARKET_XTRA_MAX_SPEED_VALUE}" aria-valuemin="0" aria-valuemax="80">
{MARKET_XTRA_MAX_SPEED} км/ч
</div>
</div>
</div>
<!-- ENDIF -->
<!-- Запас хода (inputint) -->
<!-- IF {MARKET_XTRA_RANGE_KM} -->
<div class="col-md-6 mb-3">
<strong>{MARKET_XTRA_RANGE_KM_TITLE}:</strong> <span>до {MARKET_XTRA_RANGE_KM} км</span>
</div>
<!-- ENDIF -->
<!-- Диаметр колёс (select) -->
<!-- IF {MARKET_XTRA_WHEEL_SIZE} -->
<div class="col-md-6 mb-3">
<strong>{MARKET_XTRA_WHEEL_SIZE_TITLE}:</strong> <span>{MARKET_XTRA_WHEEL_SIZE} × 4.0</span>
</div>
<!-- ENDIF -->
<!-- Тормоза (select) -->
<!-- IF {MARKET_XTRA_BRAKES_TYPE} -->
<div class="col-md-6 mb-3">
<strong>{MARKET_XTRA_BRAKES_TYPE_TITLE}:</strong> <span>{MARKET_XTRA_BRAKES_TYPE}</span>
</div>
<!-- ENDIF -->
<!-- Амортизация (select) -->
<!-- IF {MARKET_XTRA_SUSPENSION_TYPE} -->
<div class="col-md-6 mb-3">
<strong>{MARKET_XTRA_SUSPENSION_TYPE_TITLE}:</strong> <span>{MARKET_XTRA_SUSPENSION_TYPE}</span>
</div>
<!-- ENDIF -->
<!-- Тип привода (select) -->
<!-- IF {MARKET_XTRA_DRIVE_TYPE} -->
<div class="col-md-6 mb-3">
<strong>{MARKET_XTRA_DRIVE_TYPE_TITLE}:</strong> <span>{MARKET_XTRA_DRIVE_TYPE}</span>
</div>
<!-- ENDIF -->
<!-- Тип двигателя (select) -->
<!-- IF {MARKET_XTRA_MOTOR_TYPE} -->
<div class="col-md-6 mb-3">
<strong>{MARKET_XTRA_MOTOR_TYPE_TITLE}:</strong> <span>{MARKET_XTRA_MOTOR_TYPE}</span>
</div>
<!-- ENDIF -->
<!-- Материал рамы (select) -->
<!-- IF {MARKET_XTRA_FRAME_MATERIAL} -->
<div class="col-md-6 mb-3">
<strong>{MARKET_XTRA_FRAME_MATERIAL_TITLE}:</strong> <span>{MARKET_XTRA_FRAME_MATERIAL}</span>
</div>
<!-- ENDIF -->
<!-- Вес (double) -->
<!-- IF {MARKET_XTRA_WEIGHT} -->
<div class="col-md-6 mb-3">
<strong>{MARKET_XTRA_WEIGHT_TITLE}:</strong> <span>{MARKET_XTRA_WEIGHT} кг</span>
</div>
<!-- ENDIF -->
<!-- Максимальная нагрузка (inputint) -->
<!-- IF {MARKET_XTRA_MAX_LOAD} -->
<div class="col-md-6 mb-3">
<strong>{MARKET_XTRA_MAX_LOAD_TITLE}:</strong> <span>до {MARKET_XTRA_MAX_LOAD} кг</span>
</div>
<!-- ENDIF -->
<!-- Основные цвета (checklistbox) – выводим как список -->
<!-- IF {MARKET_XTRA_COLORS} -->
<div class="col-md-6 mb-3">
<strong>{MARKET_XTRA_COLORS_TITLE}:</strong>
<ul class="list-unstyled">
<!-- Значения checklistbox разделены запятыми, здесь показан пример статического списка.
В реальности можно разбить строку через PHP-фильтр или вывести как {MARKET_XTRA_COLORS}. -->
<li>⚫ Чёрный</li>
<li>🔵 Синий</li>
</ul>
</div>
<!-- ENDIF -->
<!-- Особенности модификации (checklistbox) – динамический вывод строки с разделителями -->
<!-- IF {MARKET_XTRA_FEATURES} -->
<div class="col-12 mb-3">
<strong>{MARKET_XTRA_FEATURES_TITLE}:</strong>
<p>{MARKET_XTRA_FEATURES}</p>
</div>
<!-- ENDIF -->
<!-- Трансмиссия (select или input) -->
<!-- IF {MARKET_XTRA_TRANSMISSION} -->
<div class="col-md-6 mb-3">
<strong>{MARKET_XTRA_TRANSMISSION_TITLE}:</strong> <span>{MARKET_XTRA_TRANSMISSION}</span>
</div>
<!-- ENDIF -->
<!-- Дисплей (input) -->
<!-- IF {MARKET_XTRA_DISPLAY_TYPE} -->
<div class="col-md-6 mb-3">
<strong>{MARKET_XTRA_DISPLAY_TYPE_TITLE}:</strong> <span>{MARKET_XTRA_DISPLAY_TYPE}</span>
</div>
<!-- ENDIF -->
<!-- Наличие фары (checkbox) -->
<!-- IF {MARKET_XTRA_HEADLIGHT} -->
<div class="col-md-6 mb-3">
<strong>{MARKET_XTRA_HEADLIGHT_TITLE}:</strong>
<!-- IF {MARKET_XTRA_HEADLIGHT_VALUE} == '1' -->
<span class="text-success">✓ LED передняя + задний стоп-сигнал</span>
<!-- ELSE -->
<span class="text-danger">✗ отсутствует</span>
<!-- ENDIF -->
</div>
<!-- ENDIF -->
<!-- Гарантия (input) -->
<!-- IF {MARKET_XTRA_WARRANTY} -->
<div class="col-md-6 mb-3">
<strong>{MARKET_XTRA_WARRANTY_TITLE}:</strong> <span>{MARKET_XTRA_WARRANTY}</span>
</div>
<!-- ENDIF -->
</div>
</div>
<!-- ========== Вкладка Описание и конструкция ========== -->
<div class="tab-pane fade" id="description" role="tabpanel">
<!-- Полное описание (textarea) -->
<!-- IF {MARKET_XTRA_FULL_DESCRIPTION} -->
<h5>{MARKET_XTRA_FULL_DESCRIPTION_TITLE}</h5>
<div>{MARKET_XTRA_FULL_DESCRIPTION}</div>
<!-- ELSE -->
<p>Описание отсутствует.</p>
<!-- ENDIF -->
</div>
<!-- ========== Вкладка Габариты и геометрия ========== -->
<div class="tab-pane fade" id="dimensions" role="tabpanel">
<!-- Габариты (textarea) – можно вывести одной строкой или таблицей -->
<!-- IF {MARKET_XTRA_DIMENSIONS} -->
<div>{MARKET_XTRA_DIMENSIONS}</div>
<!-- ELSE -->
<p>Габариты не указаны.</p>
<!-- ENDIF -->
</div>
<!-- ========== Вкладка Особенности ========== -->
<div class="tab-pane fade" id="features" role="tabpanel">
<div class="row">
<!-- Комплектация (textarea) -->
<!-- IF {MARKET_XTRA_EQUIPMENT} -->
<div class="col-md-6 mb-3">
<h5>{MARKET_XTRA_EQUIPMENT_TITLE}</h5>
<div>{MARKET_XTRA_EQUIPMENT}</div>
</div>
<!-- ENDIF -->
<!-- Инструменты для сборки (textarea) -->
<!-- IF {MARKET_XTRA_TOOLS_ASSEMBLY} -->
<div class="col-md-6 mb-3">
<h5>{MARKET_XTRA_TOOLS_ASSEMBLY_TITLE}</h5>
<div>{MARKET_XTRA_TOOLS_ASSEMBLY}</div>
</div>
<!-- ENDIF -->
<!-- Правила обкатки (textarea) -->
<!-- IF {MARKET_XTRA_RUN_IN_RULES} -->
<div class="col-md-6 mb-3">
<h5>{MARKET_XTRA_RUN_IN_RULES_TITLE}</h5>
<div>{MARKET_XTRA_RUN_IN_RULES}</div>
</div>
<!-- ENDIF -->
<!-- Уход за аккумулятором (textarea) -->
<!-- IF {MARKET_XTRA_BATTERY_CARE} -->
<div class="col-md-6 mb-3">
<h5>{MARKET_XTRA_BATTERY_CARE_TITLE}</h5>
<div>{MARKET_XTRA_BATTERY_CARE}</div>
</div>
<!-- ENDIF -->
</div>
</div>
<!-- ========== Вкладка FAQ ========== -->
<div class="tab-pane fade" id="faq" role="tabpanel">
<div class="accordion" id="faqAccordion">
<!-- Вопрос 1 (input + textarea) -->
<!-- IF {MARKET_XTRA_FAQ_ITEM1_Q} AND {MARKET_XTRA_FAQ_ITEM1_A} -->
<div class="accordion-item">
<h2 class="accordion-header" id="faqHeading1">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#faqCollapse1" aria-expanded="true">
{MARKET_XTRA_FAQ_ITEM1_Q}
</button>
</h2>
<div id="faqCollapse1" class="accordion-collapse collapse show" data-bs-parent="#faqAccordion">
<div class="accordion-body">
{MARKET_XTRA_FAQ_ITEM1_A}
</div>
</div>
</div>
<!-- ENDIF -->
<!-- Вопрос 2 (аналогично) -->
<!-- IF {MARKET_XTRA_FAQ_ITEM2_Q} AND {MARKET_XTRA_FAQ_ITEM2_A} -->
<div class="accordion-item">
<h2 class="accordion-header" id="faqHeading2">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#faqCollapse2">
{MARKET_XTRA_FAQ_ITEM2_Q}
</button>
</h2>
<div id="faqCollapse2" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">
{MARKET_XTRA_FAQ_ITEM2_A}
</div>
</div>
</div>
<!-- ENDIF -->
<!-- Вопрос 3 -->
<!-- IF {MARKET_XTRA_FAQ_ITEM3_Q} AND {MARKET_XTRA_FAQ_ITEM3_A} -->
<div class="accordion-item">
<h2 class="accordion-header" id="faqHeading3">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#faqCollapse3">
{MARKET_XTRA_FAQ_ITEM3_Q}
</button>
</h2>
<div id="faqCollapse3" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">
{MARKET_XTRA_FAQ_ITEM3_A}
</div>
</div>
</div>
<!-- ENDIF -->
</div>
</div>
<!-- ========== Вкладка Доставка и оплата ========== -->
<div class="tab-pane fade" id="delivery" role="tabpanel">
<!-- Доставка (textarea) -->
<!-- IF {MARKET_XTRA_DELIVERY_INFO} -->
<h5>Доставка</h5>
<div>{MARKET_XTRA_DELIVERY_INFO}</div>
<!-- ENDIF -->
<!-- Оплата (textarea) -->
<!-- IF {MARKET_XTRA_PAYMENT_INFO} -->
<h5>Оплата</h5>
<div>{MARKET_XTRA_PAYMENT_INFO}</div>
<!-- ENDIF -->
</div>
<!-- ========== Вкладка Гарантия и сервис ========== -->
<div class="tab-pane fade" id="service" role="tabpanel">
<!-- Полная гарантия (input/textarea) -->
<!-- IF {MARKET_XTRA_WARRANTY_FULL} -->
<h5>Гарантийные обязательства</h5>
<p>{MARKET_XTRA_WARRANTY_FULL}</p>
<!-- ENDIF -->
<!-- Сервис (textarea) -->
<!-- IF {MARKET_XTRA_SERVICE_INFO} -->
<h5>Сервисное обслуживание</h5>
<div>{MARKET_XTRA_SERVICE_INFO}</div>
<!-- ENDIF -->
</div>
</div>
</div>
</div>
</div>
<!-- ENDIF --> <!-- конец проверки активности плагина -->
Русский текст внутри примера для наглядности, - в реальности же использовать строки локализации темы/плагина/модуля