Экстраполя в шаблонах в модуле "Page" Cotonti

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

В коде Cotonti в модуле "Page" для добавления страницы есть участок, который обрабатывает дополнительные поля (extrafields) для страниц. Этот код отвечает за генерацию HTML-разметки для дополнительных полей в форме добавления страницы и их отображение в шаблоне. Давайте разберем, как этот код используется в шаблонах, и приведем примеры.

Разбор кода для дополнительных полей

if (!empty(Cot::$extrafields[Cot::$db->pages])) {
    foreach (Cot::$extrafields[Cot::$db->pages] as $exfld) {
        $uname = strtoupper($exfld['field_name']);
        $data = isset($rpage['page_' . $exfld['field_name']]) ? $rpage['page_' . $exfld['field_name']] : null;
        $exfld_val = cot_build_extrafields('rpage' . $exfld['field_name'], $exfld, $data);
        $exfld_title = cot_extrafield_title($exfld, 'page_');

        $t->assign([
            'PAGEADD_FORM_' . $uname => $exfld_val,
            'PAGEADD_FORM_' . $uname . '_TITLE' => $exfld_title,
            'PAGEADD_FORM_EXTRAFLD' => $exfld_val,
            'PAGEADD_FORM_EXTRAFLD_TITLE' => $exfld_title,
        ]);
        $t->parse('MAIN.EXTRAFLD');
    }
}

 

Этот код:

  1. Проверяет, есть ли дополнительные поля для таблицы страниц (Cot::$extrafields[Cot::$db->pages]).
  2. Для каждого дополнительного поля:
    • Формирует имя поля в верхнем регистре ($uname).
    • Получает значение поля из массива $rpage (если оно существует).
    • Использует функцию cot_build_extrafields для создания HTML-кода поля ввода (например, текстовое поле, выпадающий список и т.д.).
    • Формирует заголовок поля с помощью cot_extrafield_title.
    • Назначает теги для шаблона с префиксами PAGEADD_FORM_ для конкретного поля и общие теги PAGEADD_FORM_EXTRAFLD, PAGEADD_FORM_EXTRAFLD_TITLE.
    • Вызывает $t->parse('MAIN.EXTRAFLD') для обработки блока MAIN.EXTRAFLD в шаблоне.

 

 

Использование в шаблонах

В Cotonti шаблоны используют XTemplate, где теги, назначенные в коде через $t->assign, доступны для отображения. Для дополнительных полей в форме добавления страницы обычно используется файл шаблона, например, page.add.tpl (или кастомный шаблон, указанный в $mskin).

Основные теги, доступные в шаблоне:

  1. PAGEADD_FORM_{FIELD_NAME} — HTML-код поля ввода для конкретного дополнительного поля (где {FIELD_NAME} — имя поля в верхнем регистре).
  2. PAGEADD_FORM_{FIELD_NAME}_TITLE — Заголовок (название) дополнительного поля.
  3. PAGEADD_FORM_EXTRAFLD — HTML-код текущего поля ввода (для использования в цикле).
  4. PAGEADD_FORM_EXTRAFLD_TITLE — Заголовок текущего поля (для использования в цикле).

Блок MAIN.EXTRAFLD используется для циклического вывода всех дополнительных полей.

Пример шаблона (page.add.tpl)

Пример 1: Вывод всех дополнительных полей в цикле

Предположим, у вас есть два дополнительных поля: color (цвет) и priority (приоритет). В шаблоне можно организовать вывод всех дополнительных полей через блок MAIN.EXTRAFLD:

