сайтов
Часто бывает нужно менять цены, телефоны, адреса на сайте в зависимости от поддомена, например, для другого города или другого языка. Конечно можно воспользоваться компонентом Babel, но иногда он излишен, да и настраивать его не быстро :)
Рассмотрим простой сниппет, который будет использовать MIGX в своей основе.
Тут нет ничего сложного, подробно останавливаться не будем. Просто создаем нужные поддомены, например, moscow.site.ru и kazan.site.ru и подключаем их к сайту.
Допустим, нам нужно менять телефон и адрес в зависимости от поддомена. Вообще, можно менять и все содержимое, но для этого уже лучше использовать Babel. Данная статья годится для изменения небольших данных, к примеру, на лендинге.
Создадим для нужного шаблона MIGX-TV (подробнее о настройке MIGX), назовем, например, alldomains и вводим следующее.
Вкладки форм:
[{
"caption":"Поддомены",
"fields": [{
"field":"subdomain",
"caption":"Поддомен (указывается в виде - sub.site.ru )"
},{
"field":"city",
"caption":"Город"
},{
"field":"address",
"caption":"Адрес"
},{
"field":"phone",
"caption":"Телефон"
}]
}]
Название полей (subdomain, city, phone, addres) будут использоваться в работе/вызове сниппета.
Разметка колонок:
[{
"dataIndex": "subdomain",
"header": "Поддомен",
"width": "150"
},{
"dataIndex": "city",
"header": "Город",
"width": "150"
},{
"dataIndex": "address",
"header": "Адрес",
"width": "150"
},{
"dataIndex": "phone",
"header": "Телефон",
"width": "150"
}]
Тут важно название MIGX-поля - subdomain, именно по нему сравнивается поддомен в сниппете (о нем ниже).
Заполняем данные для нужного ресурса, например, "Контакты" (у ресурса ID=10). У нас получится что-то типа такого:
<?php
// Определяем активный URL
$sub_domain = ($_SERVER['HTTP_HOST']);
// Определяем ID ресурса с MIGX-TV
if(isset($parent)) {
$id = $modx->getObject('modResource', $parent);
} else {
return "Не указан ID (&parent=``) ресурса!<br>";
}
// Определяем название MIGX-TV
if(isset($tv)) {
$migx = $id->getTVValue($tv);
} else {
return "Не указано название MIGX-TV (&tv=``)!<br>";
}
// Преобразуем в массив из JSON
$arr_migx = $modx->fromJSON($migx);
// Определяем значения из MIGX-TV [В квадратных скобках название поля]:
if(isset($element)) {
foreach($arr_migx as $arr_migx_set) {
if($arr_migx_set['subdomain'] == $sub_domain) {
$data_return = $arr_migx_set[$element];
}
}
} else {
return "Не указано название поля MIGX-TV (&element=``) ресурса!<br>";
}
return $data_return;
?>
Сниппет вызывается таким образом:
[[!subDomain?
&parent=`10`
&tv=`alldomains`
&element=`phone`
]]
Где в &parent=`10` мы указали ID ресурса "Контакты" с заполненным MIGX-TV, &tv=`alldomains` - название нашего TV, &element=`phone` - название поля в MIGX-TV, которое нужно вывести, в данном случае телефон.
Вообще с MIGX очень удобно управлять нужными полями, и для менеджера понятно что и где править.
Опять же для грамотного seo можно выводить нужный город в <head>, к примеру:
<title>[[*longtitle]] | [[!subDomain? &parent=`10` &tv=`alldomains` &element=`city`]] | [[++site_name]]</title>
Еще нужно не забывать, что MIGX-TV можно использовать отдельно. Например, вызовем переключатель городов, с помощью сниппета getImageList (входит в пакет MIGX):
<ul class="dropdown">
[[!getImageList?
&docid=`10`
&limit=`0`
&tvname=`alldomains`
&tpl=`header_city_tpl`
]]
</ul>
Сам чанк header_city_tpl:
<li><a href="//[[+subdomain]]">[[+city]]</a></li>
Или вызвать список всех городов и их контактных данных. В общем, зависит от фантазии.
На этом все. Удачи с поддоменами ;)