August 24, 2007

選擇Label同時更新文章

將將~改出來了。

如大家想要的(假設真的有人想要啦),在右邊按下Label之後,同時更新目前顯示的文章,為目前Label的最新一篇文章

參考了原作者的script裡面的寫法,終於找到原來是按下Label會call到fetchLatestPosts-fetchPosts->updateLabelPosts的最後面呼叫到updatePost(0);

所以就是這邊啦。如果想做這個功能的就在updateLabelPosts這個function裡面,把updatePost(0);放在function的最後面,就可以囉。

如果照這樣寫的話,在Label的地方按了上一頁或下一頁也同樣會Update文章的部份。如果不想這樣Update可以加上判斷式(如下面藍色),讓他只有在換Label才會更新。
if(startIndex==1)
  updatePost(0);


09/12 後記

如果照這樣的作法,可以在每次改label的時候reload目前的post。但是這樣做會有一個問題。就是當user由別人提供的"本文連結"連進來的時候,也會reload第一篇文章。造成不管從哪裡連進來都只會看到最新的一篇文章。這樣就有點麻煩啦。

原因是template在load的時候,會去執行fetchLatestPosts()以產生右邊上面的Recent Posts那一塊。所以如果照原本的寫法,他就會去reload目前的這篇文章,所以使得user不管從哪個文章的link進來都只會看到最新的那篇。

目前我是用一個暫代的方式解決。就是在原先的地方再加入一個判斷式if(startIndex==1&&label!='')
  updatePost(0);

由於第一次load的時候label一定會沒有東西,所以就不會去做updatePost(0)的動作。這樣的結果暫時是可以接受啦,如果將來還有想到更好的作法的話,就再說吧。

9/12 am 9:15
上面這樣做,如果是按了RecentPosts就不會更新現在的post,感覺還是很討厭。於是又做了一點小修改。如果您也有照這篇的作法,修改了label點下去的功能,那麼你就會跟我一樣有一個變數叫做oldlabel。這個變數是用來記錄點了fetchPosts()之前舊的label是哪一個。所以我們就可以用他來判斷,現在點下去是不是有改變label的值。於是我們就可以利用他來決定要不要update目前的post。

作法如下。

Step1 在原本的fetchPosts裡面應該有這樣一段。if(label != oldlabel){
startIndex = 1;
oldlabel = label;
}

由於updateLabelPosts比較晚被呼叫到,所以我們不能再這邊更新oldlabel的值,所以把oldlabel = label;註解掉。

Step2 在updateLabelPosts function的最後面有我們先前改過的這樣的code if(startIndex==1 && label!='')
updatePost(0);

把他改成像下面這樣if(label!=oldlabel){
updatePost(0);
oldlabel=label;
}
也就是將oldlabel的更新改到最後這邊。目前為止看起來還蠻正常的。所以,這樣就可以囉。

5 Comments:

好倫 said...

http://neotemplate.googlecode.com/files/myneochinese4.js

=_=

不行啊

哭哭

Unknown said...

我錯了,原來是我在code裡面多打了一個's'。orz。sorry啦。

BBoy Yentz 燕子 said...

感謝水大分享^^

海風 said...

這次到我求救了 =_= ,試了一整天,我發現套用在自己的Blog會出回小問題。

問題出於oldlabel = label這一行,在我的blog oldlabel不會更新成label,令oldlabel永遠都是空的......water兄有時間可@幫我看看嗎?謝謝。

我的test blog我現在的neo原始檔在這

海風 said...

問題解決了@@,原來在我的blog是要將oldlabel=label放到updatePost(0)上一行,但原因仍是不明呀 =_=