Extrafields Market Custom
Назначение этого плагина для Cotonti: добавляет экстраполя для модуля «Market PRO v.5» в собственную таблицу базы данных и позволяет их выводить, там, где этого требуется для решения задачи
Extrafields Market Custom — расширение для Market PRO
Основная информация о плагине
- Код: xtradbrowmarket
- Назначение: добавляет экстраполя для модуля «Market PRO v.5» в собственную таблицу базы данных
- Версия: 2.7.9
- Дата: 26 апреля 2026
- Автор: webitproff
- Copyright: © 2026 webitproff
- Примечания: Новичкам рекомендуется изучить раздел форума об API ExtraFields. (код в этом файле). После установки плагина сразу откройте управление его экстраполями.
- Зависимости: Market PRO v.5+ от webitproff
permanent link to the current plugin source code on GitHub
Структура плагина (хуки)
| # | Part | File | Hooks |
| 1 | extrafields | xtradbrowmarket.extrafields.php | admin.extrafields.first |
| 2 | header.tags | xtradbrowmarket.header.tags.php | header.tags |
| 3 | market.edit.delete.done | xtradbrowmarket.market.edit.delete.done.php | market.edit.delete.done |
| 4 | market.edit.tags | xtradbrowmarket.market.edit.tags.php | market.edit.tags |
| 5 | market.edit.update.done | xtradbrowmarket.market.edit.update.done.php | market.edit.update.done |
| 6 | market.tags | xtradbrowmarket.market.tags.php | market.tags |
| 7 | markettags | xtradbrowmarket.markettags.php | markettags.main |
Пошаговая установка и использование
- Скачать плагин
Папку
xtradbrowmarketзакачать в папку с плагинами, то есть файлxtradbrowmarket.setup.phpдолжен лежать в таком расположении:/plugins/xtradbrowmarket/xtradbrowmarket.setup.phpПосле установки, если ошибок не было, в примечании сразу ссылка
После установки плагина, открыть экстраполя плагина Custom Extrafields Market .Или идем по пути
Управление сайтом Прочее Экстраполя Таблица cot_xtradbrowmarket - Custom Extrafields Marketссылка в браузер
https://cotonti.local/admin/extrafields?n=cot_xtradbrowmarketЭто и есть и будет вся святая святых вашего плагина, - 15 предустановленных демонстрационных экстраполей дадут вам полное представление, какой тип экстраполя, для какого сценария и применения.
Открываем шаблон редактирования товара, - он же
market.edit.tpl. Его правильна "геолокация":/themes/index36/modules/market/market.edit.tplи перед радио-кнопками "Да"/"Нет" на удаление товара добавляем код:
<!-- IF {PHP|cot_plugin_active('xtradbrowmarket')} --> <div class="card mb-4"> <div class="card-header"> <h4>{PHP.L.xtradbrowmarket_edittpl_dynamic_title}</h4> </div> <div class="card-body"> <!-- BEGIN: XTRA_EXTRAFLD --> <div class="form-group mb-3"> <label>{MARKETEDIT_FORM_XTRA_EXTRAFLD_TITLE}</label> {MARKETEDIT_FORM_XTRA_EXTRAFLD} </div> <!-- END: XTRA_EXTRAFLD --> </div> </div> <!-- ENDIF -->Кнопкой "Таб" прогнали его вправо. сохранили файл. Затем открываем любой товар и редактируем, например
https://cotonti.local/market/1165?m=editКак и говорилось ранее, теперь перед радио-кнопками "Да"/"Нет" на удаление товара, вы должны увидеть все поля (а сразу после установки их 15). Теперь, заполните все поля от фонаря, но не бойтесь полагаться на интуицую. Сохраните карточку товара и сразу вернитесь, что бы проверить, что сохранилось в ваших полях. Если все "ок" - идем править файл карточки товара.
Шаблон: market.tpl
Открываем шаблон карточки товара (его полная детальная страница), - он жеmarket.tpl. Его правильна "геолокация":/themes/index36/modules/market/market.tpl /themes/index36/modules/market/market.category-name.tplНаходим заголовок товара:
<h1 class="h4 mb-3"> <!-- IF {PHP.item.fieldmrkt_product_status} == 'instock' --> <span class="px-2 fw-bold bg-success text-white rounded-2">{MARKET_PRODUCT_STATUS}</span> <!-- ENDIF --> <!-- IF {PHP.item.fieldmrkt_product_status} == 'onorder' --> <span class="fw-bold text-warning-hot">{MARKET_PRODUCT_STATUS}</span> <!-- ENDIF --> {MARKET_TITLE} </h1>и сразу после него, или где вам угодно, вставляем код:
<!-- IF {PHP.usr.maingrp} == 5 --> <!-- IF {PHP|cot_plugin_active('xtradbrowmarket')} --> <div class="card mb-4"> <div class="card-header"> <h4 class="mb-3">{PHP.L.xtradbrowmarket_pagetpl_custom_title}</h4> <small class="mb-3">{PHP.L.xtradbrowmarket_pagetpl_custom_desc}</small> </div> <div class="card-body"> <!-- event_name (input) --> <!-- IF {MARKET_XTRA_EVENT_NAME} --> <div class="mb-3"> <i class="fa-regular fa-calendar-check me-2 text-primary"></i> <strong>{MARKET_XTRA_EVENT_NAME_TITLE}:</strong> <span class="fw-semibold">{MARKET_XTRA_EVENT_NAME}</span> </div> <!-- ENDIF --> <!-- event_description (textarea) с очисткой тегов и обрезкой --> <!-- IF {MARKET_XTRA_EVENT_DESCRIPTION} --> <div class="mb-3 p-3 bg-light rounded"> <h6 class="fw-bold"><i class="fa-solid fa-align-left me-1"></i> {MARKET_XTRA_EVENT_DESCRIPTION_TITLE}</h6> <p class="mb-0"> {MARKET_XTRA_EVENT_DESCRIPTION_VALUE|strip_tags($this)|mb_substr($this, 0, 150, 'UTF-8')}... </p> </div> <!-- ENDIF --> <!-- event_start (datetime) – форматирование через cot_date --> <!-- IF {MARKET_XTRA_EVENT_START} --> <div class="mb-3"> <i class="fa-regular fa-clock me-2 text-warning"></i> <strong>{MARKET_XTRA_EVENT_START_TITLE}:</strong> <span class="badge bg-warning text-dark"> {MARKET_XTRA_EVENT_START_VALUE|cot_date('d.m.Y H:i', $this)} </span> </div> <!-- ENDIF --> <!-- event_ticketprice (double) --> <!-- IF {MARKET_XTRA_EVENT_TICKETPRICE} --> <div class="mb-3"> <i class="fa-solid fa-dollar-sign me-2 text-success"></i> <strong>{MARKET_XTRA_EVENT_TICKETPRICE_TITLE}:</strong> <!-- IF {MARKET_XTRA_EVENT_TICKETPRICE_VALUE} == '0' --> <span class="badge bg-success">Бесплатно</span> <!-- ELSE --> <span class="fs-3 fw-bold"> {MARKET_XTRA_EVENT_TICKETPRICE_VALUE} $ </span> <!-- ENDIF --> </div> <!-- ENDIF --> <!-- event_seson (select) – вложенные IF вместо ELSEIF --> <!-- IF {MARKET_XTRA_EVENT_SESON} --> <div class="mb-3"> <i class="fa-solid fa-cloud-sun me-2 text-success"></i> <strong>{MARKET_XTRA_EVENT_SESON_TITLE}:</strong> <!-- IF {MARKET_XTRA_EVENT_SESON_VALUE} == 'winter' --> <span>❄️ Зима</span> <!-- ELSE --> <!-- IF {MARKET_XTRA_EVENT_SESON_VALUE} == 'spring' --> <span>🌱 Весна</span> <!-- ELSE --> <!-- IF {MARKET_XTRA_EVENT_SESON_VALUE} == 'summer' --> <span>☀️ Лето</span> <!-- ELSE --> <!-- IF {MARKET_XTRA_EVENT_SESON_VALUE} == 'autumn' --> <span>🍂 Осень</span> <!-- ELSE --> <span class="text-capitalize">{MARKET_XTRA_EVENT_SESON}</span> <!-- ENDIF --> <!-- ENDIF --> <!-- ENDIF --> <!-- ENDIF --> </div> <!-- ENDIF --> <!-- demo_int (inputint) --> <!-- IF {MARKET_XTRA_DEMO_INT} --> <div class="mb-3"> <span class="fa-stack fa-sm me-2"> <i class="fa-solid fa-circle fa-stack-2x text-secondary"></i> <i class="fa-solid fa-hashtag fa-stack-1x fa-inverse"></i> </span> <strong>{MARKET_XTRA_DEMO_INT_TITLE}:</strong> <span class="badge bg-secondary">{MARKET_XTRA_DEMO_INT}</span> </div> <!-- ENDIF --> <!-- demo_double (double) --> <!-- IF {MARKET_XTRA_DEMO_DOUBLE} --> <div class="mb-3"> <i class="fa-solid fa-dollar-sign me-2 text-success"></i> <strong>{MARKET_XTRA_DEMO_DOUBLE_TITLE}:</strong> <!-- IF {MARKET_XTRA_DEMO_DOUBLE_VALUE} == '0.00' --> <span class="text-muted">не указано</span> <!-- ELSE --> {MARKET_XTRA_DEMO_DOUBLE_VALUE} <!-- ENDIF --> </div> <!-- ENDIF --> <!-- demo_select (select) --> <!-- IF {MARKET_XTRA_DEMO_SELECT} --> <div class="mb-3"> <i class="fa-solid fa-list me-2 text-info"></i> <strong>{MARKET_XTRA_DEMO_SELECT_TITLE}:</strong> <span class="badge bg-info text-dark">{MARKET_XTRA_DEMO_SELECT}</span> </div> <!-- ENDIF --> <!-- demo_radio (radio) – проверка значения внутри IF --> <!-- IF {MARKET_XTRA_DEMO_RADIO} --> <div class="mb-3"> <i class="fa-solid fa-circle-dot me-2 text-secondary"></i> <strong>{MARKET_XTRA_DEMO_RADIO_TITLE}:</strong> <!-- IF {MARKET_XTRA_DEMO_RADIO_VALUE} == 'Yes' --> <span class="text-success fw-bold">Да</span> <!-- ELSE --> <span class="text-danger fw-bold">Нет</span> <!-- ENDIF --> </div> <!-- ENDIF --> <!-- demo_datetime (datetime) --> <!-- IF {MARKET_XTRA_DEMO_DATETIME} --> <div class="mb-3"> <i class="fa-regular fa-calendar me-2 text-danger"></i> <strong>{MARKET_XTRA_DEMO_DATETIME_TITLE}:</strong> <span class="text-muted"> {MARKET_XTRA_DEMO_DATETIME_VALUE|cot_date('d.m.Y H:i', $this)} </span> </div> <!-- ENDIF --> <!-- demo_file (file) --> <!-- IF {MARKET_XTRA_DEMO_FILE} --> <div class="mb-3"> <i class="fa-solid fa-paperclip me-2"></i> <strong>{MARKET_XTRA_DEMO_FILE_TITLE}:</strong> <a href="{PHP.cfg.mainurl}/datas/exflds/xtradbrowmarket/{MARKET_XTRA_DEMO_FILE}" target="_blank"> {MARKET_XTRA_DEMO_FILE} </a> </div> <!-- ENDIF --> <!-- demo_country (country) --> <!-- IF {MARKET_XTRA_DEMO_COUNTRY} --> <div class="mb-3"> <img src="images/flags/{MARKET_XTRA_DEMO_COUNTRY_VALUE}.svg" style="width:24px;height:auto;" class="me-2" alt=""> <strong>{MARKET_XTRA_DEMO_COUNTRY_TITLE}:</strong> <span>{MARKET_XTRA_DEMO_COUNTRY}</span> <span>{MARKET_XTRA_DEMO_COUNTRY_NAME}</span> </div> <!-- ENDIF --> <!-- demo_range (range) – прогресс-бар с реальным значением --> <!-- IF {MARKET_XTRA_DEMO_RANGE} --> <div class="mb-3"> <i class="fa-solid fa-sliders me-2" style="color:#6f42c1;"></i> <strong>{MARKET_XTRA_DEMO_RANGE_TITLE}:</strong> <div class="progress mt-1" style="height:20px;"> <div class="progress-bar bg-info" role="progressbar" style="width:{MARKET_XTRA_DEMO_RANGE_VALUE}%;" aria-valuenow="{MARKET_XTRA_DEMO_RANGE_VALUE}" aria-valuemin="0" aria-valuemax="100"> {MARKET_XTRA_DEMO_RANGE_VALUE}% </div> </div> </div> <!-- ENDIF --> <!-- demo_checklistbox (checklistbox) --> <!-- IF {MARKET_XTRA_DEMO_CHECKLISTBOX} --> <div class="mb-3"> <i class="fa-solid fa-check-double me-2 text-primary"></i> <strong>{MARKET_XTRA_DEMO_CHECKLISTBOX_TITLE}:</strong> <span class="text-muted">{MARKET_XTRA_DEMO_CHECKLISTBOX}</span> </div> <!-- ENDIF --> </div> </div> <!-- ENDIF --> <!-- ENDIF -->Обратите внимание, здесь, я проверку функции активности плагина помещаю в "рамку" условия,
<!-- IF {PHP.usr.maingrp} == 5 --> <!-- IF {PHP|cot_plugin_active('xtradbrowmarket')} --> <div class="card mb-4"> ... bla-bla-bla .... </div> <!-- ENDIF --> <!-- ENDIF -->- если главный админ, то только тогда и покажем то, что внутри блока кода плагина, если сам плагин активен. Это нужно в основном только тогда, когда вы что-то "пихаете" на продакшен, - (работающий сайт). Когда вы уже вы это бревно "оттешите" под себя, - затем спокойно снимаем рамку
<!-- IF {PHP.usr.maingrp} == 5 -->- эту строку убираем, которой мы объявляем условие (показать админу) тут внутри код весь остается<!-- ENDIF -->- эту строку, которой мы закрываем условие (показать админу)Шаблон: market.list.tpl
Открываем шаблон списка товаров в категории, категориях или вообще без них, - он жеmarket.list.tpl. Его правильна "геолокация":/themes/index36/modules/market/market.list.tpl /themes/index36/modules/market/market.list.category-name.tplСкролим к блоку цикла товаров
<div class="row row-cols-1 row-cols-xl-3 row-cols-lg-2 row-cols-md-1 g-3 g-lg-4" id="market-items-container"> <!-- BEGIN: LIST_ROW --> <div class="col"> ... </div> <!-- END: LIST_ROW --> </div>И к примеру, сразу после ссылки на карточку товара
<h5 class="card-title mb-2"> <a href="{LIST_ROW_URL}" class="text-decoration-none">{LIST_ROW_TITLE}</a> </h5>добавляем код:
<!-- IF {PHP|cot_plugin_active('xtradbrowmarket')} --> <!-- тупо к примеру - страна производства --> <!-- IF {LIST_ROW_XTRA_DEMO_COUNTRY} --> <div class="mb-3"> <img src="images/flags/{LIST_ROW_XTRA_DEMO_COUNTRY_VALUE}.svg" style="width:24px;height:auto;" class="me-2" alt=""> <strong>{LIST_ROW_XTRA_DEMO_COUNTRY_TITLE}:</strong> <span>{LIST_ROW_XTRA_DEMO_COUNTRY}</span> <span>{LIST_ROW_XTRA_DEMO_COUNTRY_NAME}</span> </div> <!-- ENDIF --> <!-- тупо к примеру - дата поступления в продажу --> <!-- IF {LIST_ROW_XTRA_EVENT_START} --> <div class="mb-3"> <strong>{LIST_ROW_XTRA_EVENT_START_TITLE}:</strong> <span class="text-primary"><i class="fa-regular fa-alarm-clock fa-xl"></i></span> <span class="ms-2 fw-bold text-danger">{LIST_ROW_XTRA_EVENT_START}</span> </div> <!-- ENDIF --> <!-- ENDIF -->Сохранили файл, идем в список товаров и видим что вышло (смотрите скрины).
Вывод собственных экстраполей в header.tpl
Его правильна "геолокация":
/themes/index36/header.tplЦели такой реализации могут быть вообще самыми разными, главное то, что мы имеем гибкий, достаточно простой, что бы решать специфические задачи, например сообщить поисковику, что-то индивидуальное о каждом товаре на нашем сайте.
В идеале, конечно, желательно иметь, например для товаров свою "шапку сайта", - пользовательский шаблон header.market.tpl или для страницы товара каждой или нужной категории, - header.market.notebook.tpl, header.market.mobile-phones.tpl и т.д. В Cotonti у вас вообще может быть вот так:
/themes/index36/header.tpl - общая шапка
/themes/index36/header.list.tpl - шапка для списка статей
/themes/index36/header.page.news.tpl - шапка для полной страницы статьи из категории "новости"
/themes/index36/header.market.tpl - общая шапка модуля "маркет"
/themes/index36/header.market.notebook.tpl - шапка карточки товара в категории "Ноувбуки"Разумеется, это настраивается отдельно и это отдельная тема для разговора, но если вы спросите, - "... и зачем же так заморачиваться? чем проще, тем лучше!"
И вы будете очень правы, но очень "близоруко"!!! Для "местного" значения, - правы на все 100 пудов, а для областного или общенационально, - ни на пинту, даже дерьмового пива! Почему?
Лирическое отступление о дифференциации
На операционном уровне, - конечно, я согласен, чем проще мы сделаем наш header.market.notebook.tpl под именно категорию товаров - тем лучше, а вот сделать простым и универсальным header.tpl "под все задачи" у вас не получится. Один уже пробовал, я про Генри Форда, с его известной массовой моделью "Т". Этот автомобиль был прост, надёжен и неоспоримо доминировал, но не так долго и только в сегменте доступных автомобилей. Модель "Т" предназначалась только под массу, что-то очень количественное и очень стандартизированное. Но успешный бизнесмен, предпримчивый гангстер или властный политик, увлеченный своей важностью никак не стремился ассоциировать себя "потужномошьного" с массой и чем-то стандартным, заурядным! Такой успешный человек не нуждался просто в автомобиле как в средстве передвижения, ему нужен был автомобиль, который подчеркнет его достижения, статус, успешность, а здесь как раз владение простым и дешевым "Т" наносило ущерб имиджу, понижая успешность владельца или не соответствовало техническим, уже стандартным требованиям, - проходимость, подвеска и т.д... Поэтому с появлением "Chevrolet Superior", "Cadillac Type 51", "Cadillac V-63" много людей стали продавать свои "Т" и покупать "то, что ему соответствует". Вот так именно рухнуло доминирование Форда на рынке автомобилей.
1926 год. Три модели, три цены:
Ford Model T (Runabout): $260
Chevrolet Superior Series V (Roadster): $510
Cadillac V-63 (Touring): $3085
Еще до появления концепции "Позиционирования" рынок кричал, всем известными словами Джека Траута, сказанными в 1992 году, - «Дифференцируйся или умри» (Differentiate or Die). Вы не сможете, одну простую и обкатанную, до универсальности, модель управления одним успешным городом применить на каждый город или поселок в области, и тем более на каждый город в государстве. Мы же не построим в каждом городе космодром, институт генетики, коровник и фабрику кондитерских изделий? Вот поэтому, упрощать нужно уже на локальном, местном уровне и в рамках общей стратегии.
вот же меня прорвало.
вернемся к баранам с больными на голову со своей простотой и аллергией на всё цветное. Думаю, я достаточно наглядно показал, почему на весь сайт один супер-пипец-простой header.tpl никак не решит мелких задач для достижения стратегических целей, и разумеется, я очень надеюсь, что если вы владелец сайта, то такие цели у вас точно есть, и например:
- за год переоринтерировать контент на конкретную аудиторию в рамках физически осязаемой географии;
- за полгода очистить статьи из раздела "блог", от мусора в разметке кода, который я по неопытности и тупости накопировал с чужих сайтов;
- рядом с витриной товаров организовать и запустить в форсированном режиме форум, с поддержкой покупателей и пользователей, которые купили или могут купить в будущем товары в моем магазине, и т.д.
Вот здесь и потребуется, одна из изюминок Cotonti, - возможность дифференциации header.tpl под разные "области" и "города".
Вот кстати и пример того, что Cotonti, это вам ни какой-то там OpenCart или WordPress, который прост как модель "Т", - поставил в гараж и забыл, главное что есть машина )))). Но если вы активный разработчик, к вам часто сыпятся заказы, у вас часто будет на уме, - "***б*чий тарантас", - чтоб затюнить или апнуть, да еще и с хотелками заказчика, - тут "подвинул", - там "упало", а когда дело до сметы, - Заказчик в откровенном ужасе, - "так он же бесплатный"....
Практический пример для header.market.notebook.tpl
Снова отвлекся. открываем:
/themes/index36/header.market.notebook.tplвот он:
<!--
/********************************************************************************
* File: header.tpl
* Extension: Core'
* Description: HTML template for header.tpl.
* Compatibility: CMF/CMS Cotonti Siena v0.9.26[](https://github.com/Cotonti/Cotonti)
* Dependencies:
* Bootstrap 5.3.+[](https://getbootstrap.com/);
* Font Awesome Free 7.1[](https://fontawesome.com/)
* Theme: Index36
* Version: 1.0.2
* Created: 01 Feb 2026
* Updated: 22 Apr 2026
* Copyright (c) 2026 webitproff | https://github.com/webitproff
* Source: https://github.com/webitproff/index36-cotonti-theme
* Demo : https://freelance-script.abuyfile.com/
* Help and support: https://abuyfile.com/ru/forums/cotonti/original/skins/index36
* License: BSD (Free distribution with saving Copyright (c) 2026 webitproff)
********************************************************************************/
-->
<!-- BEGIN: HEADER -->
<!DOCTYPE html>
<!-- IF {HTML_LANG} -->
<html lang="{HTML_LANG}" data-bs-theme="light">
<!-- ELSE -->
<html lang="{PHP.usr.lang}" data-bs-theme="light">
<!-- ENDIF -->
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- IF {I18N_HEADER_META_TITLE} -->
<title>{I18N_HEADER_META_TITLE}</title>
<!-- ELSE -->
<title>{HEADER_TITLE}</title>
<!-- ENDIF -->
<!-- IF {I18N_HEADER_META_DESCRIPTION} -->
<meta name="description" content="{I18N_HEADER_META_DESCRIPTION}" />
<!-- ELSE -->
<!-- IF {HEADER_META_DESCRIPTION} -->
<meta name="description" content="{HEADER_META_DESCRIPTION}" />
<!-- ENDIF -->
<!-- ENDIF -->
<!-- IF {HEADER_BASEHREF} -->
{HEADER_BASEHREF}
<!-- ENDIF -->
<!-- IF {HEADER_CANONICAL_URL} -->
<link rel="canonical" href="{HEADER_CANONICAL_URL}" />
<!-- ENDIF -->
<!-- IF {ALTERNATE_TAGS} -->
{ALTERNATE_TAGS}
<!-- ENDIF -->
<link rel="shortcut icon" href="favicon.ico" />
<link rel="icon" href="{PHP.cfg.themes_dir}/{PHP.theme}/img/icon.webp" type="image/svg+xml">
<link rel="apple-touch-icon" href="apple-touch-icon.png" />
<!-- IF {PHP.out.meta} -->
{PHP.out.meta}
<!-- ENDIF -->
<script>
(function () {
const storedTheme = localStorage.getItem('theme');
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
const defaultTheme = storedTheme || (prefersDark ? 'dark' : 'light');
document.documentElement.setAttribute('data-bs-theme', defaultTheme);
})();
</script>
{HEADER_HEAD}
</head>
<body class="sidebar-closed">
<header class="navbar navbar-expand-lg shadow-sm fixed-top" style="background-color: var(--bs-header-bg);" data-bs-theme="inherit">
....
<div class="d-flex align-items-center gap-3 ms-auto">
<!-- BEGIN: I18N_LANG -->
<div class="btn-group">
<button type="button" class="dropdown-toggle btn nav-link d-flex align-items-center" data-bs-toggle="dropdown">
<i class="fa-solid fa-language me-2"></i>
<!-- IF {PHP.i18n_locale} == 'ru' -->RU<!-- ENDIF -->
<!-- IF {PHP.i18n_locale} == 'cn' -->CN<!-- ENDIF -->
<!-- IF {PHP.i18n_locale} == 'en' -->EN<!-- ENDIF -->
<!-- IF {PHP.i18n_locale} == 'ua' -->UA<!-- ENDIF -->
</button>
<ul class="dropdown-menu dropdown-menu-end">
<!-- BEGIN: I18N_LANG_ROW -->
<li><a class="dropdown-item" href="{I18N_LANG_ROW_URL}">{I18N_LANG_ROW_TITLE}</a></li>
<!-- END: I18N_LANG_ROW -->
</ul>
</div>
<!-- END: I18N_LANG -->
...
</header>
<aside class="main-sidebar">
...
</aside>
<div class="expanded-panels ps-container">
...
</div>
<main>
<!-- END: HEADER -->показываю рабочий пример именно вывода полей, а не смысловую нагрузку, которую они несут в примерах, а поэтому комбинировать можно как угодно: находим:
<title>{HEADER_TITLE}</title>меняем на
<title>{HEADER_TITLE} <!-- IF {MARKET_HEADER_XTRA_DEMO_COUNTRY} -->. {MARKET_HEADER_XTRA_DEMO_COUNTRY_NAME}<!-- ENDIF --></title>Это вместо
<title>Очень супер-пупер товар</title>выведет в браузер
<title>Очень супер-пупер товар. Китай</title>дальше, находим
<!-- IF {HEADER_META_DESCRIPTION} --><meta name="description" content="{HEADER_META_DESCRIPTION}<!-- ENDIF -->" />
<!-- ENDIF -->меняем на
<!-- IF {HEADER_META_DESCRIPTION} --><meta name="description" content="{HEADER_META_DESCRIPTION}<!-- IF {MARKET_HEADER_XTRA_EVENT_START} --> • {MARKET_HEADER_XTRA_EVENT_START_TITLE} {MARKET_HEADER_XTRA_EVENT_START}<!-- ENDIF -->" />
<!-- ENDIF -->и теперь вместо
<meta name="description" content="Купить товар с самым классным описание от ИИ" />получим
<meta name="description" content="Купить товар с самым классным описание от ИИ • Акционая продажа только у нас с 27.05.2026 10:10" />
Не забывайте как рынок наказал Форда за отказ от изменений.
Нельзя построить космодром в каждом городе — управленческая модель должна адаптироваться к местным условиям. От общего к частному. Так и с сайтом: для каждой категории или конкретной задачи нужен свой «заточенный» инструмент или шаблон, сохраняя общую стратегию. Cotonti предоставляет эту гибкость, чем выгодно отличается от простых «коробочных» CMS.
Extrafields Market Custom - меленький чемоданчик с инструментами, разместить то, что нужно именно вам, и там, где это нужно, - внедрить в систему метаданные или любой контент, посредством, действительного простого вывода экстраполей.
Пример использование в карточке товара:
<div class="row align-items-center mb-4">
<div class="col-md-6 col-xl-9 col-12 col-auto">
<h1 class="h4 mb-3">
<!-- IF {PHP.item.fieldmrkt_product_status} == 'instock' -->
<span class="px-2 fw-bold bg-success text-white rounded-2">{MARKET_PRODUCT_STATUS}</span>
<!-- ENDIF -->
<!-- IF {PHP.item.fieldmrkt_product_status} == 'onorder' -->
<span class="fw-bold text-warning-hot">{MARKET_PRODUCT_STATUS}</span>
<!-- ENDIF -->
<!-- IF {I18N_MXTRA_PAGE_H1} -->
{I18N_MXTRA_PAGE_H1}
<!-- ELSE -->
<!-- IF {MARKET_XTRA_PAGE_H1} AND {PHP.i18n_locale} == {PHP.cfg.defaultlang} -->
{MARKET_XTRA_PAGE_H1}
<!-- ELSE -->
{MARKET_TITLE}
<!-- ENDIF -->
<!-- ENDIF -->
</h1>
</div>
<div class="col-md-6 col-xl-3 col-12 mt-3 mt-md-0 text-lg-end">
...
</div>
</div>
Сразу отдаем заголовок уже переведенный на другой язык,
иначе
если активен наш плагин и есть значение кастомизированного заголовка для языка по умолчанию - отдаем его,
иначе
отдаем дефолтный заголовок и закрываем по-шагово каждое условие
Товар без файла для загрузки
- Категория расширения
- Администрирование и управление, Характеристики, Атрибуты и Опции товаров, Меню, дизайн и внешний вид, Маркетинг и реклама, SEO и оптимизация, Утилиты и инструменты
- Доступность
- Бесплатно
Рекомендуемые статьи к товару
Локализация экстраполей в Cotonti Пошаговая инструкция на примере поля "статус товара"
Автор контента
Оффлайн
webitproff
Последняя авторизация: 18.06.2026 10:44
Чем могу помочь?
Оказываю весь спектр услуг по CMF Cotonti. Разработка открытых и закрытых корпоративных интернет порталов, небольших социальных сетей, торговые площадки, маркетплейсы, биржи фриланса, каталоги товаров оптовых поставщиков, интернет-магазин под заказ, чтобы делать совместные покупки и групповые совместные продажи от имени нескольких продавцов.
Разработки на GitHub бесплатно
Telegram
- 27.04.2026 09:14
- 01.06.2026 22:24
- Язык:
Рекомендуемые товары и услуги
Плагин “Custom Extrafields” для Cotonti
Установка, интеграция и адаптация плагинов под Cotonti CMF
Плагин Userfields для CMF Cotonti 0.9.26
Рекомендуемые темы форума для этого товара
“Custom Extrafields” для модуля “Market” плагин Cotonti
Витрина Market PRO
CMS, Скрипт и Движок - веб сайта онлайн-витрины, интернет магазина инфопродуктов и цифровых товаров. Разные цены в разных валютах на товар. Онлайн-оплата в криптовалюте за товары и услуги.
English