Forum categories

Справочник тегов шаблона market.userdetails.tpl

Шаблон market.userdetails.tpl используется для вывода вкладки «Товары» на странице пользователя. Он подключается через хук users.details.tags и рендерится в переменную {MARKET}, которая затем выводится в общем шаблоне пользователя.

webitproff
webitproff • 2026-09-05 08:52 #590

Справочник тегов шаблона market.userdetails.tpl  

Шаблон market.userdetails.tpl используется для вывода вкладки «Товары» на странице пользователя. Он подключается через хук users.details.tags и рендерится в переменную {MARKET}, которая затем выводится в общем шаблоне пользователя. 

Источники данных: функция cot_generate_markettags(), структура категорий, конфигурация модуля, параметры URL и результаты SQL-запросов. Все теги формируются в файле market.userdetails.php. Теги товаров создаются с префиксом MARKET_ROW_ и в основном повторяют теги из market.list.tpl, но с рядом отличий (например, переопределённые админские теги удаления).

Общие теги вкладки

ТегНазначениеТип данныхИсточник (код) и пример вывода
{MARKET_ADD_URL}URL для добавления нового товараstring (URL)
'MARKET_ADD_URL' => cot_url('market', 'm=add'),

Пример:

/market/m=add
{MARKET_ADD_SHOWBUTTON}Флаг показа кнопки добавления (true, если есть право записи)boolean
'MARKET_ADD_SHOWBUTTON' => $usr['auth_write'] ? true : false,

Пример:

true
{LOAD_MORE_URL}URL для AJAX-подгрузки следующей порции товаровstring (URL)
'LOAD_MORE_URL' => cot_url('users', ['m' => 'details', 'id' => $urr['user_id'], 'u' => $urr['user_name'], 'tab' => 'market', 'cat' => $category, 'ajax' => 1]),

Пример:

/users/details?id=5&u=user&tab=market&ajax=1
{LOAD_MORE_PERPAGE}Количество товаров на одну AJAX-подгрузкуint
'LOAD_MORE_PERPAGE' => $perpageincat,

Пример:

10
{LOAD_MORE_TOTALPAGES}Общее количество страниц товаровint
'LOAD_MORE_TOTALPAGES' => $totalpages,

Пример:

4
{LOAD_MORE_CURRENTPAGE}Текущая страница (для кнопки «Загрузить ещё»)int
'LOAD_MORE_CURRENTPAGE' => $currentpage,

Пример:

1
{LOAD_MORE_LANG}JSON-объект с языковыми строками для AJAX-кнопкиstring (JSON)
'LOAD_MORE_LANG' => json_encode([
    'load_more' => $L['market_load_more'] ?? 'Загрузить ещё (страница %d из %d)',
    'loading'   => $L['market_loading'] ?? '<i class="fa fa-spinner fa-spin"></i> Загрузка...',
    'error'     => $L['market_load_error'] ?? 'Ошибка загрузки. Попробуйте ещё раз.'
]),

Пример:

{"load_more":"Загрузить ещё","loading":"Загрузка...","error":"Ошибка"}

Теги категорий пользователя (блок CAT_ROW)

Эти теги доступны внутри цикла <!-- BEGIN: CAT_ROW --> ... <!-- END: CAT_ROW -->. Они описывают категории, в которых есть товары данного пользователя.

ТегНазначениеТип данныхИсточник (код) и пример вывода
{MARKET_CAT_ROW_TITLE}Название категорииstring
'MARKET_CAT_ROW_TITLE' => Cot::$structure['market'][$value['fieldmrkt_cat']]['title'] ?? '',

Пример:

Электроника
{MARKET_CAT_ROW_ICON}Путь к иконке категории (если есть)string | пусто
'MARKET_CAT_ROW_ICON' => Cot::$structure['market'][$value['fieldmrkt_cat']]['icon'] ?? '',

Пример:

