这里有点疯狂的问题......
我有一个设置为页面的视图显示。它在主题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);
?>
任何不应该起作用的理由? (或者为什么这是一个非常糟糕的主意?)
答案 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);
}
应该做的伎俩