Блог студии RGB  http://blog.rgb.kiev.ua Разумные пределы и пределы разумного. Путеводные заметки Tue, 06 Sep 2011 13:27:50 +0000 ru hourly 1 http://wordpress.org/?v=3.2.1 Русский поиск в Tienda – проблемы с кириллицей – участвуем в развитии интернет-магазина http://blog.rgb.kiev.ua/2011/08/tienda-search-russian/ http://blog.rgb.kiev.ua/2011/08/tienda-search-russian/#comments Sat, 20 Aug 2011 10:52:09 +0000 admin http://blog.rgb.kiev.ua/?p=345 Рассматриваемая проблема – некорректная работа поиска по магазину, если в поисковом запросе встречаются русские буквы – поиск не находит товаров, возвращая пустой результат. Путём перехвата запросов, выясняем что имеет место быть искажение кириллических символов на этапе формирования 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.

]]>
http://blog.rgb.kiev.ua/2011/08/tienda-search-russian/feed/ 2