Склонение городов в Opencart

Как склонять города с сделать предложение правильным.

январь 27 , 2018

Приветствую! Сегодня хочу рассказать как сделать автоматическое склонение городов в интернет магазине на Opencart.

Применить можно не только на этом движке, но и на других системах, просто адаптировав код.

Предыстория

Есть интернет магазин который имеет поддомены и автоматическое определение города. Так вот, модуль который определят город отдает существительное название города. Например Москва, Омск, Киев и т.д. Но это не подходит если мы это название применяем для формирование текста, предложения или мета тегов.

Например в зависимости от населенного пункта мета тег title будет таким

Купить холодильник Samsung в Омск, где город Омск - автоматический подставленный из модуля GEO IP

Но нам это не подходит потому что надо сделать красивый title

Купить холодильник Samsung в Омске - то есть со склонением населенного пункта.

Как автоматически склонять город

Для этого воспользуемся общедоступной библиотекой на PHP phpmorphy. Для начала надо скачать саму библиотеку и словари. Но дабы не утруждать вас что куда загружаем, я уже все подготовил и внизу статьи будет архив со всем готовеньким :)

Так вот, для начала скачиваете архив и загружаете все из него в корень сайта.

Список того что загружается:

  • Папка phpmorphy идет в папку system/library => сама библиотека со словарями
  • Файл declension.php идет в папку catalog/controller/common => мой контроллер для работы с классом

После загрузки файлов на сервер делаете запрос в базу данных:

CREATE TABLE `oc_declension` (
  `city` varchar(255) NOT NULL,
  `declension` varchar(255) NOT NULL DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
После чего достаточно в любом контроллере прописать:

$city = $this->load->controller('common/declension', $city);

где $city - это город для склонения. Например вход будет Москва, выход Москве.

Как это работает

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

Решение можно переделать под себя, достаточно изучить документацию по работе с библиотекой phpmorphy. В данной реализации немного нарушены принципы MVC - идет запрос в базу данных из под контроллера а не из модели, но для такого функционала я считаю что создавать свою модель не целесообразно.

Скачать готовое решение