您在這裡

請教關於Views帶參數的作法?

MarkC's 的頭像
MarkC 在 2011-11-25 (週五) 17:45 發表

網站有新聞系統!每日都有新資訊在其中
若我想做 週報 之類的新聞內容(如本週新聞)
希望網址效果是:http://www.XXX.com.tw/weekly/2011-11-25
他參數傳入後可以過濾出 2011-11-19到2011-11-25 之間所有的新聞
不知道該怎麼處理?
我試過在過濾器中設Post Date!不過......
1. 參數怎麼導到裡面?用%?
2. 因為是固定七天,所以希望填入某日期,它自動過濾該日過去七天的資訊

沒什麼頭緒!麻煩大大給點指引....

嗯,Kay 的方法不錯。

昨天回了之後,也想到這樣回可能太快了,因為我記得 Data 模組似乎可以做到,以前有用過這個功能。

我回覆的時候,念頭一直卡在 MarkC 所寫的 2011-W48,這樣的參數我就不敢確定是否可以了。(應該可以吧,因為 M 的都用過了,W 應該也可以)

呵,真糟糕,現在用 PHP 好像越來越習慣,有時會忘了窮究模組極限的精神。

感謝兩位大大說明!
用了一陣子Drupal!竟然不會用P7D這樣的用法......實在學藝不精..囧
不過呢....
1.若是2011/11/25 前7天呢?
2. 可否只下日期 其他由 Views控制設定?我的意思是只下關鍵日期參數,我需要Sort出 本週新聞與下週活動 這兩部份的資料??

又是PHP?想到又發麻.....

MarkC 一定要前 7 天嗎?如果可以由指定日起往後算 7 天,那麼 Kay 提供的方法已經解決問題了。

又,可以看得出來 Kay 的 PHP 很強,因為 'P7D' 是 PHP date 相關定義的功能。

假如一定要前 7 天,想了又想,好像真的只能寫個 PHP 小程式處理了。(不然且聽聽看 Kay 或其它網友有沒有其它建議)

其實,MarkC 提到的「又是PHP?想到又發麻.....」,好像是許多在台灣的 drupaler 的心聲,包括我自己的學友也曾經問我這個問題。當時我的回答是「多少會一點,不用太多,就可以了。」畢竟大多數人並不需要像國外那樣撰寫工具模組並釋放給大家使用,而只是想解決自己網站中某個特定的問題。

這樣的話,寫個小程式,通常就夠了。最多,寫個小模組,做出剛好自己可以用的功能,也夠了。

以我的例子來說,我在建置通通學網站時,寫了 4 個模組。可是回頭檢視這 4 個模組,其實並沒用到很深的 PHP 技巧。就是那些加減乘除、邏輯判斷,函數呼叫。4 個模組都不大,加一加,總計還不到 1000 行(包括註解喔)。

如果要寫模組,也不是要多強的 PHP 能力,只需要認識 Drupal 的架構與 API。剩下來的又是加減乘除、邏輯判斷、函數呼叫,字串串接與截取,都是 PHP 的基本功能。

至於 PHP 的物件能力,完全不會也沒關係,因為 Drupal 並不是物件導向的程式 (OOP),而是物件導向架構 (OOD)。學會它的架構與 API,您甚至連它具有 OOD 的精神都不知道也沒關係,因為只要使用它的 API,您就遵循了它的架構。(扯遠了,就此打住)

@artt:
網站中有新聞系統與活動系統,其中新聞系統有效的資料當然是過去七天的新聞內容,而活動系統則是往後七天即將舉辦的活動,以我的想法(不知道對不對啦...)做個有參數的Panel Page裡面,裡面帶兩個View,其中新聞系統就抓取參數前七天的資料,活動系統則抓取參數後七天的資料!然後顯示成類似"週訊的效果",

嘿,您的想法不錯,而且很有道理。看來真的要過去 7 天的資訊了。

我想了想,如果是我的話,我會針對收到的參數減 7 天,把 view 叫進來,給它減 7 天後的參數,接著執行並秀出結果。只是這樣就是寫小程式了 (code snippet)。

抱歉,我沒有更聰明的辦法。

@artt,

對對,畢竟不是公開釋放,很多東西不用做得那麼仔細,要不拿一個相近的模組改一改就成了。說不定 DATE 模組中加一個負號就達成目標。你可以將它命名為 MarkC_DATE,不一定會對其他模組造成影響。

很多時候並不需要執著於什麼是 Drupal Way,只要 YOUR OWN WAY 就夠 :)

像 LoginToboggan 這個模組,我不太喜歡它的顯示效果及一些跳轉問題,
你可以寫模組去修改,但我就直接 HACK 掉它,省下不少時間,現在不是用 GIT 嘛,有時小改動也不難維護的

有些 "Drupal Way" 的東西只是研究會、寫 BLOG、顯示個人才能或罵人時使用的, LOL
不要花上一天時間去研究一個小問題,像這篇文章:
http://www.notabluescreen.com/drupal_goto-failed
遇到這類問題,先用暫緩方案 PHP 方法去達成目標,有空時回頭去理解問題所在,或 Drupal Way 也不遲

也不一定要用 Views,你可以拿 Views 的 SQL,用 PHP 來自己寫一寫.....
這是我一篇沒張貼出來的文章內的代碼,就是拿 Views SQL 來做一個 TABLE

<?php
$query = '
SELECT node.title AS node_title, node.type AS node_type, node.status AS node_status, node.created AS node_created
FROM
{node} node
WHERE (( (node.status = \'1\') ))
ORDER BY node_created DESC
LIMIT 1 OFFSET 0';

$res = db_query($query);
$val = '';

$val['header'] = array('Title', 'Type', 'Published');

foreach ($res as $value) {
if($value->node_status == 1) {
$value->node_status = 'Yes';
}
else {
$value->node_status = 'No';
}
unset($value->node_created);

$val['rows'][] = (array) $value;
}
echo theme('table', $val);
?>

大多網站都是小型的,我習慣有一個叫 sitebuilder 的模組,將所有修改堆在一起 :)
我也說.........遠了.....

@MarkC,
API: Views Query Alter 可能幫到你 :)

@Kay,

呵呵,我們二個想法相同。

我的網站也有一個專用的模組,例如通通學網站的模組就叫做 totolearn, 只是我又把它依功能拆成 3 個更小的模組。

真的是:解決問題,有效就好了。這也符合 Agile 的精神,不需要多餘的架構。