cityFields. Города, информация и цены для каждого
Представляю вам небольшой полезный компонент под названием cityFields. На данный момент его возможности скромны:

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

Во-первых, по умолчанию включена запись полей в плейсхолдеры, которые имеют префикс. И для вывода информации достаточно добавить в ваши чанки или шаблоны необходимый плейсходер, но главное — вызвать его не кешируемым. Например, так:
Во-вторых, плейсхолдеры записываются при загрузке страницы, что может тормозить систему в некоторых случаях. Поэтому я добавил возможность отключить запись полей в плейсхолдеры. В этом случае для вывода информации для каждого города нужно вызвать сниппет cfField с нужным ключом:

После того, как вы добавите цену для города, и обновите кеш, вы увидите новую цену, а рядом с ней старую, если вывод старых цен у вас настроен. Дополнительно ничего настраивать и выводить не нужно.
Документация к дополнению готовится. Само дополнение уже доступно в магазине modStore.pro и купить его можно всего за 390 рублей.
- Добавление списка городов.
- Добавление уникальной информации для каждого города.
- Управление ценами товаров miniShop2 для каждого города.
Список городов и управление им
У компонента имеется страница, на которой вы можете управлять списком городов, добавлять, изменять и удалять их, а также включать и отключать города.
Для вывода списка городов с возможностью переключаться между ними достаточно просто вызвать сниппет:
[[!cfCities]]Уникальная информация для каждого города
На той же странице находится вкладка «Данные» для управления информацией для каждого города. Для вывода уникальной информации в компоненте используются несколько методов.
Во-первых, по умолчанию включена запись полей в плейсхолдеры, которые имеют префикс. И для вывода информации достаточно добавить в ваши чанки или шаблоны необходимый плейсходер, но главное — вызвать его не кешируемым. Например, так:
[[!+cf.phone]]Во-вторых, плейсхолдеры записываются при загрузке страницы, что может тормозить систему в некоторых случаях. Поэтому я добавил возможность отключить запись полей в плейсхолдеры. В этом случае для вывода информации для каждого города нужно вызвать сниппет cfField с нужным ключом:
[[!cfField ?&key=`phone`]]Управление ценами товаров
Для управления ценами на странице редактирования товара добавляется новая вкладка «Город — Цена». В ней вы найдете таблицу, где сможете указывать цену товара в зависимости от города. Если для какого-то города цена не указана, то будет браться его цена по умолчанию.
После того, как вы добавите цену для города, и обновите кеш, вы увидите новую цену, а рядом с ней старую, если вывод старых цен у вас настроен. Дополнительно ничего настраивать и выводить не нужно.
Документация к дополнению готовится. Само дополнение уже доступно в магазине modStore.pro и купить его можно всего за 390 рублей.
Комментарии: 92
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
— с геолокацией или нет?
Сравните, интересно. Ваш опробовать на тестовом сайте в modhost.pro можно? (не увидел возможности добавить его к тестированию).
1. В моём можно добавлять любые данные, а не только какие-то определённые.
2. В моём можно изменять цены товаров для различных городов.
3. Планируется сделать определение выбранного города и работу компонента по ссылкам и доменам. То есть, при переходе по ссылке moscow.site.ru или site.ru/moscow/ будет выбран город Москва и выводится данные, добавленные для этого города.
Я не знаю как сделать так, чтобы на тестовом сервере можно было устанавливать мои компоненты.
О процессе определения в описании ни слова, так же ни слова об этом нигде:
Купил плагин, прикрутил — всё отлично работает… Связал с магазинами через MIGX — короче плагин то что нужно! но с учетом того, что он платный, хотелось бы более «полированного» плагина) К примеру не хватает группировки по городам в Данных, более удобной фильтрации.
PS
GeoLocation в проекте не совсем подходит да и геолокация в рамках только активных списков городов — бред(
Об этом я совсем не подумал. Спасибо за совет, реализую этот функционал в ближайшем обновлении.
На данный момент у меня реализован странный функционал на сайте)
Процесс определения города происходит благодаря cityFields, но при подгрузке яндекс API, происходит его замена со всеми необходимыми данными. Если пользователь нажал «Да это мой город» — все гео данные яндекса сохраняются в сессию(кстати не помешало бы из базы SxGeo получать все данные которые возможно определить). Если же пользователь нажимает «Другой город» — то открываем модальное окно со строчкой для поиска города и списком городов CityFields, к строчке привязан kladr API и при выборе города подтягивается еще больше гео данных о местоположении пользователя. Пример в лс могу кинуть
Реализует ли данный модуль следующий функционал?
1. Страница контакты должна иметь разный контент в зависимости от города
2. Доставка оформляется только в города присутствия, выбирается из списка, желательно, чтобы активным сразу был пункт текущего города
3. В подвале и шапке будут чанки с контактной информацией, информация должна меняться в зависимости от выбранного города
Также хотелось бы узнать реализован ли функционал о котором писали 20 марта: а конкретно
Для этого просто вызовите сниппет cfCities с нужным оформлением и без добавления JS функций. Типа такого:
В чанк msOrder.city вставьте:
В чанк msOrder.city.row вставьте:
И сделайте обработку поля city в своём заказе. Чанки подгоняете под свои стили и готово.
К сожалению, ещё нет. Сейчас решается вопрос о том, как лучше его реализовать, чтобы со стороны пользователя компонента было меньше мороки и меньше необходимости вносить какие-то свои дополнительные правки, чтобы полностью реализовать решение.
когда я нахожусь к примеру на странице moscow.site.ru в разделе блог, я бы хотел видеть другие записи в блоге, чем люди из Санкт-Петербурга. Если да — то будет отличный компонент на перспективу для реализации мультирегиональности сайта.
Выводить разные товары для разных городов, не только цену. К примеру в Москве показывать одни товары, в Липецке — другие.
Например выбрал я Москва — и везде тексты у меня про Москву и Московскую область. Выбрал и Тверь — везде все про Тверь. ну и конечно сами контакты менять.
Это можно сделать с помощью данного компонента?
То есть для Москвы по Москве, для Санкт-Петербурга по Питеру?
И еще вопрос: каким образом работает старая цена? Нет ли возможности добавить в карточку товара рядом с ценой старую цену?
Старая цена работает так: если для города установлена цена, отличная от цены по умолчанию, то в плейсхолдер old_price запишется цена по умолчанию, а в плейсхолдер price — цена для города.
miniShop2 2.4.11-pl
pdoTools 2.9.1-pl
Или ищите ответ в логах ошибок php на сервере.
Примеры здесь:
и он правильно отображает карту для поддоменов.
Как сделать чтобы все товары.html выпали в карту сайта, а не только каталоги?
Или так карты сайта не делаеют?
То есть -1 означает, что все ссылки в плейсхолдере [[+url]] будут относительными, то есть, без адреса сайта.
В данном варианте все страницы должны попасть в карту сайта, в том числе товары.html.
вот хорошая карта получилась по каталогам, только товары не попали.
Яндекс редиректит карту сайта и всех поддоменов на москву…
site.ru/sitemap.xml > редирект moskva.auto-grow.ru/sitemap.xml
perm.site.ru/sitemap.xml > редирект moskva.auto-grow.ru/sitemap.xml
и т.п., очень желаю это исправить,
yandex.ru/support/webmaster/controlling-robot/robots-txt.html#sitemap
а робот яндекса заходит с московского айпи и видит что карты сайта всех поддоменов редиректятся сюда, на moskva.auto-grow.ru/sitemap.xml как то так, prnt.sc/guesx5
Вобщем задумлся, как исключение сделать, чтобы [[!geoCity]] карту сайта не редиректил, а в остальном работал как работает (фунционал нравится)
ps у меня оказывается авто-редирект ситифиелдс не в настройках включается, а вызовом этого [[!geoCity]].
[[*id:ne=`1295`or:if=`[[*id]]`:ne=`1314`:then=`[[!geoCity]]`]]
1295 и 1314 — id карт сайта
У вас город по-умолчанию отличается от Москвы?
Отличается город по умолчанию — site ru
И он правильно карту строит
Даже и не знаю как это решить, но очень интересно, пока просто выключил «Москва» в настройках компонента CityFields. Он у мня модифицирован, редиректы по ip не отключает, а где отключить я так и не понял))0
1. как можно сменить город по ссылке. Например нужно для рекламы в регионе чтобы точно был верный город (без субдоменов) что-то типа site.ru/page.html?city=1
2. Можно ли как-то исключить товар для определенных городов, не показывать его по условию для снипетов where или типа того.
3. Как происходит авто определение города, невижу привязки созданных горовод к гео данным или выбор происходит при совпадении имени города в базе гео данных
спасибо
Через ссылку работает только при включенной опции «Город в домене» и, соответственно, надо отправлять на соответствующий домен.
2. Надо подключить класс cfField и искать плейсхолдер
где 123 — это ID товара. И где, например, цены для города нет, то не выводим его.
3. Авто определение идёт по IP, находится город в базе SxGeo, затем берётся название города из их базы и ищется в БД сайта город по названию.
И еще один момент можно как-то ограничить список городов в выводимом select по их id (типа id=1,2,3). Порой бывает нужно показать не все города из списка а только часть, а отключать их нельзя. Разные наборы городов.
а вот по
я так понимаю надо сделать
Да? но где посмотреть структуру запроса, какие поля джоинить чтобы потом делать where по ним. Или я неверно понял.
Ничего не выходит. ( Может кто подскажет в чем ошибка?
исключает все товары города у которых не выставлены цены.
Остальное тоже решил. Кроме переключения города по ссылке без домена. Буду надеется автор добавит данную возможность в пакет.
Причем когда возникает не понятно, но все работает. Может, кто сталкивался
pdofetch.class.php: 188) [pdoTools] SELECT SQL_CALC_FOUND_ROWS
pdofetch.class.php: 189) [pdoTools] Error 42S22: Unknown column 'cfFieldPrices.value' in 'field list'
[2019-10-15 10:52:25] (ERROR @ /var/www/u150978/data/www/multisite/core/components/msearch2/model/msearch2/msearch2.class.php: 1137) [mSearch2] Method «get{*resourceValues» not exists in class «mse2FiltersHandler». Could not retrieve filters from "{*resource"
[2019-10-15 10:52:25] (ERROR @ /var/www/u150978/data/www/multisite/core/xpdo/xpdo.class.php: 644) Could not load class: cfField from mysql.cffield.
[2019-10-15 10:52:25] (ERROR @ /var/www/u150978/data/www/multisite/core/components/pdotools/model/pdotools/pdofetch.class.php: 172) [pdoTools] Error 42S22: Unknown column 'Pprice.value' in 'where clause'
Вот ошибки которые выдает лог
Импорт из csv я реализовывал, могу скинуть файлы для доработки функционала. В техподдержке тишина полная, такое ощущение, что компонент более не поддерживается.
Меня интересует вопрос, кто сталкивался с некорректной работой компонента с кириллическими доменами? С ними он не работает.
У меня после 30-го города, данные добавляются без названия города, вот так оно выглядит в админке:
при редактировании — вместо пустого названия города появляется правильный ID… 46
Проблема 30-м и всеми следующими городами.
пустымполем города не подведут?2) При установке даже на чистый MODX на демо modhost.pro не загружаются лексиконы. В меню вместо «cityFields» написано «cityfields_action». Также вместо ошибок выводятся названия лексиконов.
3) Можно ли как-то интегрировать это решение с msOptionsPrice2? Т.е. города и информацию для городов добавлять через cityFields, а цены регулировать msOptionsPrice2?
Например, если товар «iPhone 5» в двух цветах: красный и белый. 2 региона: Москва и Санкт-Петербург. В таком виде, как это сделано сейчас, можно лишь изменить отдельно цену для региона и отдельно цену для цвета, а если добавить как модификатор, то можно будет и для разных регионов и разных опций выставлять цену. К тому же, можно будет выставлять старую цену отдельно для каждой модификации.
Нашла таки)