代码之家  ›  专栏  ›  技术社区  ›  Brian T Hannan

如何修改Drupal6中的图书复制模块,以便在复制后将用户转发到不同的开始选项卡?

  •  2
  • Brian T Hannan  · 技术社区  · 15 年前

    使用drupal 6中的book copy模块复制图书的示例调用(假设存在图书ID为142的节点):

    www.examplesite.com/book_copy/copy/142

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

    是否有人知道我如何修改模块以将用户转发到“编辑”选项卡?我看了一遍代码,但没有点击。我很难准确地解释这本书的模块是如何在引擎盖下工作的。任何建议都将不胜感激。谢谢!

    1 回复  |  直到 11 年前
        1
  •  3
  •   Henrik Opel    15 年前

    我没有经验 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)) { ... }
    

    子句,其另一部分的赋值带有调整后的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';
    }