您在這裡

怎麼樣在views page顯示每個node的QR code

tky's 的頭像
tky 在 2012-01-30 (週一) 00:07 發表

目標:建立一個views list page,列出特定類型的node標題、內文摘要,以及自動產生含有node url的QR code。
作法:使用mobile code模組,可以整合CCK產生QR code。但是欄位必須先手動填入內容,才能生成QR code,不夠方便。
想法:在views中建立一個globle field,填入php code,取出node url,並使用theme('mobilecode')印出QR code。
困難:不曉得怎麼寫相關的php code!XD

大家有沒有用過mobile code模組做過類似的事情?如果有的話,還請指點一下怎麼處理這個困難。
如果有更簡單的方法可以實現這個目標,還請不吝回覆。感謝!

我想jamesliu78的解法有點誤會我想要做什麼。
我不是想要在每個node裡頭顯示一張QR code圖片,而是想要在一個views list(table)裡頭列出每個node url的QR code圖片。
(如果我想要做前者,在tpl.php裡頭寫程式會是好作法。不過Mobile code裡頭已經有提供Node Url的區塊,這樣做其實有點多此一舉。)
要做到後者,又不想要自行填寫link field或者text field,看來就得在views裡頭自己插個欄位進去,拉出每個node url並產生出QR code。

Drupal.org上頭有相關的討論,這位同學做了些嘗試,不過卻沒有成功。我試了一下,情況依然。
所以就上來請教大家囉!

tky

我想,jamesliu 的想法是沒錯,他指的不是 node 的 tpl.php 而是針對 views 指定的 template.

至於 template 的檔名要怎麼設定,會出現在 /admin/build/views/edit/[views_name] -> 基本設定 -> 版型: 資訊 這下面,
便能夠針對 views list 寫出合適的 template.

這個好像是上次 jamesliu 在小聚上分享所學到找出 views template 的實用技巧...^^

$node_url = url('node/' . $node->nid);
$code = theme('mobilecode', $node_url);

大概這種感覺吧?

感謝chris解譯xd"
講的有點太檢潔了xd"

基本上步驟如下...
.在views中加入nid的field
.從views取得自定樣式的tpl.php名稱,並新增到版型中
.在tpl.php中產生code,並印出來
.將tpl.php中的nid欄位拿掉(這樣就不會印出來了)

這樣應該就可以解決了.....xd"

我是神豬~神豬的神,神豬的豬.......

我的想法是這樣....

在 field 部分加入該 node 的 path ,然後排除顯示 exclude from display

先在 views 裡面弄個 custom filed 寫 php (我通常都利用 Customfiled: php code 來寫),

先利用

<?php print_r($data); ?>

找出 node url 路徑,或是直接利用 nid 來產生,(不知道你有沒有一定要 url alias)

找到之後套用你提到的那篇 theme('mobilecode') 的方法

<?php
global $base_url;

# compute node alias
$node_alias = $base_url.url("$data->[some_filed]");

# render QR Code
print theme('mobilecode', $node_alias, array('preset' => 'default'));
?>

這樣不知道會不會成功....因為沒試過 theme('mobilecode') ,
如果這個部分沒問題,那應該可以順利幫你把你要的路徑資料轉換成你要的 QR code

試試看吧,期待你的試驗結果...^^

感謝兩位的幫忙,給了我不少嘗試的靈感。
首先我先照amouro的作法去做。不過durpal 7沒有Customfiled: php code可用,所以我改用Views PHP這個模組。
我新增一個global: php欄位,並在裡頭填入改過的jamesliu78程式碼:
<?php
$node_url = url('node/' . $node->nid);
$code = theme('mobilecode', $node_url, array('#preset' => 'large'));
print $code;
?>

不過,殘念,跑出這個錯誤碼:
PHP Fatal error: __clone method called on non-object in .../sites/all/modules/mobile_codes/mobile_codes.module on line 172
經查,drupal.org已經有很多人中標了,至少到去年底都沒解決:http://drupal.org/node/1223430

不死心之餘,按照jamesliu78提示的作法,新增一個path欄位,然後去查views的tpl.php資訊,並版型裡頭新增一個views-view-field--XXX--page--path.tpl.php檔案,在檔案中填寫與上面同樣的程式碼。

結果......

還是一樣:
PHP Fatal error: __clone method called on non-object in .../sites/all/modules/mobile_codes/mobile_codes.module on line 172

這下確定是mobile_codes模組問題,就....死心了。非常感謝樓上兩位的幫忙!
(傷腦筋了,本來以為這是個最簡單可以讓手機和網頁溝通的方法說....看來得另外想辦法@@。)

tky

感謝Hom的線索,請受小弟一拜!給我亂試一下,碰巧就試出來了:http://www.drupaltky.org/case
我的作法是,在views裡頭新增一個global: php field,在output欄位中填入改過的code:
<?php
$node_url = url(drupal_get_path_alias('node/' .$data->nid), array('absolute' => TRUE));
echo "";
?>

因為取出的node url是用絕對路徑,會自動寫成url alias,省了不少功夫。這下就知道以後該怎麼寫了。

我參考Hom給的網頁,查了一下,發覺drupal有Google chart API這個模組可用(事實上mobile code預設也是用Google chart API來產生QR code),還可以跟views整合!(好啦,是我後知後覺)
想繼續請教說,有沒有用過Google chart API這個模組;如果換做用這個模組,同樣效果的code要怎麼寫呢?

tky