PHPしか動かなくてデータベースが使えないサーバー向けに、CMS導入するということで PivotX を利用して現在サイトを作っているわけだけど、これ、テンプレート作成もそんなに難しくなくて結構便利だし、かなり気に入ったので作業内容を少しメモしておく。
1個だけなら簡単だけど、例えば更新情報と簡単なお知らせ的プレスリリースとか載せたい場合は、ちょっと分かりづらかった。
例えばカテゴリが A B と2つあるときは、name に 共通の名前を入れて、カテゴリー設定で両者の出力を使い分ける。
<div> [[ subweblog name="standard" category='A' ]][[ literal ]] <p>[[ date format="%year%/%month%/%day%" ]]</p> <p>[[title]] [[ editlink format="Edit" prefix=" - " ]]</p> <p>[[introduction]]</p> <p>[[more]]</p> [[ /literal ]][[ /subweblog ]] </div> <div> [[ subweblog name="standard" category='B' ]][[ literal ]] <p>[[ date format="%year%/%month%/%day%" ]]</p> <p>[[title]] [[ editlink format="Edit" prefix=" - " ]]</p> <p>[[introduction]]</p> <p>[[more]]</p> [[ /literal ]][[ /subweblog ]] </div>
この場合、サイト管理?ウェブログ?サブウェブログ で、サブウェブログに両方のカテゴリを出力させること。サブウェブログ設定は結構便利で、1ページに出力する記事数などもここでコントロールできる。
ただ、アーカイブページで使いたい subweblog name と、トップページで使う subweblog name が違う場合だと、トップページに
[[ subweblog name="other" noresult ]][[ literal ]] [[ /literal ]][[ /subweblog ]]
なんて、何も出力しない subweblog name を追加で埋め込んでやらないと、サイト管理?ウェブログ?サブウェブログ にその subweblog name が出てこないので設定できない。
こんな事例はあまりないかもしれないが、自分の場合はデザイン上分けざるを得なかった。(ニュースリリースによくある、左右のフロートしたボックスを同じ高さに揃えるデザインにした場合、繰り返し出力するとデザインが崩れるため。力業で subweblog name をたくさん作って対処しました・・・)
ブログアーカイブのカテゴリ一覧は、トップページに対して出力されるため(ブログ的に)、トップページにアーカイブ一覧を出力するのが厳しいことがある。その場合、
index.php?c=カテゴリ名&o=0
とリンクすれば、アーカイブのテンプレートを使ってカテゴリ記事の一覧が表示できる。他のテンプレートタグを使う方法だと、
<ul> [[category_list format="<li><a %active% href='%url%&o=0'>%display%</a></li>" isactive="id='active'"]] </ul>
みたいに category_list タグを使う方法もある。(余談だが、category_list タグでも %active% とか isactive が使える。ドキュメントには全く書かれてないけど、これのおかげでサイトナビゲーション作成がとても便利だった)
ただ、エントリーページ(個別記事ページ) で自分の今いるカテゴリーをパンくずリストでリンクするのがどうしてもできなかったため、コードを変更した。
pivotx/modules/module_smarty.php 436行目辺りを
$output[] = sprintf("<a href='%s&o=0'>%s</a>", makeCategoryLink($value, $params['weblog']), htmlentities($thiscat['display'], ENT_QUOTES, "utf-8"));
こんな風に変更。これで
[[category link="true"]]
できちんとリンクが張られるようになる。
アーカイブのテンプレートを使ってカテゴリ記事の一覧を表示するとき、パンくずリストに自分がいるカテゴリ名を表示しようとしても、何故か
[[category]]
では表示されないため、以下のようなちょっとトリッキーな方法を採った。
<div id="breadcrumb"> <a href="[[home]]">トップページ</a> > [[category_list format="<span %active%>%display%</span>" isactive="id='print'"]] </div>
追加で、以下のような CSS を書いておく。
#breadcrumb span { display: none; } #breadcrumb span#print { display: inline; }
これで、自分がいるカテゴリだけパンくずリストに表示される。
ということで、ざっとしたメモ。何か思い出したらまた追記するかも。