Skip to content
  1. Компоненты
  2. MigxPageConfigurator
  3. Разная информация по регионам

Разная информация по регионам

Пример реализации мультирегиональности

Рассмотрим реализацию мультирегиональности на примере взаимодействия с компонентом cityFields. Создаём TV city_id. Возможные значения

sql
@SELECT `name`,`id` FROM `[[++table_prefix]]cf_cities` ORDER BY `active` ASC

Дальше предположим, что есть ресурс Доставка, условия доставки отличаются в зависимости от города. Поэтому создаем дочерние ресурсы по отношению к ресурсу Доставка:

  • Доставка в Москве;
  • Доставка в Майкопе. У каждого выбираем соответствующий город в city_id. Сохраняем. Плагин на сохранение создаст необходимый плейсхолдер.
php
<?php
$hidemenu = $resource->get('hidemenu');
$published = $resource->get('published');
$parent = $resource->get('parent');
$city_id = $resource->getTVValue('city_id');

// EVENTS
switch ($modx->event->name) {
  case 'OnDocFormDelete':
    if ($hidemenu && !$published && !in_array($parent, array(0, 2, 9, 40, 41, 42))) {
      $modx->addPackage('cityfields', MODX_CORE_PATH . 'components/cityfields/model/');
      if ($parentResource = $modx->getObject('modResource', $parent)) {
        $alias = $parentResource->get('alias');
        if ($field = $modx->getObject('cfField', array('placeholder' => $alias))) {
          $field->remove();
        }
      }
    }
    break;

  case 'OnResourceUndelete':
  case 'OnDocFormSave':
    if ($hidemenu && !$published && !in_array($parent, array(0, 2, 9, 40, 41, 42))) {
      $modx->addPackage('cityfields', MODX_CORE_PATH . 'components/cityfields/model/');
      if ($parentResource = $modx->getObject('modResource', $parent)) {
        $alias = $parentResource->get('alias');
        if (!$modx->getCount('cfField', array('placeholder' => $alias, 'city_id' => $city_id))) {
          $field = $modx->newObject('cfField');
          $field->fromArray(array(
            'city_id' => $city_id,
            'placeholder' => $alias,
            'value' => $id
          ), '', true);
          $field->save();
        }
      }
    }
    break;
}

А потом просто меняем код основного шаблона на этот

fenom
{extends 'file:elements/pages/wrapper.tpl'}
{block 'content'}
  {set $plsName = 'cf.' ~ $_modx->resource.alias}
  {set $path = '!getParsedConfigPath' | snippet : ['rid' => $_modx->getPlaceholder($plsName)]}
  {include $path}
{/block}