Forum categories

Extrafields Market Custom i18n для модуля “Market” плагин Cotonti

Отдельный плагин, - а значит отдельная тема поддержки.

webitproff
webitproff • 2026-07-19 13:00 #568

Здесь представлен готовый пример шаблона 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 -->  <!-- конец проверки активности плагина -->

 

Русский текст внутри примера для наглядности, - в реальности же использовать строки локализации темы/плагина/модуля

 

🗿

🧙‍♂️ Well met, good traveler! Fate has guided your steps to our humble realm. Here, wise sages and masters of the coding craft ⚒️📜 gather to unravel the mysteries of the code ✨⚙️, share their knowledge, and add new chapters to our chronicles.
⬅️ To the left lie ancient scrolls 📚 filled with forgotten wisdom. ⬆️ Straight ahead, friendly folk offer counsel 💬 to those in need. ➡️ To the right, you may become a chronicler ✍️ yourself, sharing your craft and leaving words of wisdom for those yet to come.
📝 Delay no longer—tell us the name by which you are known, complete the rite of registration 🛡️, and join our fellowship!
🏰 Our brotherhood holds no secret initiation, yet many halls remain closed to wandering guests, for some knowledge 💎 is reserved for those who choose to walk this path beside us.