Склонение городов в Opencart
Как склонять города с сделать предложение правильным.
Приветствую! Сегодня хочу рассказать как сделать автоматическое склонение городов в интернет магазине на 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 - идет запрос в базу данных из под контроллера а не из модели, но для такого функционала я считаю что создавать свою модель не целесообразно.