<!-- BEGIN: MAIN -->
<form name="addpage" action="{PAGEADD_FORM_SEND}" method="post">
    <h2>{PAGEADD_PAGETITLE}</h2>
    <div>{PAGEADD_BREADCRUMBS}</div>
    <div>{PAGEADD_SUBTITLE}</div>

    <!-- Основные поля формы -->
    <div>
        <label>{PHP.L.Category}</label>
        {PAGEADD_FORM_CAT}
    </div>
    <div>
        <label>{PHP.L.Title}</label>
        {PAGEADD_FORM_TITLE}
    </div>
    <div>
        <label>{PHP.L.Description}</label>
        {PAGEADD_FORM_DESCRIPTION}
    </div>
    <div>
        <label>{PHP.L.Text}</label>
        {PAGEADD_FORM_TEXT}
    </div>

    <!-- Дополнительные поля -->
    <!-- BEGIN: EXTRAFLD -->
    <div>
        <label>{PAGEADD_FORM_EXTRAFLD_TITLE}</label>
        {PAGEADD_FORM_EXTRAFLD}
    </div>
    <!-- END: EXTRAFLD -->

    <div>
        <button type="submit">{PHP.L.Submit}</button>
    </div>
</form>
<!-- END: MAIN -->

Результат:

  • Для каждого дополнительного поля (например, color и priority) будет сгенерирован блок <div> с заголовком поля (PAGEADD_FORM_EXTRAFLD_TITLE) и его HTML-кодом (PAGEADD_FORM_EXTRAFLD).
  • Если поля color и priority — это, например, текстовое поле и выпадающий список, они будут отображены соответствующим образом.

Пример 2: Вывод конкретного дополнительного поля

Если вы хотите вывести только одно конкретное поле, например color, можно использовать тег PAGEADD_FORM_COLOR:

<!-- BEGIN: MAIN -->
<form name="addpage" action="{PAGEADD_FORM_SEND}" method="post">
    <h2>{PAGEADD_PAGETITLE}</h2>
    <div>{PAGEADD_BREADCRUMBS}</div>
    <div>{PAGEADD_SUBTITLE}</div>

    <!-- Основные поля формы -->
    <div>
        <label>{PHP.L.Category}</label>
        {PAGEADD_FORM_CAT}
    </div>
    <div>
        <label>{PHP.L.Title}</label>
        {PAGEADD_FORM_TITLE}
    </div>

    <!-- Конкретное дополнительное поле -->
    <div>
        <label>{PAGEADD_FORM_COLOR_TITLE}</label>
        {PAGEADD_FORM_COLOR}
    </div>

    <div>
        <button type="submit">{PHP.L.Submit}</button>
    </div>
</form>
<!-- END: MAIN -->

Результат:

  • В форме будет отображено только поле color с его заголовком (например, "Цвет") и соответствующим HTML-элементом (например, <input type="text" name="rpcolor" ...>).

Пример 3: Комбинированный подход

Если вы хотите вывести одно конкретное поле явно, а остальные в цикле, можно сделать так:

<!-- BEGIN: MAIN -->
<form name="addpage" action="{PAGEADD_FORM_SEND}" method="post">
    <h2>{PAGEADD_PAGETITLE}</h2>
    <div>{PAGEADD_BREADCRUMBS}</div>
    <div>{PAGEADD_SUBTITLE}</div>

    <!-- Основные поля формы -->
    <div>
        <label>{PHP.L.Category}</label>
        {PAGEADD_FORM_CAT}
    </div>
    <div>
        <label>{PHP.L.Title}</label>
        {PAGEADD_FORM_TITLE}
    </div>

    <!-- Конкретное дополнительное поле -->
    <div>
        <label>{PAGEADD_FORM_COLOR_TITLE}</label>
        {PAGEADD_FORM_COLOR}
    </div>

    <!-- Остальные дополнительные поля -->
    <!-- BEGIN: EXTRAFLD -->
    <!-- IF {PAGEADD_FORM_EXTRAFLD_TITLE} != {PAGEADD_FORM_COLOR_TITLE} -->
    <div>
        <label>{PAGEADD_FORM_EXTRAFLD_TITLE}</label>
        {PAGEADD_FORM_EXTRAFLD}
    </div>
    <!-- ENDIF -->
    <!-- END: EXTRAFLD -->

    <div>
        <button type="submit">{PHP.L.Submit}</button>
    </div>
</form>
<!-- END: MAIN -->

