您在這裡

作一个video gallery 的站

adrianmak's 的頭像
adrianmak 在 2009-03-16 (週一) 14:49 發表

爬过一下文, 有好多种做法, 其中有两个比较简单
1. CCK + embedded media field
2. CCK + filefield + jquery media

请问两种各有什么优劣 ?

我已用Video Upload+CCK建立了 "Video" 的 Node content type
也用 Nodereference 做了"Video合輯"的 Node content type
如果要在"Video合輯"的Node內做以下的介面
Block 1 專門播放 Video
Block 2 是可播放的Video清單 ..........以上兩個Block內的Video均已用View產出對應的Block......兩者清單相同.....上面顯示單一個Video
點了Block 2內的 影片縮影(Thumbnails)後
點到的影片就會在 Block 1內播放
由於View Block透過網址來傳遞參數
但以上Block都在同一頁........好像就無法達成

請問一下
以上功能有沒有現成模組可以用?
如果沒有單一模組? 那麼有沒有模組組合可以做到?
或是如何用PHP來控制??

先謝在前

參照 http://drupaltaiwan.org/forum/20080403/1994http://drupal.org/node/241344
再三端詳了 http://myplay.com
修正了一下做法如下

設了如圖的兩個 Block View
也設了三個Panel page
但是卻卡在一個環節上................殘念

還是同個Case
用Video Upload+CCK建立了 {Video} 的 Node content type
再以 Nodereference 做了{Video合輯} 的 Node content type
以Views作了 {Video合輯} 節點內專門播放 Video的Block 1

@ filter-->{Video} 節點

@ argument1-->Search: Links from ; Action to take if argument is not present: Provide default argument --> Node ID from URL ....這樣會自動帶入{Video合輯} 的nid
@ argument 2-->Node: Nid ....{Video合輯}內可被點播的{Video}其Nid

@ field--> Video Upload+CCK ..... YouTube上的Video
以Views作了 {Video合輯}節點內之{Video}清單的Block 2

@ filter-->{Video} 節點

@ argument 1-->Search: Links from ; Action to take if argument is not present: Provide default argument --> Node ID from URL ....這樣會自動帶入{Video合輯}的 Nid

@ field--> Node: Title; 勾選了 Output this field as a link-->Link path: Video合輯/%1/[nid] .....將此欄位連結改輸出為 Video合輯/{Video合輯}Nid/{Video} Nid....所以點了這個連結後會將對應的Video Nid傳給上面的Block 1以顯示正確的Video

三個Panel page如下
1) path = Video合輯 ............顯示合輯列表
2) path = Video合輯/%1 .......顯示Nid=%1 的 Video 合輯, 在播放Video的Block1內顯示第一個Video, 在清單的Block2內顯示所有Video清單
3) path = Video合輯/%1/%2..顯示Nid=%1 的 Video 合輯 在播放Video的Block1內顯示Nid=%2的Video, 在清單的Block2內顯示所有Video清單
於是如果一切正常的話
點合輯列表內任一個合輯 會被帶到 Video合輯/%1 頁 ........Nid=%1 的 Video合輯
點Video 合輯內Block2內的Video清單 會被帶到 Video合輯/%1/%2 頁 ........Nid=%1 的 Video合輯 並在Block1顯示 Nid=%2 的 Video

以上一切想起來都很美好
只是....................結果就是差了哪麼一點點
透過Views的Preview
當你預覽 Block 1 並輸入參數 [ %1/%2 ] ....會出現 Nid是[%1]的"Video合輯" 內 Nid是[%2]的"Video" ..... 這部分結果很滿意
但當你預覽 Block 2 並輸入參數 [ %1 ]
的確會出現 Nid是[%1]的"Video合輯"內之所有 "Video"的Title列表
但每個Title對應的連結出現的卻是 ...... Video合輯/合輯名稱/{Video} Nid
而不是我想要的 Video合輯/{Video合輯}Nid/{Video} Nid

想請問網上的各位
到底要如何設定Output this field as a link-->Link path: Video合輯/%1/[nid]
才能讓我產生正確的連結勒???

先謝在前

轉念想想......是不是改以 Node Title 作為 URL與參數
而不是用 Node id 作為 URL與參數
問題就解決了?????

如果以 Node Title 作為 URL與參數方向是正確的
要是 Node Title 是中文的話
會不會發生連結不到的狀況???

還是該使用Drupal內博大精深的Taxonomy作為 URL與參數勒?

這個問題已在Drupal.org上獲得解決了

原來的設定 將欄位改輸出成 node/%1/[nid]

新增一個 views-view-field--my_view_name--field.tpl.php 的tpl檔在 theme 檔案夾內 ..... 用哪個名字能夠讓Drupal找得到這部分還是有點玄囉
裡面的程式如下

<?php
$node = node_load(array('nid' => arg(1)));
$output = str_replace('/'.$node->title.'/', '/'.arg(1).'/', $output);
print $output;
?>

透過上面的組合就可以將 %1 從原先的標題名稱(Title) 置換為節點ID(node id)

That's it!!

%1 在改輸出連結時, 只要標題內有任何 Reserved Characters in HTML 時情況會很糟. 例如"Penny's Show"會變成 Penny%26%23039;s Show. 於是上述的做法便失效了............殘念

所以只好依照網友建議再次修改如下
Link path: node/[arg1]/[nid] ..............用[arg1]來取代%1

透過Theme檔案夾內的 views-view-field--my_view_name--field.tpl.php 以將 [arg1] 替換成 arg(1)

<?php
$output = str_replace('%5Barg1%5D', arg(1), $output);
print $output;
?>

以上是最新修正的版本.