• snipets
  • pantey
08.06.2012

Результат работы сниппета:

Drupal 6:

  1. $terms = db_query("
  2. SELECT tid, name, (
  3. SELECT COUNT(*) FROM {term_node} tn
  4. LEFT JOIN {node} n ON tn.nid = n.nid
  5. WHERE tn.tid = td.tid AND n.status = 1
  6. ) node_count FROM {term_data} td
  7. WHERE vid = %d
  8. ORDER BY weight
  9. ", ID_vocabulary);
  10.  
  11. $items = array();
  12. while ($term = db_fetch_array($terms)) {
  13. $items[] = l($term['name'], 'taxonomy/term/' . $term['tid']) . ' (' . $term['node_count'] . ')';
  14. }
  15.  
  16. echo theme('item_list', $items);

Drupal 7:

  1. $terms = db_query("
  2. SELECT tid, name, (
  3. SELECT COUNT(*) FROM {taxonomy_index} ti
  4. LEFT JOIN {node} n ON ti.nid = n.nid
  5. WHERE ti.tid = td.tid AND n.status = 1
  6. ) node_count FROM {taxonomy_term_data} td
  7. WHERE vid = :vid
  8. ORDER BY weight
  9. ", array(':vid' => ID_vocabulary));
  10.  
  11. $items = array();
  12. foreach ($terms as $term) {
  13. $items[] = l($term->name, 'taxonomy/term/' . $term->tid) . ' (' . $term->node_count . ')';
  14. }
  15.  
  16. echo theme('item_list', array('items' => $items));

Вместо ID_vocabulary - необходимо прописать ID словаря, из которого будут вытаскиваться значения.

Узнавай о новых статьях сайта - первым. Просто подпишись на рассылку.

Комментарии (41)

Profile picture for user Николай
Favstkina
07.07.2012

спасибо за инфу - тока drupalfly.ru почему то у меня медленно грузится - что может быть не так?

Profile picture for user pantey
pantey
13.07.2012

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

Profile picture for user Николай
golddatalto
16.07.2012

Актуальная темка поста , ну и портальчика в общем.

Profile picture for user Николай
marintsSER
17.03.2013

Спасибо большое. Прочитал с огромным интересом. Добавил в закладки – потом закреплю.)


Profile picture for user Николай
handnoulisyn
17.07.2012

Обожаю поглазеть контент такого формата.

Profile picture for user pantey
pantey
18.07.2012

Главное, что бы это ещё где нибудь пригодилось!

Profile picture for user Николай
gesstodehe
05.08.2012

Да, а я предполагал все ровно наоборот. Глаза открыли, большое спасибо!!!

Profile picture for user Николай
onslototdei
06.08.2012

Не часто попадается публикации на эту тему. Будем ждать продолжения...

Profile picture for user Николай
tersnabrialpow
17.11.2012

Заметка достойна, что бы существовать на этом сайте. Глаз алмаз, полное попадание в точку...

Profile picture for user Николай
Виталик
17.11.2012

А можно по подробнее, как и где это делать, или хотя бы что надо знать что бы понять что надо делать? Это драш или окно терминала?

Profile picture for user pantey
pantey
18.11.2012

Это сниппет...Как работать со сниппетами в Drupal, есть специально ссылка в конце каждой публикации "Сниппет". PHP сниппет. Как им пользоваться в Drupal

Profile picture for user Николай
Виталик
18.11.2012

Спасибо, как я раньше ссылку не увидел)). Вообще хороший ресурс, спасибо ещё раз. А какой WISWIG редактор здесь используется?

Profile picture for user pantey
pantey
19.11.2012

редактор вот этот.bueditor.

Profile picture for user Николай
Dobry
21.12.2012

Хороший сниппет, спасибо за него!

А как для D7 вывести не в один столбик, а настраиваемый в два-три столбца?
И если бы с подразделами выводил, цены ему не было, но это наверное ближе к сказке о рыбаке и рыбке, где Dobry остается у разбитого корыта :))

Profile picture for user pantey
pantey
21.12.2012

а что вы подразумеваете под "а настраиваемый в два-три столбца" ??? подробнее можно!

Profile picture for user Николай
Dobry
24.12.2012

Сейчас выводит в один столбец, вот пример настраиваемого отображения с иерархией, где можно поменяв цифру в переменной выводить например в два-три столбца. Ну и обернуть в дивы или как здесь h2 для родителя иерархии, чтоб css прописать можно было.

';
  $count = 0;
  $total = count($tree);
  
  foreach ($tree as $tid => $term) {
    if ($count % $cols == 0) {
      $output .= '';
    }
    
    $item = '

'. l($term->name, taxonomy_term_path($term)) .'

'; $children_list = array(); $children = taxonomy_get_children($term->tid, $vid); $i = 1; foreach (taxonomy_get_children($term->tid, $vid) as $child) { $children_list[] = l($child->name, taxonomy_term_path($child)); if ($limit != 0 && $i >= $limit) break; $i++; } if (count($children) > $limit) { $children_list[] = l('...', taxonomy_term_path($term)); } $count++; $item .= implode(' / ', $children_list); $output .= ''. $item .''; if ($count % $cols == 0 || $count == $total) { $output .= ''; } } $output .= ''; return $output; } ?>
Profile picture for user Николай
Dobry
29.12.2012

Пропали вы что-то, я поподробнее вам ответил, что вы по этому поводу думаете?

Profile picture for user pantey
pantey
29.12.2012

да не пропадал, просто времени не хватает, попозже посмотрю что можно сделать.

Profile picture for user Николай
Dobry
29.12.2012

ясно

Profile picture for user Николай
Dobry
29.12.2012

Кто у кого код увел? вряд ли xandeadx http://xandeadx.ru/blog/drupal/18

Profile picture for user pantey
pantey
29.12.2012

так это совершенно открытая информация, которую предоставляет API Drupal, на их официальном ресурсе. Владелец в любом случае Drupal.org

Profile picture for user Николай
Dobry
29.12.2012

ааа, семён семеныч :)