Результат:

  • Поле color будет выведено отдельно с использованием тегов PAGEADD_FORM_COLOR и PAGEADD_FORM_COLOR_TITLE.
  • Все остальные дополнительные поля (например, priority) будут выведены в цикле через блок MAIN.EXTRAFLD, но поле color будет исключено из цикла благодаря условию <!-- IF {PAGEADD_FORM_EXTRAFLD_TITLE} != {PAGEADD_FORM_COLOR_TITLE} -->.

Важные замечания

  1. Имена полей в верхнем регистре: В шаблоне имена дополнительных полей используются в верхнем регистре (например, PAGEADD_FORM_COLOR для поля color).
  2. Гибкость шаблона: Использование блока MAIN.EXTRAFLD позволяет автоматически обрабатывать любое количество дополнительных полей без необходимости изменять шаблон при добавлении новых полей.
  3. Типы полей: Функция cot_build_extrafields автоматически генерирует правильный HTML-код в зависимости от типа дополнительного поля (текстовое поле, выпадающий список, чекбокс и т.д.).
  4. Локализация заголовков: Заголовки полей (PAGEADD_FORM_{FIELD_NAME}_TITLE) берутся из настроек дополнительных полей, где можно указать локализованные названия.

Как проверить дополнительные поля

Чтобы узнать, какие дополнительные поля доступны:

  1. Проверьте настройки Cotonti в админ-панели (раздел "Structure" → "Pages" → "Extra fields").
  2. Каждое поле будет иметь имя (например, color, priority), которое в шаблоне преобразуется в PAGEADD_FORM_COLOR, PAGEADD_FORM_PRIORITY и т.д.

Итог

Код обработки дополнительных полей в Cotonti позволяет гибко отображать их в шаблонах через:

  • Циклический вывод всех полей с использованием блока MAIN.EXTRAFLD.
  • Индивидуальный вывод конкретных полей с использованием тегов PAGEADD_FORM_{FIELD_NAME} и PAGEADD_FORM_{FIELD_NAME}_TITLE.
  • Комбинированный подход для большей гибкости.

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

 

ПС. HTML-код поля, который помогает избавиться от автозаполнения в Chrome

<input type="text" class="form-control" name="{$name}" value="{$value}"  maxlength="255" autocomplete="off" readonly onfocus="this.removeAttribute('readonly');" />

 

 

 

 

4 minutes read Sodium Carbonate

Comments (0)

No comments yet
Only registered users can post new comments

Content author

webitproff

Offline

Sodium Carbonate

Last logged: 2026-09-01 22:41

About me briefly
Support and development of web projects on the CMF Cotonti: private messengers via the website, open and closed small social networks, trading platforms and marketplaces, freelance and services exchange portal, catalogs of goods from wholesale suppliers, dropshipping platforms, online stores, and much more.
View developments and download
Public portfolio of my works and developments
Telegram for messages
@webitproff
Telegram channel
@s/aBuyFILE
  • Page published: 2025-05-21 06:01
  • Last update: 2025-07-14 15:40

Similar pages

Экстраполя Cotonti: тип данных datetime — Дата и время
1 Экстраполя Cotonti: тип данных datetime — Дата и время Оглавление 1. Общие сведения 2. Хранение значения в базе
Локализация (перевод) названия и значений экстраполя
2 подробная пошаговая инструкция для новичков: как создать экстраполе типа select (выпадающий список) с названием «статус
Проверка прав пользователей "cot_auth()" в шаблонах Cotonti
3 Примеры использования cot_auth() в шаблонах Cotonti с разными масками прав (R, W, A, etc.) и с категориями тоже. Как
Список тегов и блоков в шаблонах Cotonti
4 Список доступных тегов и блоков в шаблоне на странице модуля или плагина. Документация, что происходит и как это
Вывод дат в шаблонах Cotonti (Форматы и примеры в тегах)
5 Вывод дат в шаблонах CotontiНастройка формата отображения: локально и глобальноВ системе Cotonti все даты внутри базы