這個簡單,使用 views 中建立一個 block 不是一件難事。可是,我碰到一個狀況:我要把一個由 views 所建立的 page (優惠項目),也放到這個 block 來。問題是:views 所做出來的 page 並沒有「置頂」這個欄位。即使後續要改成使用 cck 欄位來決定,views 所建立的 page 也沒有 cck 欄位可以使用。
想了一下,只有把 views 嵌入在一般的 content node 的 body 裡頭,然後利用這個 node 的置頂或是 cck 欄位,才能解決這個問題。稍微在 drupal.org 上找了一下,找到了以下這個方法。
將下列的 code 放到新的 node 的 body 裡頭 (editor filter 要設定為 php code)。
第 2 行 views_get_view() 中所放的參數是你的 views 的機器名稱。
1: <?php
2: $view = views_get_view('view_name');
3: $view->init();
4: $view->set_display('default');
5: $view->set_arguments(array(arg(0),'2ndargument'));
6: print $view->render();
7: ?>
其中第 3 行是重點:我們要秀出 views 中的哪一個 display 呢?如果我們的需求是要秀另一個 display,如何知道在第 3 列這裡要放入什麼參數?
假如你有安裝 devel 模組的話,這是作為開發程式的協助模組,這事就好辦了。在上面的 code 中,插入一個 dsm() 的指令,來解讀 $views 的架構,並且從其中找到我們要使用在 set_display() 中的參數。這是在開發模組中常用的技巧,幫助我們了解相關變數的結構。其實,在寫一些小程式碼時 (例如我們現在正在做的這件事),用到的機會很多。插入 dsm() 後的程式碼如下:
1: <?php
2: $view = views_get_view('onsell');
3: $view->init();
4: dsm($view);
5: $view->set_display('page_1');
6: print $view->render();
7: ?>
存檔後,重新秀出這個 node,你會在網頁頁面的前面上看到 krumo 的訊息,
點開這個變數架構,可以看到架構的細節。翻翻看,找一下 display 這個元素,把它展開,圖示如下:
接下來,就是拿 display 這裡所得到的,以我這個例子來說 (不同的 views 可能會得到不同的結果),它分別是 default, page_1, panel_pane_1,使用在 $view->set_display() 上,就好了。
不要忘了把剛剛加的 dsm() 拿掉或是註解掉。
好了,現在這個 node 裡嵌入一個 view。我們可以把這個 node 設為置頂,原本的重要訊息的 block,就可以順利把這個 node 秀出來了。
底下這個方式應該更快...
回覆刪除PHP Code 被鬼隱了~
回覆刪除return views_embed_view('views_name', 'display_name', arg1, arg2...);
@斜陽照
回覆刪除是啊,我也是這麼寫。因為要寫成部落文,所以拆解成幾列。
你講得對,應該在文章最後,再補上這個 API.
謝謝你的補充
Art