Drupal 6 - заставить просмотр страницы отображать другое представление? - PullRequest
0 голосов
/ 07 сентября 2011

Вроде сумасшедший вопрос здесь ...

У меня есть экран просмотра, который настроен как страница. Он отлично смотрится в теме A (рабочий стол), но ужасен в теме B (мобильный). Поэтому я сделал другую версию представления для темы B. Поскольку «сайты» для настольных компьютеров и мобильных устройств одинаковы только для разных тем, URL-адрес этой страницы будет одинаковым независимо от выбранной темы.

Итак, я бы хотел указать пользователю:

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 определенно работают самостоятельно.

Мне также было интересно, могу ли я просто создать view-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 голосов
/ 07 сентября 2011

Я снова:)

Я просто подумал о том, как легко обойти это; если вы можете изменить 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);
}

Это должно сработать

...