[cityFields] Определение города по домену
Новая версия компонента cityFields приносит самый ожидаемый функционал — определение города по домену. И в данной статье я опишу процесс настройки этой возможности.

Начнём с того, что создадим свой список городов на странице компонента, если вы этого ещё не сделали. Ключ — это наш будущий поддомен для города.

Теперь создадим соответствующие поддомены на вашем хостинге и подключим их к сайту по тому же пути, что и основной сайт. Если вы пользуетесь SSL-сертификатом, необходимо будет перевыпустить его, добавив в него новые поддомены.

Включаем возможность определения города по домену в настройках компонента.

Если вы изменяли стандартный код чанка cfCities.row, JS-файла или обновлялись до новой версии, необходимо добавить ссылки для переключения города. Стандартный код чанка cfCities.row теперь выглядит так:
Теперь проверьте вашу работу. Если у вас возникли какие-либо вопросы или проблемы, пишите тикеты в поддержку на modstore.pro, а также можете оставлять комментарии к данной записи. Как работает переключение городов на деле можно увидеть на демо сайте.
И стоит отдельно отметить и другие изменения у компонента:

Начнём с того, что создадим свой список городов на странице компонента, если вы этого ещё не сделали. Ключ — это наш будущий поддомен для города.

Теперь создадим соответствующие поддомены на вашем хостинге и подключим их к сайту по тому же пути, что и основной сайт. Если вы пользуетесь SSL-сертификатом, необходимо будет перевыпустить его, добавив в него новые поддомены.

Включаем возможность определения города по домену в настройках компонента.

Если вы изменяли стандартный код чанка cfCities.row, JS-файла или обновлялись до новой версии, необходимо добавить ссылки для переключения города. Стандартный код чанка cfCities.row теперь выглядит так:
<option value="[[+id]]" id="[[+key]]"[[+link:notempty=` data-href="[[+link]]"`]][[+selected]]>[[+name]]</option>[[+link]] содержит ссылку на текущую страницу с учётом города.Теперь проверьте вашу работу. Если у вас возникли какие-либо вопросы или проблемы, пишите тикеты в поддержку на modstore.pro, а также можете оставлять комментарии к данной записи. Как работает переключение городов на деле можно увидеть на демо сайте.
И стоит отдельно отметить и другие изменения у компонента:
- Сниппет cfField можно использовать как модицифатор
{'key' | cffield} или {'key' | cffield : 'msk'} - В плейсхолдеры записывается информация о текущем городе и записывается независимо от того, включена ли опция записи плейсхолдеров или нет.
[[+cf.current_city]] - наименование текущего города; [[+cf.current_city.id]] - ID текущего города; [[+cf.current_city.key]] - ключ текущего города; [[+cf.current_city.url]] - ссылка на сайт с учётом текущего города. - Добавлены фильтры для данных в админке

