我正在使用新的内容类型和视图模块创建“推荐”块。问题是Drupal为每个推荐创建了一个单独的页面,用户可以在知道其ID(或在SERP中找到页面)时访问该页面。
是否可以禁用该特定内容类型的节点页面,但列出视图块中的节点?标准的“404”Drupal页面将是理想的。
谢谢!
答案 0 :(得分:3)
棘手的一个,因为你无法使用hook_node_access()(视图模式永远不会通过,因此你无法在预告片和整页之间确定)。一个快速脏的方法是hook_node_view():
function MYMODULE_node_view($node, $view_mode, $langcode) {
if ($node->type == 'my_node_type' && $view_mode == 'full') {
drupal_not_found();
}
}
可能有更好的模式'Drupal'可以做到这一点,但这样做会有所收获。
答案 1 :(得分:1)
这个答案适用于Drupal 6.x,但对于Drupal 7来说可能非常相似......
Drupal的Chaos Tools和Panels模块可以实现此目的。使用Chaos Tools子模块“页面管理器”,您可以在“管理页面...”(网站构建 - >页面)下启用“node_view”页面。
启用'node_view'页面后,您将添加'Variant'(例如标题:'非管理员用户')和'选择规则',并将标准设置为'节点类型',然后将其限制为您的内容类型(例如见证)。
之后,“用户角色”还需要一个“选择规则”。使用它,选择匿名和经过身份验证的用户角色。
接下来,继续完成设置并选择“单列”布局,然后在选择面板内容时单击“中间列”中的“齿轮”图标。然后,您可以指定现有节点(例如,您的404节点页面)。
接下来,我建议在“node_view”页面上设置另一个“Variant”(例如标题“管理员用户”),并将“选择规则”标准设置为您的内容类型,并将用户条件设置为您的管理员角色(s )或用户ID#1。然后,您可以将“正在查看的当前节点”添加到面板内容,而不是将404节点作为内容添加到面板页面。这样管理员仍然可以看到节点页面,普通用户将被定向到您的404页面。