月別アーカイブ表示に年区切りを入れる。
wp_get_archives();で表示される
・2010年3月
・2009年6月
というのを
2010年
・3月
2009年
・6月
みたいな表示にする。
2010年3月等と表示される日本語環境のみ、March 2010とか表示される英語環境だと要修正。
<h3>ARCHIVES</h3> <div class="navi-archives"> <?php //1. 年を抽出して配列に格納 $archives_year = strip_tags(wp_get_archives('type=yearly&show_count=0&format=custom&echo=0')); //wp_get_archivesに対してタグを除去して年数のみ抽出。 $archives_year_array = split("\n",$archives_year); //年数ごとに配列$archives_year_arrayに格納 array_pop($archives_year_array);//配列内の最後に空の配列ができてるので削除。 //$archives_year_array = array_merge(array_diff($archives_year_array, array(""))); で空の配列削除してもOKだった。 //2. アーカイブ一覧を取得して配列に格納 $archives = wp_get_archives('type=monthly&show_post_count=1&use_desc_for_title=0&echo=0'); //月別アーカイブを取得。 $archives_array = split("\n",$archives); //同様に改行ごとに配列に格納。 foreach ($archives_year_array as $year_value){ //1で抽出した年数分繰り返し echo "<h4>".ltrim($year_value)."</h4>\n"; //<h4>で年を表示 echo "<ul>\n"; foreach ( $archives_array as $archives_value) { //月別アーカイブ数分繰り返し if ( intval(strip_tags($archives_value)) == intval($year_value) ) { //1で取得した年と、2の各月別アーカイブの文字列を比較 echo str_replace(intval($year_value)."年","",ltrim($archives_value))."\n";//2の月別アーカイブの各行のhtmlからYYYY年部分を除去して表示。 array_shift($archives_array); //表示した配列を削除。なんとなくこのほうが次のforeachまわるとき処理早くなるかなと思って。 } } echo "</ul>\n"; } ?> </div>
wp_list_categories();の表示ソース整形 ※サブカテゴリ非対応
WPでカテゴリ一覧を表示する時、wp_list_categories();を使うんだけど、そのままだと、
<li class="categories">カテゴリー<ul> <li class="cat-item cat-item-1"><a href="〜" title="〜">〜</a> </li> </ul></li>
となんか見た目いやな感じに表示されるので、整形する。
※サブカテゴリ非対応。
<h3>CATEGORIES</h3> <div class="navi-categories"> <ul> <?php $archives_category = wp_list_categories('show_count=1&hide_empty=1&title_li=&echo=0'); //エントリ数表示、エントリないカテゴリ非表示、タイトルなし、表示せず値を返す。 echo ereg_replace("\n</li>","</li>",ereg_replace("\t","",$archives_category)); //タブを除去した上で、「改行</li>」を「</li>」に置換。 ?> </ul> </div>
特定のページの内容を表示する。
<?php $page_array = query_posts('pagename=about'); //ページのタイトルが「about」のものを抽出 $page = array_shift($page_array); //$page_arrayは多次元配列(二次元?)の状態なので最初の配列を抽出 echo $page->post_content; //ここではpost_content(本文)を表示させてる。 ?>
query_posts('page_id=〜');
としてもいいのだけど、重複タイトルが想定されないならpagenameのほうが都合いい気がする。
id調べなくていいし。
取得したい値は、
print_r($page_array);
で配列の中みて適宜指定するとよい。
コンテクストメニュー(右クリック)から新しいファイルを生成
Windowsの右クリックから新規ファイルをつくるっていう機能を、Macでも。
Leopard時代は、
NuFile
っていうアプリを使っていたのだけど、Snow Leopardになって動かなくなった。
ので、Automaterのサービスで同じようなものを設定する。
・指定されたテキストを取得
・新規テキストファイルのファイル名拡張子
をかえて、いろいろつくっておけば、ほぼNuFileと同じ機能がもてると思われ。
アップロードした画像の縦横を比較して、指定サイズ以内にリサイズする。
まあ、MTで画像をアップする際に、
MT側でリサイズさせちゃおうという方法ですな。
やっていることは
- アップした画像をwidth、heightを取得
- width、heightを比較して、横長画像か縦長画像か判定
- 横長なら、横(width)基準で指定サイズにリサイズ
- 縦長なら、縦(height)基準で指定サイズにリサイズ
<mt:If tag="[フィールド名]"> <mt:[フィールド名]Asset> <!-- $widthに画像のwidthをセット --> <mt:SetVarBlock name="width"><$mt:AssetProperty property="image_width"$></mt:SetVarblock> <!-- $heightに画像のheightをセット --> <mt:SetVarBlock name="height"><$mt:AssetProperty property="image_height"$></mt:SetVarblock> <!-- $widthが$height以上ならwidth="200"、height="なりゆき"でリサイズ --> <mt:If name="width" ge="$height"> <img src="<$mt:AssetThumbnailURL width="200"$>" /> <mt:Else> <!-- $widthが$height未満ならwidth="なりゆき"、height="200"でリサイズ --> <img src="<$mt:AssetThumbnailURL height="200"$>" /> </mt:Else></mt:If> </mt:[フィールド名]Asset> </mt:If> </mt:Entries>
参考:
管理画面でサムネール画像が表示されない
MTで画像に関して、
- 画像(ファイル)のアップロードはできる
- ブラウザでその画像のパスにアクセスするときちんと表示される。
のに、
管理画面のアイテムや、カスタムフィールドのプレビューに表示されない
(<img src="" >みたいになってる、[アイテムを表示]をクリックすると当然ちゃんと表示される)
のような場合、そのサムネール画像がきちんと生成されていないということ。
このあたりの画像(管理画面で表示される画像)は、アップした画像のサムネールで、
デフォルトでは、ブログの公開先URLの[assets_c]というディレクトリに保存される。
なので、[assets_c]ディレクトリを適切なパーミッションでつくってあげると解決。
ちなみに、
mt-config.cgiに、
AssetCacheDir ディレクトリ名
と加えてあげると、[assets_c]の出力位置や、ディレクトリ名の変更ができる。
例:AssetCacheDir images/cache
fsmenu.jsとmootoolsがコンフリクトする問題
fsmenu.js(FreeStyle Menus)というhoverで下層ナビゲーションを表示するスクリプトがあるのだけど、
(HTML+javascriptでDHTMLと呼ばれてたころからあるっぽい)
mootoolsと同時につかうと、コンフリクトして動作しなくなる(fsmenu.jsが)。
今ならfsmenu.jsのとこjQueryやらmootoolsで代替できるっしょって感じなのだろうけど、
なんらかの理由で代替できない時の解決方法。
TYPOlight forum - TYPOlight Open Source CMS
にそのままのってるのだけど、
fsmenu.js関連の記述で、
・AddEvent
・AddEventListener
を
・fsmAddEvent
・fsmAddEventListener
とかに変更するとよい。
※fsmでもなんでもいいみたいで、AddEvent、AddEventListenerが固有のものになればヨイ。
fsmenu呼び出し部分
AddEvent(window, 'load', new Function('listMenu.activateMenu("listMenuRoot", arrow)'));
↓
fsmAddEvent(window, 'load', new Function('listMenu.activateMenu("listMenuRoot", arrow)'));
fsmenu.js
「AddEvent」を一括置換で「fsmAddEvent」
で解決した。