понедельник, 8 марта 2010 г.

Корзина товаров в CodeIgniter и русские буквы

При вызове $this->cart->insert() фреймворк проверяет поля регэкспом.
Если в product_id или product_name будет что-то отличное от латинских букв и цифр, то запрос успешно проигнорируется без каких-либо ошибок.
И такие баги я ненавижу больше всего.
Итак, чтобы починить, открываем /system/libraries/Cart.php.

В самом начале видим:
class CI_Cart {

// These are the regular expression rules that we use to validate the product ID and product name
var $product_id_rules = '\.a-z0-9_-'; // alpha-numeric, dashes, underscores, or periods
var $product_name_rules = '\.\:\-_ a-z0-9'; // alpha-numeric, dashes, underscores, colons or periods

Добавляем "а-я" в регэксп, должно получиться так:
var $product_id_rules    = '\.a-z0-9_-а-яА-Я'; 
var $product_name_rules    = '\.\:\-_ a-z0-9а-яА-Я';
Теперь переходим к методу function _insert($items = array())

Добавляем к проверке правило для уникода (буква u, после $/i).
Должно получиться так:
if ( ! preg_match("/^[".$this->product_id_rules."]+$/iu", $items['id']))
if ( ! preg_match("/^[".$this->product_name_rules."]+$/iu", $items['name']))
Теперь товары с русскими буквами должны сохраняться нормально.

9 комментариев:

Q комментирует...

Спасибо большое реально 3 часа морочил голову пока понял сто русские буквы не отрабатывают

wwarlock комментирует...

Да, наздоровье )

Рома комментирует...

Огромное спасибо. Тоже несколько часов думаю над данной проблемой

Анонимный комментирует...

Вот у меня ci2.1.0
Сделал все как Вы сказали, но все равно пишет "Compilation failed: invalid UTF-8 string at offset 13"

Я даже сам файл Cart в разных кодировках сохранял - бестолку...

Может надо в настройках ставить russian - искать перевод и тогда будет работать?

wwarlock комментирует...

@Анонимный (7 января 2012 г. 18:33)
К сожалению, не видя ваших исходников, я не могу сказать ничего конкретного.
Заархивируйте и выложите их куда-нибудь на файлообменник и я постарась помочь.

Анонимный комментирует...

Был бы девочкой расцеловл бы! Спаибо огромное.

Анонимный комментирует...

сделал все как написано. но товары с русским наименованием категорически не добавляет(
буду рад любой помощи! Спасибо!

wwarlock комментирует...

@Анонимный (21 мая 2012 г., 12:59)
Как я уже писал для @Анонимный (7 января 2012 г. 18:33)
К сожалению, не видя ваших исходников, я не могу сказать ничего конкретного.
Заархивируйте и выложите их куда-нибудь на файлообменник и я постарась помочь.

Анонимный комментирует...

Спасибо огромное!!!
ОЧень помогло
тоже не сразу понял в чём дело