1

我的雇主要求网站上的某些页面具有两页功能。这意味着一些默认内容正常显示在 node_view 页面上,但第二部分应在单击链接时显示。

如果我可以跨多个节点执行此操作,这将很容易,但要求是所有数据都存储在一个节点中,但跨两个页面显示。

我一起破解了以下代码:

function mymodule_node_view($node, $view_mode, $langcode){

$path = current_path();
$path_alias = drupal_lookup_path('alias',$path);

$links = array( 'test' => array('title'=>'my_link', 'query'=>'', 'href'=>"{$path_alias}/nextpage") );

$node->content['my_module'] = array(
    '#theme' => 'links__node__mymodule',
    '#links' => $links,
    '#attributes' => array('class' => array('links', 'inline')),
);
}

这会在我的内容区域顶部创建一个名为my_link的超链接——这很棒。

当我单击超链接时,问题就开始了。假设我在http://example.org/homepage上并单击超链接,我希望被重定向到http://example.org/homepage/nextpage。此外,我仍然想维护我所在的实际节点的视图和编辑选项卡。但是,Drupal 正确地给了我一个“找不到页面”的错误。

有趣的是,如果我使用http://example.org/node/1并访问了http://example.org/node/1/nextpage,我没有得到我上面描述的问题,但 url 的描述性较差。

为了解决这个问题,我确信我必须扩展hook_menu但我不知道如何解释导致实际节点标题的任何数量的分类术语。所以,我无法预测在节点标题和/nextpage之前需要多少%。但是,我希望/nextpage仍然具有其父页面的查看和编辑选项卡。

这对我来说都是未开发的领域。

更新

我发现以下函数可以很好地返回包含分类法的整个节点路径:

$path = current_path();
$path_alias = drupal_lookup_path('alias',$path);

我不知道如何在hook_menu中利用这一点为我的节点动态创建/ nextpage 。

请记住,我真的不希望/nextpage完全独立于原始的和实际的 Drupal 节点。在 /nextpage 上时,我希望能够访问节点的视图、编辑等选项卡。

因此,/nextpage实际上只是 Drupal 节点页面的扩展。

4

2 回答 2

1

有一种快速的方法可以做到这一点。使用视图模块

在字段部分选择您要查看的字段。并在参数中添加nid.

然后将链接添加到您已经创建的节点视图。

最终结果http://mysite/views-page/[nid]

希望这会有所帮助……穆罕默德。

于 2012-11-14T07:43:13.313 回答
1

我会检查 node_menu() 函数以获取有关它如何实现的一些参考。

不确定您的分类要求,所以这可能不够,但我会按照我的理解进行。

但是在我的脑海中,我会选择类似的东西:

function mymodule_menu() {
  $items['node/%node/nextpage'] = array(
    'title' => 'Next page',
    'type' => MENU_LOCAL_TASK, // Makes it a tab on node/%node-pages
    'page callback' => 'mymodule_node_page_view', // Your page display function
    'page arguments' => array(1), // First will be a node object, second will be whatever value is passed in the  url
    // You should rip access callback and access arguments from node_menu()
  );

  return $items;
}

那应该做一些你所要求的事情。

使用面板/页面(另请参见 Chaos 工具)或可以说是视图来执行此操作也是可能的、更容易且绝对推荐的,因为它们非常有能力完成所有这些工作,并且通常比自定义代码更好地利用 Drupal 的优势。

更新

为了澄清我已经简化了菜单挂钩,您应该能够使用下面的页面查看功能。我仍然相信您会使用面板和覆盖 node_view 等做出更好的解决方案。

菜单挂钩中的 MENU_LOCAL_TASK 部分应将其与查看和编辑一起变成另一个选项卡。

function mymodule_node_page_view($node) {
    die("It works: ".$node->title);
}

希望这更有帮助。

于 2012-11-13T21:01:42.137 回答