book добавить страницу программно
Primary tabs
вообще чтобы подшить книжку страницу в книжку - в общем случае следует указать два параметра =
- id книги к которой будет относится данная страница - это элемент $node->book[bid] (= "new" если страницу предполагается сделать "корнем" книги - или в терминах модуля book -книгой - книгой самой по себе - непосредственно )))
- указать родительскую страницу - и вот здесь всё сложнее - дело в том, что для создания подобного рода ссылки в друпал 7 моудль бук использует систему меню ,а именно - запись в таблице menu_links - именно там хранится информация о родительской странице
смотрим как реализован этот хук в самом модуле @бук@ =
/**
* Implements hook_node_insert().
*/
function book_node_insert($node) {
if (!empty($node->book['bid'])) {
if ($node->book['bid'] == 'new') {
// New nodes that are their own book.
$node->book['bid'] = $node->nid;
}
$node->book['nid'] = $node->nid;
$node->book['menu_name'] = book_menu_name($node->book['bid']);
_book_update_outline($node);
}
}ну а во вторых следует обратить внимание на данную функцию =
/**
* Common helper function to handles additions and updates to the book outline.
*
* Performs all additions and updates to the book outline through node addition,
* node editing, node deletion, or the outline tab.
*/
function _book_update_outline($node) {
if (empty($node->book['bid'])) {
return FALSE;
}
$new = empty($node->book['mlid']);
$node->book['link_path'] = 'node/' . $node->nid;
$node->book['link_title'] = $node->title;
$node->book['parent_mismatch'] = FALSE; // The normal case.
if ($node->book['bid'] == $node->nid) {
$node->book['plid'] = 0;
$node->book['menu_name'] = book_menu_name($node->nid);
}
else {
// Check in case the parent is not is this book; the book takes precedence.
if (!empty($node->book['plid'])) {
$parent = db_query("SELECT * FROM {book} WHERE mlid = :mlid", array(
':mlid' => $node->book['plid'],
))->fetchAssoc();
}
if (empty($node->book['plid']) || !$parent || $parent['bid'] != $node->book['bid']) {
$node->book['plid'] = db_query("SELECT mlid FROM {book} WHERE nid = :nid", array(
':nid' => $node->book['bid'],
))->fetchField();
$node->book['parent_mismatch'] = TRUE; // Likely when JS is disabled.
}
}
if (menu_link_save($node->book)) {
if ($new) {
// Insert new.
db_insert('book')
->fields(array(
'nid' => $node->nid,
'mlid' => $node->book['mlid'],
'bid' => $node->book['bid'],
))
->execute();
}
else {
if ($node->book['bid'] != db_query("SELECT bid FROM {book} WHERE nid = :nid", array(
':nid' => $node->nid,
))->fetchField()) {
// Update the bid for this page and all children.
book_update_bid($node->book);
}
}
return TRUE;
}
// Failed to save the menu link.
return FALSE;
}- drudev's blog
- Log in to post comments
- 4827 reads