Русский поиск в Tienda – проблемы с кириллицей – участвуем в развитии интернет-магазина

Рассматриваемая проблема – некорректная работа поиска по магазину, если в поисковом запросе встречаются русские буквы – поиск не находит товаров, возвращая пустой результат. Путём перехвата запросов, выясняем что имеет место быть искажение кириллических символов на этапе формирования SQL-выборки. Происходит это в следствии использования функции strtolower() там где нужно использовать её multi-byte аналог mb_strtolower(). Задача отлова бага несколько затрудняется сложностью локализации кода. Но, сложности подобные возникают только при первом использовании, потому следуем инструкциям и экономим время учась на чужом опыте:

  1. Открываем файл administrator/components/com_tienda/models/products.php
  2. Правим строки 50 и 67 (номера могут изменяться в зависимости от версии, потому ориентируемся на исходный код):



Было:

50  $key = $this->_db->Quote('%'.$this->_db->getEscaped(trim(strtolower($filter))).'%');

67  $key = $this->_db->Quote('%'.$this->_db->getEscaped(trim(strtolower( $filter_namedescription))).'%');

Стало:

50  $key = $this->_db->Quote('%'.$this->_db->getEscaped(trim(mb_strtolower($filter, 'UTF-8'))).'%');

67  $key = $this->_db->Quote('%'.$this->_db->getEscaped(trim(mb_strtolower( $filter_namedescription, 'UTF-8'))).'%');


Лирическое отступление:

Вероятно, многие разработчики уже успели ознакомиться с новым и весьма перспективным компонентном интернет-магазина Tienda от Dioscouri Design для Joomla.

Уже сейчас, на этапе активной разработки, Tienda представляет собой программный продукт вполне способный заменить тот же многострадальный VirtueMart. Как не погляди, во всём Tienda способен продемонстрировать качества превосходящие старичка-ветерана с полей электронной коммерции, созданного в незапамятные времена ещё для Mambo и с изрядным скрипом портированного под первые версии Joomla (а после, с ещё большими проблемами, подтянутого под Joomla 1.5) – и производительность у новичка несоизмеримо выше, и административный интерфейс более удобный, и MVC-архитектура, в купе с «правильным» кодом, разработку упрощает.

Минусы нового интернет-магазина Tienda вполне закономерны, и, я бы сказал, неизбежный для любого нового продукта – отсутствие готовых специфических функций реализованных сторонними разработчиками в виде плагинова, да мелкие баги/недоработки в существующем коде.  Но, что касается первого, то это: а) вопросе времени б) для серьёзной разработки минусом не является, так как, (и это важно!), презумпцией здравого смысла прямо противопоказано пытаться реализовывать сколь-нибудь крупный нетиповой при помощи готовых стандартных решений – максимум CMF-функции, не более.

Ну, а что касается второго минуса, то не столь уж он и велик – спасибо разработчикам из Dioscouri Design – и значимость его мы, пусть немного, но всё же уменьшим прямо здесь и сейчас.

PS: Простым и естественным образом, статейка с парой строк кода увеличилась до размеров нескольких тысяч символов =) Тем лучше – будем считать её заодно и кратким обзором компонента интернет-магазина Tienda для Joomla.

  1. Carma
    6th Сентябрь 2011 в 15:14

    Большущее спасибо за статью!
    Изза етого мелкого пакостного бага всерьез задумывался сменить движок для интернет магазина. Но joomla чертовски удобная, virtuemart не уважаю, а в tienda клевая но писк не ищет русские названия. Без малого три дня бился над поиском и так его переписывал и едак, а ему хоть бы хны. Статья реально спасла от нервного расстройства и кучу времени секономила. Спасибо.