Skip to content

Emagedev/Morpher

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

API сайта morpher.ru для Magento 1.9

Склонятор для Magento

Этот модуль позволит склонять слова в зависимости от контекста с помощью онлайн сервиса morpher.ru. Первый запрос осуществляется через REST API, дальнейшие - из кэша в базе данных, что позволяет не нагружать сервис лишними запросами (они ограничены по бесплатной и платной подпискам).

Может быть полезно для склонения количеств товаров или имен пользователей, ну и для чего-нибудь ещё.

Все передаваемые в модуль слова и фразы должны быть в именительном падеже

Использование с числами

# Mage::helper('morpher')->inflectWordByNumber($number, $phrase [, $keepNumber = false [, $translate = false ]])

Функция поможет склонять слова рядом с числами, например, для количества товаров в каталоге или корзине.

  • $number определяет число, относительно которого нужно склонить слово
  • $phrase определяет фразу или слово для склонения
  • $keepNumber определяет, стоит ли оставлять число перед словом или фразой
  • $translate определяет, необходимо ли переводить слово или фразу перед склонением, и каким модулем (может быть строкой, например yourmoule, или логическим значением)

Пример:

Mage::helper('morpher')->inflectWordByNumber(5, 'item', true, 'catalog');

Вернет:

5 товаров

Mage::helper('morpher')->inflectWordByNumber(1, 'piece', false, 'yourmodule');

Вернет:

1 штука

В вашем модуле thing должно быть переведено как штука

Склонение имён

# Mage::helper('morpher')->inflectName($name, $inflection [, $flags = array()])

Функция поможет склонять имена ваших пользователей.

  • $name имя пользователя
  • $inflection склонение
  • $flags определяет дополнительные флаги для более точного склонения

API неплохо различает имена, но если есть возможность, следует указать род в флагах или использовать следующие методы:

  • inflectMaleName($name, $inflection [, $flags = array()]) для мужских
  • inflectFemaleName($name, $inflection [, $flags = array()]) для женских

Пример:

Mage::helper('morpher')->inflectMaleName('Ломоносов, Михаил Васильевич', Emagedev_Morpher_Helper_Data::DATIVE);

Вернет:

Ломоносову, Михаилу Васильевичу

Mage::helper('morpher')->inflectFemaleName('Любовь Эдуардовна Соболь', Emagedev_Morpher_Helper_Data::GENITIVE);

Вернет:

Любови Эдуардовны Соболь

Общий случай

# Mage::helper('morpher')->inflectWord($phrase, $inflection [, $multi = false [, $flags = array() [, $translate = false ]]])

Функция склоняет слово с заданными параметрами.

  • $phrase фраза или слово для склонения
  • $inflection склонение
  • $multi определяет множественное ли число
  • $flags определяет дополнительные флаги для более точного склонения
  • $translate определяет, необходимо ли переводить слово или фразу перед склонением, и каким модулем (может быть строкой, например yourmoule, или логическим значением)

Авторизация на morpher.ru

Авторизация необходима для расширения лимита на склонение слов. Ваш логин и пароль вы можете ввести в панели управления в конфигурации. Настройки расположены в группе API (в стандартном переводе СЕРВИСЫ) во вкладке API сайта morpher.ru.

Шпаргалка

# Склонения

Если ваш кодстайл не позволяет напрямую использовать кириллицу в коде, для склонений есть алиасы, записанные как константы в хелпере Emagedev_Morpher_Helper_Data.

Падеж Символ Алиас
Именительный И Emagedev_Morpher_Helper_Data::NOMINATIVE
Родительный Р Emagedev_Morpher_Helper_Data::GENITIVE
Дательный Д Emagedev_Morpher_Helper_Data::ACCUSATIVE
Винительный В Emagedev_Morpher_Helper_Data::DATIVE
Творительный Т Emagedev_Morpher_Helper_Data::INSTRUMENTAL
Предложный П Emagedev_Morpher_Helper_Data::PREPOSITIONAL
Предложный (о) П Emagedev_Morpher_Helper_Data::PREPOSITIONAL_WITH_PREFIX
Местный (см. API) М Emagedev_Morpher_Helper_Data::LOCATION

# Флаги

Нужны для повышения качества склонения. Есть слова, которые могут склоняться по-разному, например:

  • Фамилия Резник склоняется у мужчин и не склоняется у женщин;
  • Ростов в творительном падеже будет Ростовым, если это фамилия, и Ростовом, если это город;
  • тестер в винительном падеже будет тестера, если это человек, и тестер, если имеется в виду прибор.

Методы inflectName, inflectMaleName, inflectFemaleName используют необходимые флаги по умолчанию

Флаг Описание Алиас
Feminine И Emagedev_Morpher_Helper_Data::FLAG_FEMININE
Masculine Р Emagedev_Morpher_Helper_Data::FLAG_MASCULINE
Animate Д Emagedev_Morpher_Helper_Data::FLAG_ANIMATE
Inanimate В Emagedev_Morpher_Helper_Data::FLAG_INANIMATE
Common Т Emagedev_Morpher_Helper_Data::FLAG_COMMON
Name П Emagedev_Morpher_Helper_Data::FLAG_NAME

Юнит тесты

Основная логика покрыта, для запуска нужен модуль EcomDev_PHPUnit

To Do:

  • Покрыть тестами логику имен
  • Добавить кейс для предложно-падежных форм для мест (теги <где>, <куда> и <откуда>)
  • Добавить кейс для прилагательных

N.B. Не забывайте модифицировать ключи кэша для корректной работы с числами.

N.B. Так как функции модуля - косметические, модуль как правило не поднимает ошибок. Если что-то работает некорректно, стоит посмотреть в логи.

Описание API тут: http://morpher.ru/ws3/

Все совпадения с реальными лицами в примере случайны.