Буду краток.
На сайте был TV с типом text. В него писались id ресурсов, через запятую. В какой-то момент этот TV стал Listbox. Но в одном из документов по старой памяти сохранилась запись «22,». В итоге, когда вызывался этот TV в шаблоне Ditto (вместе с самописным модификатором PHx), падал сайт с ошибкой Mysql.
Этот безобидный на первый взгляд баг стоил мне суток простоя в работе. Проблема была в том, что документ с ошибкой в TV был одним из нескольких сотен. Вобщем, шанс отыскать его был практически нулевым.
В итоге выяснилось, что в API функции
getDocuments нет проверки на такие вещи. Пришлось внести исправления.
Итак, файл
document.parser.class.inc.php, строка 1458:
function getDocuments($ids= array (), $published= 1, $deleted= 0, $fields= "*", $where= '', $sort= "menuindex", $dir= "ASC", $limit= "") {
if (count($ids) == 0) {
return false;
} else {
//вот тут я вставил проверку
/**++**/
foreach ($ids as $id) {
if (intval($id) != 0) $newIds[] = intval($id);
}
$ids = $newIds;
/**++**/
//конец правки
Я понимаю, что шанс поймать такие грабли крайне невелик. Но я также помню, что мизера всегда ходят парами. Может быть кому-то и пригодится.