понедельник, февраля 20, 2006

"Новая" версия Sapid 1.2.3.06

Описание новшеств и линк для скачки тут.

Лично моё мнение, это очередная "новинка" Sapid'а, в которой осталась та же куча багов, однако добавлены некоторые новые ;) А если серьезно, то изменения для большинства пользователей будут не заметны, продолжаем ждать Sapid 2.0 или хотя бы открытия для общественности спецификации XML Sapies 2.0. А ещё, очень хотелось бы взглянуть на AJAX Framework от Павла Левковича из того же Red Graphic Systems, о котором пишет в своём блоге Дмитрий Шейко. Однако, судя по всему, разработан этот Framework только для внутреннего использования и увидеть его можно будет только в коммерческой CMS - Site Sapiens 3.0 разработкой коего, судя по всему, и заняты в данный момент создатели Sapid'а. Однако, при известной доли оптимизма, можно утверждать, что этот фреймворк перекачует впоследствии и в, так ожидаемый всеми, Sapid 2.0, до выхода которого, очевидно, ещё очень далеко. :(

воскресенье, февраля 05, 2006

Classic Photo Gallery

Classic Photo Gallery представляет собой ровно то, что следует из названия, т.е. обычная, классическая фото галерея.

Внес некоторые изменения в файлы /usr/system/image_resize.inc.php и /usr/system/insert_qcimage.php. Теперь в параметре QC картинки с иконкой можно указывать в параметре resize не высоту и ширину, а только ширину, а высота будет подбираться автоматически. В стандартном варианте мы должны обязательно и высоту и ширину, в таком случае случается, что обрезается самая интересная часть изображения.

В принципе, все полностью можно понять, если посмотреть пример DDC и уже созданные галереи. Но можно перечислить то, что было реализовано:
  • Создание альбомов из админской части;
  • Добавление фото из админской части;
  • Редактирование альбомов и фото;
  • Постраничный вывод альбомов и фотографий;
  • Возможность использования модуля комментариев, работающего на виртуальных страницах (см. ниже);
Скачать: classic_gallery.zip
Для версии: Sapid 1.2.3 RC3

Версия с комментариями (в архив помимо галереи включен модуль и приложение комментариев, которые работают на виртуальных страницах)

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

четверг, февраля 02, 2006

Баг сортировки по дате

Вот отловил ещё одного жука, причем в уже знакомом месте - в сортировке. Бинарно-безопасное сравнение значений не справилось с корректной сортировкой по данным вида "21/01/2006" и выдало совсем не то, что надо.

Как бороться? Если вашей целью стоит сортировка по полю DATE, а не DATE_CREATE или ID, т.е. в процессе добавления новостей у вас случается, что вы добавляете новости задним числом или же наоборот, опережая время, вам не обойтись без это "латалки".

Итак, открываем /usr/system/common_extfunctions.inc.php (для большей ясности в примере использую стандартный файл, а не тот, что я уже подправлял, как описывалось ранее в этом блоге). Далее опускаемся в низ и находим там вот такие строки:

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);
}
Кстати обратите внимание, тут ещё есть баг, который очевиден - и в случае ASC сортировке и в случае DESC производится одна и та же сортировка. Но сейчас мы все это поправим, а заодно не забудем про ранее описанный баг сортировки по ID. Заменяем это дело на следующее:
if(!defined("cmp_indexasc")) {
function cmp_indexasc($a, $b) {
global $sapi_obj;
$index = $sapi_obj->env["index"];
if($index=='ID')
return ($a[$index] > $b[$index]) ? -1 : 1;
else if ($index=='DATE'){
$date_a=explode('/',$a[$index]);
$date_b=explode('/',$b[$index]);
$a_index=mktime (0,0,0,$date_a[1], $date_a[0], $date_a[2]);
$b_index=mktime (0,0,0, $date_b[1], $date_b[0], $date_b[2]);
return strcmp($a_index,$b_index);
}
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($index=='ID')
return ($a[$index] > $b[$index]) ? 1 : -1;
else if ($index=='DATE'){
$date_a=explode('/',$a[$index]);
$date_b=explode('/',$b[$index]);
$a_index=mktime (0,0,0, $date_a[1],$date_a[0], $date_a[2]);
$b_index=mktime (0,0,0, $date_b[1], $date_b[0], $date_b[2]);
return strcmp($b_index,$a_index);
}
else
return strcmp($b[$index],$a[$index]);
}
define("cmp_indexdesc", 1);
}
Скачать: common_extfunctions.inc.zip
Для версии: Sapid 1.2.3 RC3

Если кто-то будет это использовать, пожалуйста, отпишитесь о результатах в комментариях.

среда, февраля 01, 2006

get_comments - отдельное приложение для комментариев

Стандартный модуль комментариев Sapid'а не работает на виртуальных страницах, а для чего ещё нужны комментарии как не для подобных разделов? Поэтому, я и сделал следующее приложение (и DDC, который не сильно отличается от оригинала), которое позволяет без проблем вставлять комментарии на виртуальные страницы, что в свою очередь сильно расширяет возможности веб-строителя, позволяет создавать новые разделы, комбинируя, например, стандартный модуль типа новостей и модуль комментариев, создавать блоги и т.д.

Собственно сделал я его давно, сейчас просто привел в порядок, кое-что подправил.

В предлагаемом архиве представлены следующие файлы:

  • /usr/extensions/get_comments.inc.php - само приложение;
  • /usr/xml/fullcomments.xml - DDC, который можно вставлять в другие DDC;
  • /mvc/controller/postmethod_analysis.inc.php - этот файл следует перезаписать поверх стандартного. Отличаются они очень мало, а именно добавлен редирект после добавления комментария на туже страницу (защита от refresh-флуда), и ещё кое-какие несущественные мелочи в секции добавления комментария.

В самом файле DDC (fullcomments.xml) следует выделить лишь несколько моментов:
- параметры вызова функции get_comments идентичны параметрам вызова в приложениях get_list и get_infochannel, с той лишь разницей, что здесь их вообще всего два: _CHANNEL()_ и _ORDER()_;
- Путь к индексному файлу хранилища указывается не только в параметре _CHANNEL()_, но и в форме добавления комментария в , как в стандартном модуле комментариев, с той лишь разницей, что здесь его нужно указывать без окончания .xml.

Скачать: get_comments.zip
Для версии: SAPID 1.2.3 RC3
Примечание: Корректная работа только при использовании mod_rewrite.