LifeType 中文開發論壇

開發 => 模版設計 => 主題作者是: hsuzy 於 二月 09, 2006, 07:48:35 下午



主題: [請益]smarty的技巧(關於文章彙整)
作者: hsuzy二月 09, 2006, 07:48:35 下午
程式碼:
<ul>
{foreach from=$archives item=month}
    <li><a href="{$month->getUrl()}">{$month->getName()}</a> [{$month->getNumArticles()}]</li>
    {/foreach}
 </ul>
上面這段會產生
. 八月 2005 [9]
. 四月 2005 [1]
. 十一月 2004 [2]
. 八月 2004 [1]
. 四月 2004 [1]
--
因為如果月份太多, 會拉很長, 但是我又不喜歡下拉式的
我想做的是像
2005
八月[9], 四月[1]
2004
十一月[2], 八月[1], 四月[1]
--
不知道哪裡有類似樣板可以參考?
另外 {$month->getName() 不知道如果定義的?
看 api文件也看不太懂  :'(


主題: Re: [請益]smarty的技巧(關於文章彙整)
作者: lss二月 09, 2006, 08:26:59 下午
hi hsuzy:

很抱歉,可能要讓你失望了 :-(

月份彙整的部份,在 LT 裡面是以 MyLinkArchiveLink 類別(繼承自 MyLink 類別,多了紀錄該月文章數的屬性)實作,所以樣版檔裡的 $archives 是相當於 $linkcategory->getLinks() 一樣,是一個 MyLinkArchiveLink 物件的陣列,而不是以年度、月份分類的物件陣列。簡單的說,你提供的樣版代碼裡面的 $month ,是跟我的連結部份的 $link 物件是一樣相似的,而 $month->getName() ,已經被固定為 「二月2006」 的格式了。

你可以看看 class/view/blogview.class.php 裡面的 _getArchives() 函式。

如果要達成你的要求,一是改上述的程式,另一是寫個 plugin 來提供你要的功能。

lss


主題: Re: [請益]smarty的技巧(關於文章彙整)
作者: lss二月 09, 2006, 11:54:43 下午
hi hsuzy:

我有實作一個 hack ,一個修改版的 blogview.class.php ,配合模版的修改,可以達成如附圖的效果。月份沒有接在同一行是因為 CSS 的關係。

不過,使用這個 hack 的話,會有幾個後遺症,先講清楚:
1.所有的模版都要配合修改,如果你的 LT 站是多人使用的話,要考慮一下囉!
2.未來 LT 更新版本,hack 極可能(99%以上)要重新修補才能繼續使用。
如果你不怕麻煩,仍舊有興趣的話,回應一下吧!

另外,如果有人路過覺得這個不錯也回應一下,若很多人有興趣,我就試試回報到臭蟲追蹤系統,看看能不能被加入 1.1 版。若被加入,未來升級 1.1 時,那是所有模版都要改才能用了。

lss


主題: Re: [請益]smarty的技巧(關於文章彙整)
作者: james二月 10, 2006, 12:02:38 上午
hi hsuzy:

我有實作一個 hack ,一個修改版的 blogview.class.php ,配合模版的修改,可以達成如附圖的效果。月份沒有接在同一行是因為 CSS 的關係。

不過,使用這個 hack 的話,會有幾個後遺症,先講清楚:
1.所有的模版都要配合修改,如果你的 LT 站是多人使用的話,要考慮一下囉!
2.未來 LT 更新版本,hack 極可能(99%以上)要重新修補才能繼續使用。
如果你不怕麻煩,仍舊有興趣的話,回應一下吧!

另外,如果有人路過覺得這個不錯也回應一下,若很多人有興趣,我就試試回報到臭蟲追蹤系統,看看能不能被加入 1.1 版。若被加入,未來升級 1.1 時,那是所有模版都要改才能用了。

lss
我~~我~~我~~超有興趣的 :) 不過想到模版要更改,又有點矛盾。
不過我還是感興趣啦 ^_^
我還有另一個想法是,只秀出當年的月份,其它的就只秀年份的連結(點了後在秀出該年的月份)
這應該可以用 lss的hack在加上javascript來達成 :)
我也來研究看看囉 ^^

James.


主題: Re: [請益]smarty的技巧(關於文章彙整)
作者: hsuzy二月 10, 2006, 01:14:01 上午
感謝 lss的說明, 看到沒辦法使用現成的變數, 小弟用粗淺的smarty功力硬幹了
程式碼:
                	<ul>
                        {assign var="archivesYear" value=3000}
                        <li>
                {foreach from=$archives item=month}
                            {assign var="archivesYearTemp" value=$month->getName()|regex_replace:"/[ 一二三四五六七八九十月]/":""}
                            {if $archivesYear neq $archivesYearTemp}
                                {assign var="archivesYear" value=$archivesYearTemp}
                                </li>
                                <li>{$archivesYear}</li>
                                <li>
                            {else}
                                ,
                            {/if}
                    <a title="{$month->getUrl()}" href="{$month->getUrl()}">{$month->getName()|regex_replace:"/[ 1234567890]/":""} [{$month->getNumArticles()}]</a>
                {/foreach}
              </ul>


