Drupal 6 - 强制页面视图显示不同的视图?

时间:2011-09-07 17:06:35

标签: drupal drupal-6 drupal-views

这里有点疯狂的问题......

我有一个设置为页面的视图显示。它在主题A(桌面)中看起来很棒,但在主题B(移动)中却很糟糕。所以我为主题B制作了不同版本的视图。由于桌面/移动“网站”与不同的主题相同,因此无论选择何种主题,此页面的网址都是相同的。

所以我希望能够将用户指向:

mysite / this_crazy_view

并让返回的页面根据它所在的主题选择正确的视图。我知道如果我使用块,我会在逐个主题的基础上将相应的块分配给相关页面,但是显示器正在使用页面显示我不知道正确的方法是什么。

如果我可以帮助它,我宁愿不重建视图作为块(如果它无法帮助,那就这样吧......)所以我希望有一些方法通过tpl有条件地加载视图。 php文件或类似的东西......

我在我的模块中使用的代码(根据下面的@Clive建议)是:

<?php
function bandes_custom_hook_menu() {
  $items['charley_test'] = array(
    'title' => 'Title',
    'access arguments' => array('access content'),
    'page callback' => 'bandes_custom_set_page_view',
    'type' => MENU_NORMAL_ITEM  );
  return $items; 
}

function bandes_custom_set_page_view() {
  global $theme_key;
  $view_name = $theme_key == 'mobile_jquery' ? 'course_views_mobile' : 'course_views';
  $display_id = 'page_5'; 
  return views_embed_view($view_name, $display_id);
}
?>

我已多次清除缓存并在$ items数组中尝试了各种不同的路径。 course_views和course_views_mobile肯定都是自己的。

我还想知道我是否可以创建一个views-view - course-views - page-5.tpl.php除了views_embed_view(course_views_mobile,page_5)之外几乎没有任何内容? (仅限于两个主题中的一个......)

实际上我认为答案比以上所有都简单。重定向的东西让我适合,所以我删除了模块,重置了我一直使用的路径,并尝试了模板/主题方法。

这是:views-view - course-views - page-5.tpl.php,仅用于移动主题,但是指的是非移动视图(有点让我头疼,但它有效)

<?php
//get the view
print "IM IN YR VUE, MESSING THNGZ UP!"; //yeah, I'm going to remove this part...
$view_name="course_views_mobile";
$display_id="page_5";
print views_embed_view($view_name, $display_id);
?>

任何不应该起作用的理由? (或者为什么这是一个非常糟糕的主意?)

1 个答案:

答案 0 :(得分:0)

我再次:)

我只是想到了一个简单易行的方法;如果您可以将视图的URL更改为您要访问它们的路径以外的其他路径(任何路径都可以),您可以在该路径的自定义模块中实现hook_menu()函数,以根据需要进行选择关于你的主题:

function MYMODULE_hook_menu() {
  $items['this_crazy_view'] = array(
    'title' => 'Title',
    'access arguments' => array('access content'),
    'page callback' => 'MYMODULE_crazy_view_page',
    'type' => MENU_CALLBACK // or MENU_NORMAL_ITEM if you want it to appear in menus as usual
  );

  return $items; // Forgot to add this orginally
}

function MYMODULE_crazy_view_page() {
  global $theme_key;

  $view_name = $theme_key == 'foo' ? 'theView' : 'theOtherView';
  $display_id = 'page_1'; // Or whatever the page display is called

  return views_embed_view($view_name, $display_id);
}

应该做的伎俩