Для вывода оглавления пользуюсь вот таким сниппетом:
<?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);
}
?>
Но он выводит содержание ВСЕХ книг, а не только данной.
Подскажите, что не так и как исправить ?
Комментарии
точно не помню где стоял номер книги, если не вот так: http://site/node/XXX, а скажем вот так:
http://site/node/parentYYY/XXX то меняем на menu_get_object('node', НОМЕРПОЗИЦИИ);
Nikit,
эээ... сорри за мою тупость, но не могли бы Вы подробнее объяснить
Я понимаю, что приведенным кодом мы получаем ссылку на текущую книгу (правильно http://site/node/XXX) но куда это воткнуть в сниппете ?
Я пробовал ставить вместо
book_toc_recursive($book_id, 0);
вот так
book_toc_recursive(70, 0);
Выводит ОДНУ книгу, но столько раз, сколько книг есть (ну это логично).
Решено благодаря MarinaMim
Код:
<?php
$book_top_page=YOUR_NODE_ID;
$tree = menu_tree_all_data(book_menu_name($book_top_page));
print menu_tree_output($tree);
?>
не оглаваление значит, а структура (дерево) книг.
Мой собственный вариант, может не так изящно, но .....
<?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->nid, 0);
?>