我有一个Drupal网站,我已经设置了一个视图来为首页供电。
我的目标是能够将0-2个参数传递给主页,并将其传递到视图中。但是,我仍然需要正常的Drupal页面才能工作。参数列表是已知的。
例如:
我不清楚如何实现这一目标。我可以使用挂钩吗?我找不到一个或想到一个。有没有办法在视图本身的参数中指定它?也许我可以写一个在加载URL时插入的钩子,并在后台重写?
我目前的解决方案是将这些路径(因为我的参数已知)添加到菜单系统。这是有效的,除了当我的页面不是首页时,所以页面不使用我想要的节点主题(它们使用节点详细信息主题)。
答案 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'));
}
}