Работа с контактами
Контакты — это телефоны, почты, адреса, соцсети и мессенджеры, карты, реквизиты, время работы. Они хранятся отдельно от секций — в одном общем хранилище на весь сайт — и доступны на любой странице. Удобство в том, что один и тот же контакт (например, телефон) описывается один раз, а выводиться может в разных местах (шапка, подвал) со своим оформлением.
Эта страница — про модель данных контакта и его вывод. Как размечать контакты в вёрстке — в разделе Разметка вёрстки → Контакты.
Где хранятся
Все контакты сайта лежат в одной MIGX-TV contacts на ресурсе-хранилище:
- ресурс задаётся настройкой
mpc_contacts_page_id(его псевдоним выбирается в окне установки —mpc_contacts_page_alias, см. Начало работы); - имя TV —
mpc_contacts_tv_name(по умолчаниюcontacts); - контакты не дублируются: записи различаются по ключу (
ckey) и значению.
Заполняются они автоматически при нарезке из размеченной вёрстки — отдельно заводить их в админке не нужно.
Поля контакта
| Поле | Что это |
|---|---|
type | тип: phone, email, social, address, map, worktime, requisite, messenger |
value | само значение (телефон/e-mail/URL/адрес). Для phone хранится только цифрами |
fvalue | форматированное значение для показа. Для phone генерируется из value по настройкам mpc_phone_regexp / mpc_phone_format; для остальных типов равно value, если явно не задано |
caption | подпись («Горячая линия», «Звоните»…). Зависит от плейсмента |
attributes | доп. данные/класс иконки |
icon | путь к иконке (если задан) |
ckey | устойчивый ключ контакта (из data-mpc-key). По нему контакт адресуется в шаблоне |
placement | где выводится: header, footer, … (по умолчанию default) |
Как контакты попадают в вывод
Размечать контакты вручную плейсхолдерами обычно не нужно: вы размечаете блок атрибутами data-mpc-contact / data-mpc-cfield, а нарезка сама подставляет нужные плейсхолдеры. Но полезно понимать структуру, в которой контакты доступны на рендере.
mpc кладёт в область видимости каждой секции массив $contacts вида:
$contacts[<плейсмент>][<ckey>][<поле>]Например, телефон с data-mpc-contact="phone|header" и data-mpc-key="mainphone" будет доступен так:
{$contacts['header']['mainphone']['fvalue']} {* 8 (999) 888-77-66 *}
{$contacts['header']['mainphone']['caption']} {* Горячая линия *}Каждая запись содержит поля из таблицы выше:
$contacts = [
'header' => [
'mainphone' => [
'type' => 'phone',
'value' => '79998887766',
'fvalue' => '8 (999) 888-77-66',
'caption' => 'Горячая линия',
'attributes' => 'icon-phone',
'icon' => '',
'placement' => 'header',
],
],
'footer' => [ /* … */ ],
];Ручной вывод
Когда нужно вывести контакты «по-своему» (списком, в таблице), перебирайте нужный плейсмент. ?? [] страхует от отсутствующего плейсмента:
<ul class="contacts">
{foreach ($contacts['footer'] ?? []) as $contact}
<li class="contacts__item {$contact['attributes']}">
<span class="contacts__caption">{$contact['caption']}</span>
{if $contact['type'] == 'phone'}
<a href="tel:{$contact['value']}">{$contact['fvalue']}</a>
{elseif $contact['type'] == 'email'}
<a href="mailto:{$contact['value']}">{$contact['fvalue']}</a>
{else}
<span>{$contact['fvalue']}</span>
{/if}
</li>
{/foreach}
</ul>Адрес или карту, выведенные одним конкретным блоком, удобнее доставать по ключу напрямую:
{$contacts['footer']['main_address']['value']}Телефоны: формат вывода
Для типа phone значение хранится только цифрами (79998887766), а человекочитаемый вид (fvalue) собирается из него:
mpc_phone_regexp— регулярное выражение, разбивающее номер на группы (по умолчанию/(\d)(\d{3})(\d{3})(\d{2})(\d{2})$/);mpc_phone_format— шаблон подстановки групп (по умолчанию8 (\2) \3-\4-\5).
Так из 79998887766 получается 8 (999) 888-77-66. В href подставляется «сырое» value (tel:79998887766), а в текст ссылки — fvalue.
Перевод контактов (мультиязычность)
Какие под-поля контакта переводятся, задаёт настройка mpc_contact_lexicon_fields. Запись поле переводит его у всех типов, тип:поле — только у контакта этого типа. Типичный случай «адрес зависит от страны, а соцсети и телефон общие»: caption, address:value, address:fvalue. На отдельном блоке набор переопределяет атрибут data-mpc-translate.
Подробный разбор перевода (логика ключей, плейсменты, точечное переопределение) — в разделе Разметка вёрстки → Перевод контактов и Лексиконы и мультиязычность.
