Вывод оглавления Book [Решено]

Главные вкладки

Аватар пользователя starcomputer@drupal.org starcomputer@dr... 14 февраля 2010 в 2:07

Для вывода оглавления пользуюсь вот таким сниппетом:


<?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_id0);
}
?>

Но он выводит содержание ВСЕХ книг, а не только данной.
Подскажите, что не так и как исправить ?

Комментарии

Аватар пользователя starcomputer@drupal.org starcomputer@dr... 14 февраля 2010 в 9:30

Nikit,
эээ... сорри за мою тупость, но не могли бы Вы подробнее объяснить Sad
Я понимаю, что приведенным кодом мы получаем ссылку на текущую книгу (правильно http://site/node/XXX) но куда это воткнуть в сниппете ? Sad
Я пробовал ставить вместо
book_toc_recursive($book_id, 0);
вот так
book_toc_recursive(70, 0);
Выводит ОДНУ книгу, но столько раз, сколько книг есть (ну это логично).

Аватар пользователя starcomputer@drupal.org starcomputer@dr... 16 февраля 2010 в 20:38

Мой собственный вариант, может не так изящно, но ..... Smile

<?php
$i 
0;
function 
book_toc_recursive($bid$pid)
{
global 
$i;
$sql "SELECT b.mlid, m.link_path, m.link_title FROM {book} b INNER JOIN {menu_links} m ON b.mlid = m.mlid INNER JOIN {node} n ON n.nid = b.nid WHERE (b.bid=%d) AND (m.plid=%d) AND (n.type = '%s') ORDER by m.link_title";
$ntype "book"
  
$result db_query(db_rewrite_sql($sql), $bid$pid$ntype);
  if (
$result) {
    print 
"<ul>";
      while (
$data db_fetch_object($result)) {
      if (
$i >= 1) {
      print 
"<li>" l($data->link_title$data->link_path) . "</li>";}
      
$i++;
      
book_toc_recursive($bid$data->mlid);
    }
    print 
"</ul>";
  }
}
$book menu_get_object();
book_toc_recursive($book->nid0);
?>