Drupal → Узнать следующий/предыдущий термин

18.07.2013

Задача — зная tid термина, узнать следующий и предыдущий термин.

Решение:

/**
 * Return prev/next term.
 */
function helper_get_sibling_term($tid, $type) {
  $term = taxonomy_term_load($tid);
  if ($type == 'next') {
    $operator = '>';
    $direction = 'ASC';
  }
  else {
    $operator = '<';
    $direction = 'DESC';
  }
  return db_select('taxonomy_term_data', 'td')
    ->fields('td', array('tid', 'name'))
    ->condition('td.vid', $term->vid)
    ->where(
      "td.weight $operator :weight OR (td.weight = :weight AND td.name $operator :name)",
      array(':weight' => $term->weight, ':name' => $term->name)
    )
    ->orderBy('td.weight', $direction)
    ->orderBy('td.name', $direction)
    ->range(0, 1)
    ->execute()
    ->fetchObject();
}

Использование:

$prev_term = helper_get_sibling_term(123, 'prev');
$next_term = helper_get_sibling_term(123, 'next');
Написанное актуально для
Drupal 7
Похожие записи

Комментарии

Задача — зная tid термина, узнать следующий и предыдущий термин.
_______________________________________________________________
taxonomy_term_load($tid + 1);
_________________________________________________________________
наверное задачу надо озвучить
зная tid термина, узнать следующий и предыдущий термин из того же словаря ,что и данный термин

во первых tid + 1 может не существовать, во вторых термины сортируются по весу и по имени

Гость
28.08.2013, 10:14

Но ведь термины могут быть в разных словарях. На практике, особенно в для сео, полезнее будет выводить "соседей" из одного словаря. Подскажите, пожалуйта, что нужно добавить в вашем коде?

если вы прочитаете код, то поймёте, что поиск идёт в рамках одного словаря

Гость
28.08.2013, 11:56

точно! благодарю - разобрался! большое Вам спасибо!!!

Андрей
25.10.2013, 06:52

Подскажите пожалуйста, как адаптировать этот код для Drupal 6? Стоит задача, на странице термина выводить ссылки на следующий/предыдущий термин словаря по id и никак не могу решить ее.

Добавить комментарий