Skip to content
  1. Компоненты
  2. MigxPageConfigurator
  3. Работа с контактами

Работа с контактами

Контакты — это телефоны, почты, адреса, соцсети и мессенджеры, карты, реквизиты, время работы. Они хранятся отдельно от секций — в одном общем хранилище на весь сайт — и доступны на любой странице. Удобство в том, что один и тот же контакт (например, телефон) описывается один раз, а выводиться может в разных местах (шапка, подвал) со своим оформлением.

Эта страница — про модель данных контакта и его вывод. Как размечать контакты в вёрстке — в разделе Разметка вёрстки → Контакты.

Где хранятся

Все контакты сайта лежат в одной 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" будет доступен так:

fenom
{$contacts['header']['mainphone']['fvalue']}   {* 8 (999) 888-77-66 *}
{$contacts['header']['mainphone']['caption']}  {* Горячая линия *}

Каждая запись содержит поля из таблицы выше:

php
$contacts = [
  'header' => [
    'mainphone' => [
      'type'       => 'phone',
      'value'      => '79998887766',
      'fvalue'     => '8 (999) 888-77-66',
      'caption'    => 'Горячая линия',
      'attributes' => 'icon-phone',
      'icon'       => '',
      'placement'  => 'header',
    ],
  ],
  'footer' => [ /* … */ ],
];

Ручной вывод

Когда нужно вывести контакты «по-своему» (списком, в таблице), перебирайте нужный плейсмент. ?? [] страхует от отсутствующего плейсмента:

fenom
<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>

Адрес или карту, выведенные одним конкретным блоком, удобнее доставать по ключу напрямую:

fenom
{$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.

Подробный разбор перевода (логика ключей, плейсменты, точечное переопределение) — в разделе Разметка вёрстки → Перевод контактов и Лексиконы и мультиязычность.