月別アーカイブ表示に年区切りを入れる。

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」

で解決した。