- Добавлен combobox со списком плейсхолдеров при добавлении/редактировании данных;
- Добавлена проверка на дубли данных (уникальная связка плейсхолдер-значение) и городов (уникальный ключ и уникальное наименование);
- Поправлены стили на странице редактировании товара miniShop2 2.4;
- Поправлена связь с компонентом msOptionsPrice2;
- Обновлена база данных городов sxGeo.
Комментарии: 47
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
1. Возможна ли реализация городов в подкатегориях (site.ru/moskva/...)
2. Нужно ли создавать контексты для каждого города (если да, то добавление нового ресурса создается автоматически)?
2. Прелесть этого компонента в том, что нет необходимости создавать под каждый город контексты. Если вам необходимо внутри содержимого ресурса использовать разные фрагменты текста для разных городов, необходимо использовать данные и выводить их с помощью сниппета/модификатора cfField или плейсхолдером (если опция включена).
2. Отлично, что не нужно создавать контексты. В этой связи возникают еще пару вопросов:
а) подставляются ли переменные в метаданных (title, description);
б) как создается карта сайта? Будут ли в сайтмапе ссылки на все страницы каждого города? Хотя, этот вопрос больше относится к городам в подкатегории.
2а. Автоматически не подставляется. Как у вас реализован вывод title и description?
2б. Карта сайта будет создаваться со ссылками по умолчанию, без учёта городов. Стандартная настройка site_url не подменяется.
Большое спасибо за быстрые ответы. К сожалению, с данным функционалом ваш компонент не смогу применить.
Реализован на данный момент функционал выбора города в подкатегориях (site.ru/moskva/...)?
2. Можно ли реализовать какой то сброс всех тв полей для каждого контекста?
К примеру у каждого города есть метро и районы если у менеджера в ТВ Автодополении будет районы всех городов то это крайне не удобно.
Так же на сайте реализованы теги, которые подобраны для определенного города и они высвечиваются во всех контекстах. Думаю суть проблемы понятна.
1. Компонент не работает с контекстами. Оно создано специально для того, чтобы не создавать контексты для разных городов. Дописать этот функционал возможно, в принципе, или переписать под ваши нужды его.
2. Придётся переписать тип ТВ или создать новый, чтобы поддерживал компонент. В общем, без правки такой функции не будет, но вообще реализовать можно.
3. Опять же вопрос к автодополнениям, поддержку городов придётся дописывать.
…
И все, — города переключаются, но почему URL не меняется.
Всегда Site.ru а не msk.site.ru или spb.site.ru
Что я забыл?
Так происходит только с одним городом, поддомен которого был выключен и CityFields эту ссылку как то запомнил хитро. Никак не могу избавиться.
Пробывал удалять и ставить заново, но ссылка генерируется все равно — «Gorodsite.ru»
А нормальные, включенный с самого начала поддомен, открывается как положено, с точкой.
2. Просьба расширить функционал в новой версии CityFields
Опцией в настройках при выборе которой, если город не определился — то открываеся site.ru
а жители городов например Москва, попадали в соотв. поддомены типа moskva.site.ru
И еще хочется опцию в настройках, с которой при заходе на site.ru, сайт спрашивает:
Ваш город: Пермь? Далее посетитель нажимает «Пермь» — и срабатывает редирект perm.site.ru
2. Хорошо, я реализую такой функционал в ближайшем обновлении.
Благодарю, буду очень ждать обновление.
Вопрос. CityFields сам географию по айпишнику определяет, и редиректит с site.ru на gorod.site.ru Верно?
Просто авто-редирект перестал работать после того как я решал прошлую проблему…
«Город в домене» в системных настройках включено.
Деинсталировать, Удалять, заново ставить попробывал.
С хостинга может быть удалить какую-нить папку?
ps После полного удаления в настройках «Управление городами и данными» поля заполнять не требуется, т.е. заполненные города остаются.
joxi.ru/bmoJPxRUVQb0ry
joxi.ru/v29GMLRi1LbvrG
1)создаете ящики так что бы были точные совпадение с именем поддомена, например msk@site.ru для сайта msk.site.ru.
2)создаете снипет print
<?php
if (preg_match('/([^\.]+)\.[^\.]+\.[^\.]+$/',$_SERVER['HTTP_HOST'], $match)) {
echo $match[1].$pre;
}
else {
echo '';
}
3)в снипите отправки пишем: [[!FormIt@custom?… &emailTo=`[[!print? &pre=`@site.ru`]]`...]], например если поддомен ekb.site.ru, то письмо отправиться на ekb@site.ru.
По аналогии можно дописать как угодно снипет print и вставлять имя поддомена в любую часть почты.
А вообще formit вроде как умеет брать параметр &emailTo из плейсхолдера, пробуйте через cityFields, создавайте почту через плейсхолдеры, только при выводе не кэшируйте. Мне кажется получиться.
С другой стороны, даже без класса обработчика компонент добавляет в заказ свойство cf.from_city в массив properties с ID города, из которого был сделан заказ. Так что в теле письма вывести город вполне возможно. Но вот чтобы в тему письма добавить метку, наверное надо будет дорабатывать класс cfOrderHandler.
При включении настройки Город в домене — cityfields_cityindomain — получаю белый экран с ошибками
Может было у кого такое? Как решить?
Нужно срочно сайт запустить.
Некоторые моменты оказались для меня неочевидными, напишу, может кому пригодится.
Мультидоменность в ISP-manager настраивается так — www-домены -> добавляем псевдоним *.site.ru
Больше ничего не нужно — любое слово вместо звездочки пойдет поддоменом.
Далее ставится сам компонент, прописываются города, и все должно работать.
Как сделать sitemap — здесь уже обсуждалось, robots.txt тоже можно сделать динамическим — https://www.youtube.com/watch?v=X-W1T2SG19s
Далее я делал примерно так
Соответственно, можно для разных городов настраивать нужную индексацию.
И сильно помог компонент caseChanger, с помощью которого прописал названия городов в нужных падежах.
Единственное пожелание Сергею — документацию сделать нормальную, время потерял, пока разобрался.
Объясню для чего: для упрямого Google, который упорно не хочет индексировать сайт на поддоменах. Для него планируется закрыть поддомены от индексации, а вместо этого сделать туже схему но на папках внутри основного сайта.
Если кто-то решал данную задачу — напишите как можно сделать малой кровью, без копирования сайта/кучи контекстов и т.д.
То есть у вас должно получится следующее:
Но могу ошибаться.