/images/icons/electronics.png
{MARKET_CAT_ROW_URL}URL для фильтрации товаров по этой категорииstring (URL)
'MARKET_CAT_ROW_URL' => cot_url('users', ['m' => 'details', 'id' => $urr['user_id'], 'u' => $urr['user_name'], 'tab' => 'market', 'cat' => $value['fieldmrkt_cat']]),

Пример:

/users/details?id=5&u=user&tab=market&cat=electronics
{MARKET_CAT_ROW_COUNT_MARKET}Количество товаров пользователя в этой категорииint
'MARKET_CAT_ROW_COUNT_MARKET' => $value['cat_count'],

Пример:

7
{MARKET_CAT_ROW_SELECT}Признак выбранной категории (1, если текущая категория совпадает)int
'MARKET_CAT_ROW_SELECT' => ($category && $category == $value['fieldmrkt_cat']) ? 1 : '',

Пример:

1

Пагинация

ТегНазначениеТип данныхИсточник (код) и пример вывода
{PAGE_*}Стандартные теги пагинации списка товаров пользователя (например, {PAGE_CURRENT}, {PAGE_TOTAL}, {PAGE_PREV}, {PAGE_NEXT})различные
$t1->assign(cot_generatePaginationTags($pagenav));

Пример:

Страница 1 из 4

Теги товаров (блок MARKET_ROWS)

Эти теги доступны внутри цикла <!-- BEGIN: MARKET_ROWS --> ... <!-- END: MARKET_ROWS -->. Они генерируются функцией cot_generate_markettags() с префиксом MARKET_ROW_. По сути, это те же теги, что и в списке товаров (LIST_ROW_*), но с другим префиксом. Дополнительно здесь переопределяются админские теги удаления для корректного возврата на страницу пользователя. Ниже перечислены все основные теги с их исходным кодом из функции.

