In English
:: О компании :: Портфолио :: Основные услуги :: Дополнительные услуги :: Информация

Как обойти лимит taxonomy_select_nodes() в Drupal

В CMF Drupal есть такая функция taxonomy_select_nodes() она очень хорошо подходит для выборки узлов связанных с тем или иным термином таксономии и разбивкой результата по страницам с помощью пейджера, но есть у неё одно очень мерзкое НО: жестко установлен лимит на выдачу узлов, это значит, что вы не сможете, например получить все связанные узлы - вам вернет только первые 10 штук.

Решений этой проблеммы 2: либо сделать свою функцию, либо что-то подкрутить, что бы изменился лимит taxonomy_select_nodes(). Я предлагаю второй вариант решения.

Весь основной глюк или фича наблюдается в следующих строчках кода taxonomy_select_nodes() (когда идет выборка результата):

if ($pager) {
  $result = pager_query($sql, variable_get('default_nodes_main', 10), 0, $sql_count, $args);
}
else {
  $result = db_query_range($sql, $args, 0, variable_get('feed_default_items', 10));
}

Наши главные враги это переменные 'default_nodes_main' и 'feed_default_items'. Первая срабатывает в том случае, если вы используете пейджер.

Решается эта проблемма конечно как всегда через одно место, но зато работает потом все очень хорошо. Для этого придется навремя подправить конфигурационные переменные Drupal. Привожу пример для варианта вызова функции без использования пейджера (4 аргумент функции равен false):

global $conf;

// Берем текущее значение
$feed_items_tmp = isset($conf['feed_default_items']) ? $conf['feed_default_items'] : null;

// Устанавливаем макс значение (если вам вообще лимит не нужен)
$conf['feed_default_items'] = PHP_INT_MAX;

// Выбираем все узлы
$nodes_result = taxonomy_select_nodes( array($term->tid), 'or', 0, false, 'n.title ASC');

// Возвращаем переменную в предыдущее состояние
$conf['feed_default_items'] = $feed_items_tmp;

Если же вы захотите использовать пейджер, то вместо 'feed_default_items' нужно будет использовать 'default_nodes_main'. Вот и все.

В 7 версии Drupal эту багу пофиксили. Кому интересно смотри api taxonomy_select_nodes грузоперевозки в москве