пятница, января 27, 2006

Баг сортировки числовых значений

Баг заключается в не корректном сравнении двух числовых значений в функциях сортировки файла /usr/system/common_extfunctions.inc.php. Т.е., например, мы сортируем по ID, у нас есть в хранилище записи с ID: 1,2,3,4,5,6,7,8,9,10,11. После выполнения сортировки _ORDER(INDEX, ID, ASC)_ в приложении get_infochannel(или любом другом аналогичном) результат будет следующим: 1,10,11,2,3,4,5,6,7,8,9.

Привожу пример того, что было и то, на что я это поменял, объяснять не буду, кто разбирается - тот сам все легко поймет:

// То, что было
if(!defined("cmp_indexasc")) {
function cmp_indexasc($a, $b) {
global $sapi_obj;
$index = $sapi_obj->env["index"];
return strcmp($a[$index], $b[$index]);
}
define("cmp_indexasc", 1);
}

if(!defined("cmp_indexdesc")) {
function cmp_indexdesc($a, $b) {
global $sapi_obj;
$index = $sapi_obj->env["index"];
return strcmp($a[$index], $b[$index]);
}
define("cmp_indexdesc", 1);
}

// То, на что надо заменить
if(!defined("cmp_indexasc")) {
function cmp_indexasc($a, $b) {
global $sapi_obj;
$index = $sapi_obj->env["index"];
if(is_numeric($a[$index]))
return ($a[$index] > $b[$index]) ? -1 : 1;
else
return strcmp($a[$index], $b[$index]);
}
define("cmp_indexasc", 1);
}

if(!defined("cmp_indexdesc")) {
function cmp_indexdesc($a, $b) {
global $sapi_obj;
$index = $sapi_obj->env["index"];
if(is_numeric($a[$index]))
return ($a[$index] > $b[$index]) ? 1 : -1;
else
return strcmp($a[$index], $b[$index]);
}
define("cmp_indexdesc", 1);
}
Так же я предлагаю скачать уже исправленный файл, если вдруг кому-то лень переделывать самому ;)

Скачать: common_extfunctions.inc.zip
Для версии: Sapid 1.2.3 RC3

вторник, января 24, 2006

Облегченная альтернатива get_infochannel

На днях сделал приложение, которое по сути является облегченной версией get_infochannel, но в отличии от него не создает в хранилище папок типа /usr/xml/vdb/news/, создается только индексный файл.

Данный модуль идеален для создания различных списков, прайс-листов и т.д.

Скачать: get_list.zip
Для версии: Sapid 1.2.3 RC3