ТегНазначениеТип данныхИсточник (код) и пример вывода
{MARKET_ROW_URL}URL страницы товараstring (URL)
'URL' => $item_data['fieldmrkt_pageurl'],
{MARKET_ROW_ID}ID товараint
'ID' => $item_data['fieldmrkt_id'],
{MARKET_ROW_TITLE}Название товараstring (HTML-экранированный)
'TITLE' => htmlspecialchars($item_data['fieldmrkt_title'], ENT_COMPAT, 'UTF-8', false),
{MARKET_ROW_METATITLE}Мета-заголовокstring
'METATITLE' => htmlspecialchars($item_data['fieldmrkt_metatitle'], ENT_COMPAT, 'UTF-8', false),
{MARKET_ROW_BREADCRUMBS}Хлебные крошки товараstring (HTML)
'BREADCRUMBS' => $breadcrumbs,
{MARKET_ROW_BREADCRUMBS_ITEM}Полные хлебные крошкиstring (HTML)
'BREADCRUMBS_ITEM' => cot_breadcrumbs(...),
{MARKET_ROW_ALIAS}Алиас товараstring
'ALIAS' => $item_data['fieldmrkt_alias'],
{MARKET_ROW_PCOD}Код товараstring
'PCOD' => $item_data['fieldmrkt_pcod'],
{MARKET_ROW_STATE}Числовой статусint
'STATE' => $item_data['fieldmrkt_state'],
{MARKET_ROW_STATUS}Машинное имя статусаstring
'STATUS' => $item_data['fieldmrkt_status'],
{MARKET_ROW_LOCAL_STATUS}Локализованный статусstring
'LOCAL_STATUS' => $L['market_status_' . $item_data['fieldmrkt_status']],
{MARKET_ROW_CAT}Код категорииstring
'CAT' => $item_data['fieldmrkt_cat'],
{MARKET_ROW_CAT_URL}URL категорииstring (URL)
'CAT_URL' => $cat_url,
{MARKET_ROW_CAT_TITLE}Название категорииstring
'CAT_TITLE' => $catTitle,
{MARKET_ROW_CAT_PATH}Путь категорииstring (HTML)
'CAT_PATH' => $catpath,
{MARKET_ROW_CAT_PATH_SHORT}Краткий путь категорииstring (HTML)
'CAT_PATH_SHORT' => cot_rc_link($cat_url, $catTitle),
{MARKET_ROW_CAT_DESCRIPTION}Описание категорииstring
'CAT_DESCRIPTION' => $catDescription,
{MARKET_ROW_CAT_ICON}HTML иконки категорииstring (HTML) | пусто
'CAT_ICON' => ... ,
{MARKET_ROW_CAT_ICON_SRC}Путь к иконкеstring | пусто
'CAT_ICON_SRC' => ... ,
{MARKET_ROW_DESCRIPTION}Краткое описаниеstring
'DESCRIPTION' => $itemDescription,
{MARKET_ROW_TEXT}Полный текстstring (HTML)
'TEXT' => $text,
{MARKET_ROW_TEXT_SHORT}Краткий текстstring
'TEXT_SHORT' => cot_cutstring(strip_tags($item_data['fieldmrkt_text']), 250),
{MARKET_ROW_TEXT_CUT}Текст после обрезкиstring (HTML)
'TEXT_CUT' => $text_cut,
{MARKET_ROW_TEXT_IS_CUT}Флаг обрезкиboolean
'TEXT_IS_CUT' => $cutted,
{MARKET_ROW_DESCRIPTION_OR_TEXT}Описание или текстstring (HTML)
'DESCRIPTION_OR_TEXT' => $itemDescription !== '' ? $itemDescription : $text,
{MARKET_ROW_DESCRIPTION_OR_TEXT_CUT}Описание или обрезанный текстstring (HTML)
'DESCRIPTION_OR_TEXT_CUT' => ...,
{MARKET_ROW_MORE}Ссылка «Подробнее»string (HTML) | пусто
'MORE' => ($cutted) ? cot_rc('list_more', ['page_url' => $item_data['fieldmrkt_pageurl']]) : '',
{MARKET_ROW_AUTHOR}Авторstring
'AUTHOR' => ...,
{MARKET_ROW_OWNER_ID}ID владельцаint
'OWNER_ID' => $item_data['fieldmrkt_ownerid'],
{MARKET_ROW_OWNER_NAME}Имя владельцаstring
'OWNER_NAME' => ...,
{MARKET_ROW_COSTDFLT}Цена в валюте по умолчаниюstring
'COSTDFLT' => number_format(...),
{MARKET_ROW_COST_USD}Цена в долларах (float)float
'COST_USD' => (float)$item_data['fieldmrkt_cost_usd'],
{MARKET_ROW_COST_USD_RAW}Цена без лишних нулейstring
'COST_USD_RAW' => rtrim(rtrim(number_format(...), '0'), '.'),
{MARKET_ROW_COST_USD_FORMATTED}Форматированная ценаstring | пусто
'COST_USD_FORMATTED' => ... ,
{MARKET_ROW_CREATED}Дата созданияstring
'CREATED' => cot_date('datetime_medium', $item_data['fieldmrkt_date']),
{MARKET_ROW_UPDATED}Дата обновленияstring
'UPDATED' => cot_date('datetime_medium', $item_data['fieldmrkt_updated']),
{MARKET_ROW_CREATED_STAMP}Timestamp созданияint
'CREATED_STAMP' => $item_data['fieldmrkt_date'],
{MARKET_ROW_UPDATED_STAMP}Timestamp обновленияint
'UPDATED_STAMP' => $item_data['fieldmrkt_updated'],
{MARKET_ROW_HITS}Количество просмотровint
'HITS' => $item_data['fieldmrkt_count'],
{MARKET_ROW_ADMIN}Блок админ-действийstring (HTML) | пусто
'ADMIN' => $admin_rights ? cot_rc('list_row_admin', ...) : '',
{MARKET_ROW_ADMIN_EDIT}Ссылка «Редактировать»string (HTML) | пусто
'ADMIN_EDIT' => ... ,
{MARKET_ROW_ADMIN_EDIT_URL}URL редактированияstring (URL) | пусто
'ADMIN_EDIT_URL' => $edit_url,
{MARKET_ROW_ADMIN_UNVALIDATE}Ссылка смены статусаstring (HTML) | пусто
'ADMIN_UNVALIDATE' => ... ,
{MARKET_ROW_ADMIN_UNVALIDATE_URL}URL смены статусаstring (URL) | пусто
'ADMIN_UNVALIDATE_URL' => ...,
{MARKET_ROW_ADMIN_DELETE}Ссылка «Удалить» (переопределена с редиректом на страницу пользователя)string (HTML) | пусто
$deleteUrl = cot_url('market', ['m' => 'edit', 'a' => 'update', 'delete' => '1', 'id' => $item_data['fieldmrkt_id'], 'x' => Cot::$sys['xk'], 'redirect' => base64_encode(cot_url('users', $urlParams, '', true))]);
$deleteConfirmUrl = cot_confirm_url($deleteUrl, 'market');
$marketTags['MARKET_ROW_ADMIN_DELETE'] = cot_rc_link($deleteConfirmUrl, Cot::$L['Delete'], 'class="confirmLink"');

