2010-07-08 15 views
1

是否有可能将匿名用户(或更具体地说,没有“成员”角色的用户)从特定菜单项重定向到我选择的替代节点,可能使用custom_url_rewrite_inbound?Drupal - 使用custom_url_rewrite_inbound更改匿名用户的目的地?

这样就可以让我为会员和非会员提供特定页面的两个版本(这是一个网站特定的事情!)。

干杯。

+1

你想让整个内容有所不同吗?如果您只想隐藏节点的某些部分,则可以执行除重定向以外的其他操作。 您是否还希望每个节点有一个替代节点,或者整个站点有一个替代节点? – 2010-07-08 08:11:14

+0

我想一个解决方案是将相关文本添加到CCK字段并将其隐藏到非成员(同时保持正文可见)。我很想知道重定向的东西是否可行 - 它能帮助我更好地理解Drupal :) – james6848 2010-07-08 09:23:31

回答

1

使用custom_url_rewrite_inbound()因为这将是有点类似用大锤来调节功能歪斜的图片的角度 - 可以完成,但是很麻烦并且带来一些损坏的风险;)

更好的解决方案取决于您想要达到的精确度以及多久(即多少次节点),您需要这样做,所以您应该更详细地解释您的场景。一些可能的方案包括:

  • “丰富”与这两个版本的数据/域的节点,并调整实际输出功率根据用户角色
    • 如果使用CCK,你可以使用的字段权限设置为了这。
    • 您也可以通过自定义节点模板对主题图层进行一些调整。
    • 另一种方法是通过自定义模块中的hook_nodeapi()(操作'视图'),根据用户角色从内容数组中删除条目。
  • 提供明确的重定向到其他节点根据用户的角色(您明确的问题)
    • 用自定义更换通过hook_menu_alter()标准节点页面回调。在那之内,你检查角色。如果没问题,你只需要调用标准回调函数,否则你发出一个drupal_goto()(如果可能的话,基于一些通用逻辑)。
    • 如果'特殊'情况很少,你也可以通过hook_nodeapi()来做到这一点,再次对操作'视图'作出反应,但是你需要确保你只对节点页面视图执行此操作,而不是节点只是与其他人一起作为传情显示。
    • 在自定义模块中执行hook_init(),检查路径(arg()$_GET['q'])和角色,根据需要发出drupal_goto()。 (注意缓存页面 - 如果需要覆盖这些页面,请改为使用hook_boot())。

等等... - 我敢肯定有更多的选择,所以你可能需要提供您的问题/目标/场景的详细信息,以允许更精确的建议。

1

您可以创建该链接的自定义菜单处理程序,然后在运行该处理程序,你可以有类似

if (user->role == 'access granted') { 

    // do stuff 

} else { 

drupal_goto('anonymouspage'); 

}