主題: Re: [請益]smarty的技巧(關於文章彙整)
作者: lss二月 10, 2006, 08:39:10 上午
hi hsuzy:

你太謙虛了,會這樣用 smarty 設計模版,怎可說是“粗淺“呢 ;-)

建議一下,還可以再“精鋉“一下,改成如下:
引用
<ul>
{assign var="archivesYear" value=3000}
   <li>
   {foreach from=$archives item=month}
      {assign var="archivesYearTemp" value=$month->getName()|regex_replace:"/[^ 1234567890]/":""}
      {if $archivesYear neq $archivesYearTemp}
         {assign var="archivesYear" value=$archivesYearTemp}
         {$archivesYear}</li><li>
      {else}
         ,
      {/if}
      <a title="{$month->getUrl()}" href="{$month->getUrl()}">
         {$month->getName()|regex_replace:"/[ 1234567890]/":""} [{$month->getNumArticles()}]
      </a>
   {/foreach}
   </li>
</ul>
紅色部份,可以減少一對冗餘的 <li></li> 標籤,而藍色的部份,則可讓其他語系也能適用。
當然,這只能適用於月份彙整的標題一定是用「非數字月份」加上「數字年」的格式。根據 blogview.class.php 裡的程式碼,這個格式是可以設定的,只是沒有加入管理介面而已。

hi james:
既然你也有興趣了,我整理一下再發佈,大家來玩玩看吧!

lss


主題: Re: [請益]smarty的技巧(關於文章彙整)
作者: lss二月 10, 2006, 11:21:27 上午
hi all:

我把文章整理出來了,請看 兩層式的文章月份彙整  (http://blog.nlhs.tyc.edu.tw/post/2/109)

因為是修改核心做出來的,所以同步發佈在 核心補強 版的這裡 (http://forum.lifetype.org.tw/index.php?topic=1879.0)了。

lss


主題: Re: [請益]smarty的技巧(關於文章彙整)
作者: Nyserq五月 17, 2006, 09:47:51 下午
之前沒看到這串討論,昨天也是想半天,結果想出幾乎一樣的做法...
差別在於regular expression的取法
程式碼:
{assign var="name" value=$month->getName()}
{assign var="year" value=$name|regex_replace:"/.+ /":""}
{assign var="monthString" value=$name|regex_replace:"/ .+/":""}
前提是彙整標題必需是 月份在前年份在後,中間用空格分開的寫法。

另外我想再請教另一個關於彙整頁的問題
我想在每一個分類頁或按月彙整頁的上方顯示該分類名稱(或描述)或月份名稱
不過除了可以用$showAll這個變數來判斷是不是在分類或日期彙整頁之外
好像沒辦法知道是在哪一個分類或月份

不知道我講的清不清楚,請問有辦法可以做到嗎?


主題: Re: [請益]smarty的技巧(關於文章彙整)
作者: lss五月 17, 2006, 10:47:51 下午
年 => $Year (數字)
月 => $Month (數字)
文章類別名稱 => $category->getName()

搭配 $showAll 應該夠用了吧。

你可以來我的 blog 看看效果是不是你要的。  :-)

lss


主題: Re: [請益]smarty的技巧(關於文章彙整)
作者: Nyserq五月 17, 2006, 11:04:23 下午
年 => $Year (數字)
月 => $Month (數字)
文章類別名稱 => $category->getName()

搭配 $showAll 應該夠用了吧。

你可以來我的 blog 看看效果是不是你要的。  :-)

lss

改好了,感謝.... :-)
請問這些物件有文件可查嗎?


主題: Re: [請益]smarty的技巧(關於文章彙整)
作者: lss五月 17, 2006, 11:28:47 下午
改好了,感謝.... :-)
請問這些物件有文件可查嗎?
那個~~~這個~~~

好像沒有耶  :-$

我是追原始碼找到的。你可以看看 class/action/defaultaction.class.php 。

LifeType 的 MVC 架構與實作,不是三言兩語可以講完的  :-(

lss


主題: Re: [請益]smarty的技巧(關於文章彙整)
作者: markwu五月 18, 2006, 10:38:23 上午
目前唯一的 物件文件,可能要到 API 去看: http://api.lifetype.org.tw。

或是 wiki http://wiki.lifetype.org.tw

Mark