开发者

Drupal 6 - force page view to display a different view?

开发者 https://www.devze.com 2023-04-03 02:01 出处:网络
Kind-of a crazy question here... I have a view display that\'s set up as a page. It looks great in theme A (desktop), but terrible in theme B (mobile). So I made a different version of the view for t

Kind-of a crazy question here...

I have a view display that's set up as a page. It looks great in theme A (desktop), but terrible in theme B (mobile). So I made a different version of the view for theme B. Since the desktop/mobile 'sites' are the same just with different themes, the url for this page will be the same regardless of hte theme selected.

So I would like to be able to point the user to:

mysite/this_crazy_view

and have the returned page select the proper view depending on which theme it's in. I know that if I were using blocks I would just assign the appropriate blocks to the page in question on a theme-by-theme basis, but since the displays are using page display I don't know what the right approach would be.

I would rather not rebuild the views as blocks if I can help it (if it can't be helped, so be it...) so I was hoping there was some way to conditionally load the view via the tpl.php file or something like that...

The code I'm using in my module (per @Clive 's recommendation below) is:

<?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);
}
?>

I've cleared the cache a number of times and tried a variety of different paths in the $items array. The course_views and course_views_mobile both definitely work on their own.

I was also wondering if I could just create a views-view--course-views--page-5.tpl.php which contains almost nothing aside from the views_embed_view(course_views_mobile, page_5) part? (Only on one of the two themes...)

Actually I think the answer was simpler than all of the above. The redirect thing was giving me fits, so I removed the module, reset the paths to what I had been using, and tried the template/theme approach instead.

This is: views-view--course-views--page-5.tpl.php, only used on the mobile theme, but referring to the non-mobile view (kinda gives me a headache, but it works)

开发者_JS百科<?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);
?>

Any reason that shouldn't work? (Or why it is a really bad idea?)


Me again :)

I just thought of an easy-ish way around this actually; if you can change the URL of your views to something other than the path you want to access them at (any path would do) you could implement a hook_menu() function in a custom module for that path, to make the choice depending on your theme:

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);
}

That should do the trick

0

精彩评论

暂无评论...
验证码 换一张
取 消