使用Drupal 6中的Book Copy模块复制书籍的示例调用(假设存在书籍ID为142的节点):
www.examplesite.com/book_copy/copy/142
当调用上述站点并复制节点142时,它会通知用户该书已被复制,但会在书籍副本的“大纲”选项卡上启动用户。我认为在书籍副本的“编辑”选项卡上启动用户会更直观,因此用户可以立即开始编辑书籍的信息。大纲不如设置编辑选项卡中书籍的实际初始详细信息重要。
有谁知道如何修改模块以将用户转发到“编辑”标签?我查看了代码并且没有点击。我在解释本书模块的工作原理时遇到了问题。任何建议将不胜感激。谢谢!
答案 0 :(得分:3)
我没有使用book_copy
模块的经验,但查看book_copy_copy_book()
函数的最后几行:
$book = node_load(array('nid' => $newbid));
$book->bookcopydata = array();
$book->bookcopydata['message'] = t('Successfully cloned "%message", now viewing copy.', array('%message' => $message));
if (_book_outline_access($book)) {
$book->bookcopydata['url'] = 'node/'. $newbid .'/outline';
}
else {
$book->bookcopydata['url'] = 'node/'. $newbid;
}
// The function signature is: hook_book_copy_goto_alter(&$data);
drupal_alter("book_copy_goto", $book);
drupal_set_message($book->bookcopydata['message']);
drupal_goto($book->bookcopydata['url']); // requires user has 'administer book outline' or can access personal books
如果用户没有“管理书概述”权限,用户将自动在新书页上结束。如果您希望用户始终在新书编辑页面上结束,那么您可以只替换整个
if (_book_outline_access($book)) { ... }
子句,其else部分的赋值带有调整后的url:
$book->bookcopydata['url'] = 'node/'. $newbid . '/edit';
但是,不建议直接更改模块代码(更新冲突),尤其是模块提供了一个钩子来实现“从外部”所需的更改。因此,在您的情况下,“正确”的方式是在自定义模块中实现提供的hook_book_copy_goto_alter(&$data)
,以便根据您的喜好调整重定向URL:
function yourModule_book_copy_goto_alter(&$new_book) {
$new_book->bookcopydata['url'] = 'node/'. $new_book->nid . '/edit';
}