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
- 4688 reads