Блок категорий

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

<?php
    
// можно было бы написать вот так - это тоже работает. Поэтому при конвертировании модулей из D6 можно много времени съэкономить, минимально трогая sql запросы.
     //$result = db_query("SELECT t.name, t.tid, COUNT(i.tid) as post_number FROM {taxonomy_term_data} t LEFT JOIN {taxonomy_index} i USING (tid) WHERE t.vid=1 GROUP BY t.name ");
    // но у Друпала же теперь новое DB API!
   
$query = db_select('taxonomy_term_data', 't');  
   
$query -> leftJoin('taxonomy_index', 'i', 't.tid = i.tid');
   
$query -> addField('t', 'name', 'name');
   
$query -> addField('t', 'tid', 'tid');
   
$query -> addExpression('COUNT(i.tid)', 'post_number');
   
$query -> groupBy('t.name');
   
$result = $query -> execute();
   
   
    foreach (
$result as $row) {
     
$items[] = l($row -> name, 'taxonomy/term/' . $row -> tid) . ' (' . $row -> post_number . ')';
    }
   
    echo 
theme('item_list', array('items' => $items));    
?>

результат работы этого кусочка можно увидеть в правой колонке.
К слову, минут 15 я потратил на осознание того, что некоторые методы объекта $query являются chainable (цепными, говорит мне Google Translate - как то не очень мне это слово нравится), а некоторые нет, т.е. можно делать вот так:

<?php
 
return (bool)db_select('node', 'n')
    ->
fields('n', array('nid'))
    ->
condition('type', 'blog')
    ->
condition('uid', $account->uid);
?>

но нельзя написать так:

<?php
 
return (bool)db_select('node', 'n')
    ->
addField('n', 'nid')
    ->
condition('type', 'blog')
?>

потому как метод addField не возвращает сам объект запроса.

Blog categories: 
16/12/2009 - 14:40

Comments

В Вашей RSS нельзя получать полные тексты записей, что ли?

кажется, нельзя..

Логотип мне нравится:)

У Вас долго загружается блог - видимо, хостинг плоховат

А если у меня в роли категорий выступает cck select textfield (т.е. таксономии нет) каким образом мне сделать тоже самое?

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

Об этом уже писал кто-то из моих ЖЖ-френдов :(

У нас в жж за такой пост бы закидали какашками в каментах:)

Читая только ваш блог, я действительно расслабляюсь и получаю удовольствие

Хело,блогер!!!

Post new comment

  • No HTML tags allowed.
  • Lines and paragraphs break automatically.

Об авторе

Drupal developer

Антон Сидашин

Веб-разработчик (подробнее)

rss