Чтобы делать на сайте красивые картинки штрих-кодов использовал модуль Barcode. Он создает CCK поле, в которое пользователь вводит цифры, а на выходе модуль генерирует соответствующую картинку.
Очевидно, что штрих-код вводится не просто так, а чтобы потом сделать по нему поиск товара. И вот тут нас подстерегает кака - несмотря на то, что это CCK - оно не индексируется. Т.е. поиск по нему не сделать. Epic Fail!
И как я только с ним не трахался!
Решение пришло неожиданно.
Создаем новое CCK поле и делаем его скрытым в форме создания продукта. В это поле будет копироваться значение штрих-кода.
При создании продукта, с помощью модуля Rules назначаем нашему созданному полю значение поля штрих-код. Все.
Обязательно (!) выводить наше созданное поле в ноде, а то искать не будет. Все.
Выглядит это так.
Rules -> Node: Content is going to be saved
Do
Populate saved content's field 'field_barcodetext'
PHP код для вставки:
$a = ($node->field_barcode[0]['barcode']);
return array(
0 => array('value' =>$a, 'view' => $a),
);
Как вы поняли, field_barcode это поле CCK модуля Barcode. В переменной barcode лежит текстовое значение штрих-кода.
field_barcodetext это созданное нами CCK поле для вывода.
Таким образом можно сделать поиск по любому контенту, который не индексируется стандартным модулем Search.
Очевидно, что штрих-код вводится не просто так, а чтобы потом сделать по нему поиск товара. И вот тут нас подстерегает кака - несмотря на то, что это CCK - оно не индексируется. Т.е. поиск по нему не сделать. Epic Fail!
И как я только с ним не трахался!
Решение пришло неожиданно.
Создаем новое CCK поле и делаем его скрытым в форме создания продукта. В это поле будет копироваться значение штрих-кода.
При создании продукта, с помощью модуля Rules назначаем нашему созданному полю значение поля штрих-код. Все.
Обязательно (!) выводить наше созданное поле в ноде, а то искать не будет. Все.
Выглядит это так.
Rules -> Node: Content is going to be saved
Do
Populate saved content's field 'field_barcodetext'
PHP код для вставки:
$a = ($node->field_barcode[0]['barcode']);
return array(
0 => array('value' =>$a, 'view' => $a),
);
Как вы поняли, field_barcode это поле CCK модуля Barcode. В переменной barcode лежит текстовое значение штрих-кода.
field_barcodetext это созданное нами CCK поле для вывода.
Таким образом можно сделать поиск по любому контенту, который не индексируется стандартным модулем Search.
А теперь как нужно делать!
Модуль Search глючит на больших числах. И даже, если контент индексируется в принципе, если это будет число из 13 и более цифр, то он его не найдет. Как оказалось, Barcode индексируется.
Для того, чтобы все получилось необходимо хакнуть модуль Search.
в файле search.module можно заменить два раза вызов
$num = is_numeric($word);
на
$num = is_int($word);
т.к. далее к коде идет преобразование к int: $word = (int)ltrim($word, '-0'); поэтому все значения больше PHP_INT_MAX преобразовываются в этот самый PHP_INT_MAX.
Вот и все.