фото девушек блондинок

Вывести полное содержание всех книг (book) на сайте в виде иерархии

Авторы решений:
Версия Drupal:

Задача

Вывести полное содержание всех книг (book) на сайте в виде иерархии.

Решение

Полное содержание лучше вывести как отдельную страницу, а не блок, потому что блок имеет как правило небольшие размеры:

  1. Создаём страницу,
  2. Вставляем код подходящей версии Друпал,
  3. Выставляем формат ввода: "PHP",
  4. Сохраняем.

Drupal 5

<?php
function book_tree_recurse_all($nid, $depth, $children) {
  if (
$depth > 0) {
    if (
$children[$nid]) {
      foreach (
$children[$nid] as $foo => $node) {

          if (
$tree = book_tree_recurse_all($node->nid, $depth - 0, $children)) {
            
$output .= '<li class="expanded">';
            
$output .= l($node->title, 'node/'. $node->nid);
            
$output .= '<ul>'. $tree .'</ul>';
            
$output .= '</li>';
          } else {
            
$output .= '<li class="leaf">'. l($node->title, 'node/'. $node->nid) .'</li>';
          }
      }
    }
  }
  return
$output;
}

function
book_tree_expanded($parent = 0, $depth = 3) {
 
$result = db_query(db_rewrite_sql('SELECT n.nid, n.title, b.parent, b.weight FROM {node} n INNER JOIN {book} b ON n.nid = b.nid AND n.vid = b.vid WHERE n.status = 1 AND n.moderate = 0 ORDER BY b.weight, n.title'));

  while (
$node = db_fetch_object($result)) {
   
$list = $children[$node->parent] ? $children[$node->parent] : array();
   
array_push($list, $node);
   
$children[$node->parent] = $list;
  }

  if (
$tree = book_tree_recurse_all($parent, $depth, $children)) {
    return
'<div class="menu"><ul>'. $tree .'</ul></div>';
  }
}
print
book_tree_expanded(0);
?>

Drupal 6

<?php
function book_toc_recursive($bid, $pid) {
 
$sql = "SELECT a.mlid, b.link_path, b.link_title FROM book a INNER JOIN menu_links b ON a.mlid = b.mlid WHERE (a.bid=%d) AND (b.plid=%d) order by a.mlid";

 
$result = db_query(db_rewrite_sql($sql), $bid, $pid);
  if (
$result) {
    print
"<ul>";
    while (
$data = db_fetch_object($result)) {
      print
"<li>" . l($data->link_title, $data->link_path) . "</li>";
     
book_toc_recursive($bid, $data->mlid);
    }
    print
"</ul>";
  }
}

$all_books=book_get_books();
foreach (
$all_books as $book_id=>$link) {
  
book_toc_recursive($book_id, 0);
}
?>

Использованные материалы

Полезные ссылки

Изменения в модуле Book в Друпал 6

Creative Commons: ­Attribution-Share Alike 2.5

Данные материалы выложены под лицензией Creative Commons: ­Attribution-Share Alike 2.5. Это значит, что вы можете распространять, копировать и модифицировать эти произведения при условии упоминания авторства оригинала, и при условии, что они также будут распространяться на условиях этой лицензии (то есть, изменённую работу нельзя защитить копирайтом). Подробнее смотри: http://ru.wikipedia.org/wiki/Creative_Commons