如何使用带有参数的视图作为Drupal中的站点首页?

时间:2011-01-06 02:03:12

标签: drupal drupal-6 drupal-views

我有一个Drupal网站,我已经设置了一个视图来为首页供电。

我的目标是能够将0-2个参数传递给主页,并将其传递到视图中。但是,我仍然需要正常的Drupal页面才能工作。参数列表是已知的。

例如:

  • mysite.com/berlin/birds会将“berlin”作为第一个参数传递,将“birds”作为第一个参数传递给首页。
  • mysite.com/berlin只会传递一个参数,“berlin”
  • mysite.com/admin会在Drupal中加载正常的管理页面

我不清楚如何实现这一目标。我可以使用挂钩吗?我找不到一个或想到一个。有没有办法在视图本身的参数中指定它?也许我可以写一个在加载URL时插入的钩子,并在后台重写?

我目前的解决方案是将这些路径(因为我的参数已知)添加到菜单系统。这是有效的,除了当我的页面不是首页时,所以页面不使用我想要的节点主题(它们使用节点详细信息主题)。

3 个答案:

答案 0 :(得分:2)

如果没有自定义代码,我认为你不能真正做到这一点。 View在开始获取参数之前需要一个路径,并且您的URL以参数开头。你能做的就是用自定义代码伪造它。我用过这样的东西:

/**
 * Implements hook_init().
 */
function mymodule_custom_init() {

  $item = menu_get_item(); // Matching Drupal path

  if (!$item) { // There is no matching Drupal path.
    $_GET['q'] = 'view_path/' . $_GET['q']; // Fake path path.
  } // if

} // mymodule_custom_init

然后你给视图一个“view_path”的路径,它会响应与Drupal路径中任何其他内容都不匹配的所有内容。

答案 1 :(得分:0)

视图用户界面中有一个“参数处理代码”的位置,需要一小段php - http://drupal.org/node/70145

您可以在那里运行一些代码来检查您是否在首页(或参数不存在或其他任何内容)并插入您想要的参数。

答案 2 :(得分:0)

另一种方法是通过hook_views_pre_view或hook_views_pre_build设置参数。更好,因为你确定你不会破坏其他东西(比如另一个视图块)。

function MYMODULE_views_pre_view(&$view){
    if ($view->name == 'your_view_name' && drupal_is_front_page()) {
        $view->set_arguments(array('you_argument','you_second_argument'));
    }
}