是否有可以从根URL重定向到某个页面的Drupal模块?

时间:2011-05-30 13:14:08

标签: drupal

我想知道是否有一个可以执行此类功能的Drupal模块:如果我转到主页,它将带我到站点内的某个子路径。即www.something.com将重定向至www.something.com/product/node/11。

我尝试创建别名并使用了路径重定向模块,但出于某种原因,我在转到主页时无法访问扩展的网址。它将显示www.something.com/product/node/11的内容,但仍然使用www.something.com。

我认为这只能在Apache服务器中实现,而不是在Drupal中实现?

请注意,我们执行此功能的目的是在创建新产品时,我们希望我们的主页指向(即www.something.com - > www.something.com/product2/home,在www之前) .something.com /产品1 /家)。如果这可以在Drupal中配置,那么更改将更容易,并且可以由Drupal管理员完成。

6 个答案:

答案 0 :(得分:1)

您应该可以转到/admin/settings/site-information并在表单底部设置默认封面。这不会重定向:主页将是您设置默认值的任何内容。

答案 1 :(得分:1)

  1. 创建名为“frontpage_redirect”的新视图(节点类型)
  2. 根据Michael D的回答建议,创建并保存配置为搜索指定条件的视图:
    • display:page display,path = frontpage-redirect
    • 寻呼机:1项
    • 行样式=字段
    • fields:Node =>节点ID
    • filters:node type = product
    • sort:post date desc
  3. 保存新视图
  4. admin/config/system/site-information,将“默认首页”设置为上方的视图显示路径(在我的示例中为frontpage-redirect)
  5. 在视图编辑屏幕中,选择页面显示中的“主题:信息”链接。在“字段节点:Nid(ID:nid)”下查找最具体(最右边)的条目 - 应该类似views-view-field--frontpage-redirect--page-1--nid.tpl.php,但取决于视图名称显示名称。使用3中的文件名将默认视图模板views-view.tpl.php复制到主题文件夹中。
  6. 编辑模板并将此代码放入其中:
  7.     if (isset($row->nid)) {
          drupal_goto('node/' . $row->nid);
        }
    

    这种设置重定向的方法允许您从Views中驱动它,这提供了灵活性。当您的客户在六周内决定他们只想在首页上展示最新的 red 产品时,您将能够使用视图UI更新重定向背后的逻辑。 (你可以在火车回家的手机上做到这一点!)

    您无需创建自定义模块(这很容易,但会增加一些复杂性)或将您的网站逻辑移至.htaccess

答案 2 :(得分:0)

使用“视图”模块,创建一个新视图,显示一个完整节点,按上次创建顺序排序,适当过滤,然后在视图中创建页面显示。然后按照Graham的说明将站点主页设置为视图URL。

另一种方法是编写一个非常简单的自定义模块,对所需排序的最新节点进行db查询,获取页面的URL,然后使用drupal_goto()重定向到那里。

还有其他方法可以在Drupal中做你想做的事,但我想不出任何更直接和简单的东西......

答案 3 :(得分:0)

你所问的似乎是错的。对不起,如果我误解了一些细节,但似乎你应该重新考虑更高层次的问题。

如果我理解你,你想显示最新产品的页面作为主页? 如果是这样,也许您应该将其转换为显示主页上的最新项目页面。这与网络的RESTfullness相得益彰。并满足用户的期望。

模式将是:

  • GET / products / 22显示产品22
  • GET / products / 23显示产品23
  • GET / product / latest显示最后一个产品(在这种情况下,页面与/ products / 23完全相似)

要实现这一点,您可以使用视图模块。

答案 4 :(得分:0)

与Michael D的帖子类似,假设您想从名为“products”的自定义内容类型中提取最近发布的产品,您可以在settings.php中输入类似的内容:

function yourtheme_preprocess_page(&$variables) {    
  $query = db_query("SELECT nid FROM {content_type_products} ORDER BY nid DESC LIMIT 1");
  while ($row = db_fetch_object($query)) {
    $redirect_nid = $row->nid;
  }
  if ($variables['is_front'] == 1) drupal_goto("/node/" . $redirect_nid);
}

答案 5 :(得分:0)