Пример:

<a href="..." class="confirmLink">Удалить</a>
{MARKET_ROW_ADMIN_DELETE_URL}URL удаления с подтверждениемstring (URL) | пусто
$marketTags['MARKET_ROW_ADMIN_DELETE_URL'] = $deleteConfirmUrl;

Пример:

/market/m=edit&a=update&delete=1&id=...
{MARKET_ROW_ADMIN_CLONE}Ссылка «Клонировать»string (HTML) | пусто
'ADMIN_CLONE' => cot_auth('market', 'any', 'W') ? cot_rc_link($clone_url, $L['market_clone']) : '',
{MARKET_ROW_ADMIN_CLONE_URL}URL клонированияstring (URL) | пусто
'ADMIN_CLONE_URL' => cot_auth('market', 'any', 'W') ? $clone_url : '',
Также доступны все теги дополнительных полей товара с префиксом MARKET_ROW_<FIELD>, MARKET_ROW_<FIELD>_TITLE, MARKET_ROW_<FIELD>_VALUE и теги структуры категории MARKET_ROW_CAT_<FIELD> и т.д., аналогично списку товаров. Они формируются внутри cot_generate_markettags().

Теги, передаваемые в родительский шаблон пользователя

Эти теги не используются внутри market.userdetails.tpl, но присваиваются в общий шаблон users.details.tpl после парсинга вкладки.

ТегНазначениеТип данныхИсточник
{USERS_DETAILS_MARKET_COUNT}Общее количество товаров пользователяint$market_count_all
{USERS_DETAILS_MARKET_URL}URL вкладки «Товары» пользователяstring (URL)cot_url('users', ['m' => 'details', 'id' => $urr['user_id'], 'u' => $urr['user_name'], 'tab' => 'market'])
{MARKET}Готовый HTML-код вкладки товаров (результат парсинга market.userdetails.tpl)string (HTML)$t1->text('MAIN')

Примечания

  • Теги MARKET_ROW_* доступны только внутри цикла <!-- BEGIN: MARKET_ROWS -->.
  • Теги MARKET_CAT_ROW_* доступны только внутри цикла <!-- BEGIN: CAT_ROW -->.
  • Все теги формируются в файле market.userdetails.php. Теги товаров создаются функцией cot_generate_markettags() с параметрами, аналогичными списку магазина, но с префиксом MARKET_ROW_ и без передачи $backUrl в не-AJAX режиме.
  • AJAX-режим использует тот же шаблон, но парсит только блок MAIN.MARKET_ROWS и возвращает JSON с HTML строк и пагинации.
  • Кнопка «Загрузить ещё» управляется тегами LOAD_MORE_*. JavaScript считывает LOAD_MORE_URL, LOAD_MORE_PERPAGE, LOAD_MORE_TOTALPAGES, LOAD_MORE_CURRENTPAGE и языковые строки из LOAD_MORE_LANG.
This post was edited by webitproff (2026-09-05 09:13, 1 hour ago)
🗿

🧙‍♂️ 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.