如何在Drupal 6中修改Book Copy模块,以便在复制后将用户转发到不同的起始选项卡?

时间:2009-12-08 05:24:54

标签: drupal drupal-6 copy

使用Drupal 6中的Book Copy模块复制书籍的示例调用(假设存在书籍ID为142的节点):

www.examplesite.com/book_copy/copy/142

当调用上述站点并复制节点142时,它会通知用户该书已被复制,但会在书籍副本的“大纲”选项卡上启动用户。我认为在书籍副本的“编辑”选项卡上启动用户会更直观,因此用户可以立即开始编辑书籍的信息。大纲不如设置编辑选项卡中书籍的实际初始详细信息重要。

有谁知道如何修改模块以将用户转发到“编辑”标签?我查看了代码并且没有点击。我在解释本书模块的工作原理时遇到了问题。任何建议将不胜感激。谢谢!

1 个答案:

答案 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';
}