※ 商品のリンクをクリックして何かを購入すると私に少額の報酬が入ることがあります【広告表示】 アーカイブへの月毎リンクが結構な数になってしまったので、シンプルにしてみた。
いつも通りDTMLをごにょごにょしてごまかそうとした所、DTMLは変数をぐりぐりすることが出来ないことに気づく(今頃かい・・・)。
ついにCOREBlogのソースコードをいじってしまった。
※COREBlog1.2を対象にしています。
参考にして壊れても知りません。
またZopeのコード記述に関する定石も知らないので、いい加減なコードです。
まず、modulesのarchivesをZMI上でコピーペースとしてarchives2というDTMLMethod?を作る。
<dtml-unless module_item_count>
<dtml-call "REQUEST.set('module_item_count',15)">
</dtml-unless>
<dtml-let prev_year="0">
<h3><dtml-if "_.len(document_title)>0"><dtml-var document_title><dtml-else>ARCHIVES</dtml-if></h3>
<ul>
<dtml-in prefix="year_loop" expr="month_archive_items2(count=36)">
<dtml-if year_loop_odd><li class="odd">
<dtml-elif year_loop_even><li class="even">
</dtml-if>
<dtml-in prefix="month_loop" expr="year_loop_item" mapping reverse>
<dtml-if expr="month_loop_number == 1">
<dtml-var year>:
</dtml-if>
<a href="<dtml-var blogurl>/monthlist_html?year=<dtml-var year>&month=<dtml-var month>"><dtml-var month></a>
</dtml-in>
</li>
</dtml-in>
</ul>
</dtml-let>
COREBlogのCOREBlog.pyを修正する。
def month_archive_items(self,count=1,start_year=0,start_month=0):のメソッドの下あたりに追記する。
security.declareProtected(View, 'month_archive_items2')
def month_archive_items2(self,count=1,start_year=0,start_month=0):
""" Return list of year/month archive. """
count = r2i(count,1)
start_year = r2i(start_year,0)
start_month = r2i(start_month,0)
if start_year == 0 or start_month == 0 or start_day == 0:
#Base date is today
t = localtime(time())
year = t[0]
month = t[1]
else:
year = year
month = month
ret_l = []
ret_d = {}
cnt = 100 #limitter
while cnt > 0 and count > 0:
if not self.datemap.has_key(year):
cnt = cnt - 1
month = 12
year = year - 1
continue
year_s = self.datemap[year]
if year_s.has_key(month):
if ret_d.has_key(year):
ret_l = ret_d[year]
else:
ret_l = []
ret_d[year] = ret_l
ret_l.append({"year":year,"month":month})
count = count - 1
month = month - 1
if month < 1:
month = 12
year = year - 1
cnt = cnt - 1
ret_x = []
for k in ret_d:
ret_x.append(ret_d[k])
return ret_x
COREBlog.pyへの変更を反映するために、リフレッシュかZopeの再起動をする。
modulesのindex_htmlにあるdtml-varをarchiveからarchive2に変更する。
終わり