Profile picture for user Николай
Dobry
29.12.2012

Попробую вывести через views

Profile picture for user Николай
Dobry
29.12.2012

Сделал по этому примеру http://xandeadx.ru/blog/drupal/415 формат grid
Если у вас запрещено ссылки на другие сайты ставить, удаляйте, если нет, может кому поможет.
В общем мой вопрос отменяется :)

Profile picture for user pantey
pantey
29.12.2012

ок. а я думал, что вам нужен именно сниппет а не вьюха. А так конечно, вьюха поможет.

Profile picture for user Николай
Dobry
29.12.2012

Да мне решение нужно было.
В любом случае спасибо вам за материалы и уроки

Profile picture for user pantey
pantey
29.12.2012

А так вот код, который обернёт все выводимые термины в div с классом test

$terms = db_query("
  SELECT tid, name, (
    SELECT COUNT(*) FROM {taxonomy_index} ti
    LEFT JOIN {node} n ON ti.nid = n.nid
    WHERE ti.tid = td.tid AND n.status = 1
  ) node_count FROM {taxonomy_term_data} td
  WHERE vid = :vid
  ORDER BY weight
", array(':vid' => id_VOCABULARY));
  
$items = array();
foreach ($terms as $term) {
  $items[] = '<div class="test">' .l($term->name, 'taxonomy/term/' . $term->tid) . ' (' . $term->node_count . ')'.'</div>';
}
  
echo theme('item_list', array('items' => $items));

а там дальше можете хоть в таблицу их запихать, в зависимости, что вам больше подходит.

Profile picture for user Николай
Dobry
29.12.2012

Спасибо, пригодится!

Profile picture for user Николай
smalser
05.03.2013

как к данному коду прикрутить картинки.
К примеру вывел термин и перед ним картинку с помощью $term->tid.png

Profile picture for user pantey
pantey
05.03.2013

картинка через что у вас привязана к термину?

Profile picture for user Николай
smalser
06.03.2013

она не чем не привязана. вот я хочу ее и прмивязать
к примеру есть переменная $pole = arey()

и потом это все вывести

Profile picture for user pantey
pantey
06.03.2013

так у вас для каждого термина должна быть своя картинка? или одна для всех одинаковая? Если одна для всех, то в цикл допишите вывод вашего изображения

$items = array();
foreach ($terms as $term) {
  $items[] = ''.l($term->name, 'taxonomy/term/' . $term->tid) . ' (' . $term->node_count . ')';
}

если для каждого термина своя, то посмотрите в сторону этого модуля, а потом переписывайте в запросе к базе еще и вывод изображения.

Profile picture for user Николай
smalser
06.03.2013

Спасибо pantey толкнул меня в правильное направление, не охота модулями нагружать поэтому хотел через сниппет, и у меня получилось благодаря тебе.

$items = array();
foreach ($terms as $term) {
  $items[] = array("tid.".png\">" .l($term->name, 'taxonomy/term/' . $term->tid) . ' (' . $term->node_count . ')');
}

потом нужной картинке присваиваешь нужный id-термин, и все...

Profile picture for user Николай
smalser
15.03.2013

вроде вставлял код правильный, а отображается не правильный .
Вот так должно быть
tid.".png">

Profile picture for user Николай
smalser
30.04.2013

Подскажите пожалуйста каким образом можно вывести список дочерних терминов таксономии с подсчетом количества в них нод. На подобии этого снипета

Profile picture for user Николай
goroshiko1980
25.09.2013

Классная у вас статья. Только сел за комп и вот те на, - нашел сразу что искал.

Profile picture for user Николай
Андрей21
25.04.2014

Как узнать id словаря?
например у меня на сайте пока только один словарь Теги

Profile picture for user pantey
pantey
25.04.2014

если этот словарь был создан Drupal при установке - то его Id = 1. А так в ID ищите в базе данных.

Profile picture for user Николай
Андрей21
25.04.2014

спасибо большое, вместо ID_vocabulary поставил 1 и появился список тегов,
а есть на вашем сайте статья как узнавать id в базе данных?

ато в MySQl я вообще не шарю :(

допустим я сейчас создам словарь, его id будет 2?

Profile picture for user pantey
pantey
25.04.2014

если словарей больше не создавал, то да. А так заходишь в свою БД (phpAdmin или что там у тебя есть), ищешь таблицу

taxonomy_vocabulary

и внутри увидишь поле VID, оно как раз и будет ID твоего словаря.

Profile picture for user Николай
Максим
01.11.2014

Материал на вашем сайте мне очень сильно понравился. Представить не мог, что быстро смогу найти ответ на вопрос. Спасибо огромное!!!.