2011-09-07 111 views
0

有點瘋狂的問題在這裏...Drupal 6 - 強制頁面視圖顯示不同的視圖?

我有一個視圖顯示設置爲一個頁面。它在主題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

我再次:)

我只是想到了一個簡單的上下的方式解決這個實際;如果您可以將視圖的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); 
} 

這應該做的伎倆

+0

這看起來很有希望!我想我錯過了一個關鍵點(你能告訴我正在學習Drupal編碼嗎?) - 原始路徑將在哪裏?或者是items數組的this_crazy_view部分? –

+0

沒錯,在'hook_menu()'中''items'的數組鍵被成爲你在'page callback'中定義的回調被調用來提供頁面內容的物理路徑。我其實已經忘了在該函數的末尾添加'return $ items',我已經更新了代碼以反映這個 – Clive

+0

假設我有多個需要做這種事情的'頁面' - 我需要爲每一個定製一個模塊? (我的手指越過,這個特殊的情況是唯一的,但很難知道......) –