Trackbackの不具合・その後
直りました(というかいわゆるIllegal Operation Error _| ̄|○)。
お騒がせして申し訳ありません。
ですがコメント登録に時間がかかる等の性能問題は相変わらずです。再構築に時間がかかる話を以前書いたのですがアクセス状況が以前と大幅に変わってきているのでどうやらCeleron・633MHzのマシンでは限界のようです。こちらについてはPCの交換を検討中ですがサーバ構築に時間がかかりそうなのでしばらくお待ち頂きたいと思います。
Trackbackの不具合
ここ数日に書いたエントリーで参照させて頂いているサイトの該当記事にTrackbackを送信しているのですが、相手方のサイトにTrackbackが反映されないという事象にでくわしています。
ということでただいま調査中です。ちなみに現在の状況ですが、
- エントリー登録時にTrackbackエラーは出ていません
- 送受信ともNGの模様(他blogからのTrackbackが反映されません)
- 作成日時を変えるとTrackbackしないという記事があったので試しましが×
- 同一エントリーからリトライしても×
という状況です。性能的に無理が生じてきたのでしょうか…。
エントリー投稿画面へのリンク追加
Magic Whiteさんの編集修正楽にするでご連絡いただいていた方法でエントリーの投稿画面へのリンクを個別アーカイブ右下に「Edit」で追加しました。
これは自分の投稿したエントリーを読んでいる最中に編集したくなった時、このリンクをクリックしたらすぐに編集画面にジャンプできるというものです(PC上でMovable Typeのログイン・パスワードのcookieが残っていれば編集画面へ、残っていなければログイン画面にジャンプします)。
便利よさそうです。ありがとうございました。
2004.11.01 追記
ソースを追加しました。個別アーカイブテンプレートの場合、下記の部分に青色のタグを追加すればOKです。
<div class="posted">Posted by <$MTEntryAuthor$> at <$MTEntryDate$>
| <a href="<$MTCGIPath$>mt.cgi?__mode=view&_type=entry&id=<$MTEntryID$>&blog_id=<$MTBlogID$>">Edit</a>
</div><!-- posted -->
あと細かいですが、<$MTEntryDate$> の後ろに半角スペースを入れてやってください。
コメントスパム対策(その4)
我楽さんのコメント投稿で500エラーが出るけど、投稿反映される件について。でアドバイス頂いた通り、mt-comments.cgiのファイル名変更してみました。これで様子をみてみたいと思います。ありがとうございました。
コメントスパム対策(その3)
再びオンラインカジノからコメントスパム頂きましたので次の対策を打ってます。ちなみに前回より私が行っている対策はコメントに特定の文字列が入力された時だけエラーにするというものです。多分「kasino」とか変な日本語混ぜてまた来るんでしょうね…。
QRコード設定
Magic WhiteさんのQRコードつけてみた。経由のurl2QRcodeで生成したQRコードをサイドメニューにつけました。QRコードにはblogの携帯用URLを変換したものが設定されています。そしてこの画面に表示されたQRコードを携帯で認識させればURLをわざわざキーで打ち込まなくても携帯用のサイトにいくことができます。使用頻度は明らかに低いと思いますがQRコードの幾何学的デザインが気に入っているので。
本当はMTQRcodeをつけてみたいのですがWindows自宅サーバ者にはかなりハードル高そうでとりあえず変換した画像を貼り付けてます。
で、「これつけても読み込めないしなー」と思っていましたが、先日購入した携帯に「バーコードリーダ」というのがあり、起動すると真四角の枠が出たので試しにQRコードを認識させたところ、見事読み込めました(マニュアル読んでない)。
Magic WhiteさんのQRcodeも正常に読み込めました。
カレンダーの文字サイズ修正
公開中のスタイルシートですが、カレンダーのリンク以外の日付の文字サイズが設定されていませんでした。設定されてないとエントリーされていない日の文字サイズが大きく表示されてしまう不具合が発生する場合があります。
現在テンプレートをご利用頂いている方は下記のスクリプトを styles-site.css の .calendar の下辺りに追加することで不具合は解消します。
.calendar td {
font-size:9px;
}
なお公開版の方は修正済です。ご迷惑おかけして申し訳ございませんがよろしくお願い致します。
コメントスパム対策(その2)
半角英数のみのコメントをエラーとする対処にしていましたが、本文に「オンラインカジノ」と書かれたコメントスパムを3件頂きました(削除済)。
という訳で現在新たな対処を盛り込んでいます。不具合等ございましたらお許しください。
サイドメニュー折りたたみ(改)
2004.12.06 追記
サイドメニュー折りたたみのエントリーを書き直しましたので
を参照ください。
我楽さんのサイトにあるサイドメニューの折りたたみが気に入り、あらかたできたので、ぼちぼちエントリー追加。経由で
に随分前から取りかかってましたがようやく陽の目を見ることになりました。苦労した点はあとで書くとして、とりあえずメモ。
なお関連記事もございますのでよろしければ後ほど参照ください。
この機能は文字のごとくサイドメニューの折りたたみです。メニューのタイトル部分は常時表示で、タイトル横にある[+]/[-]でメニューリストの表示・非表示を切り替えられます。またメニュー単位に表示・非表示の初期状態を設定できます。
私の場合はリストが長いものに折りたたみをつけ、さらに利用度が低いと思われる「Monthly Archives」と「Recent Entries」を折りたたんだ状態にしてみました。またメニューのリスト合計数をタイトル横に表示できます。そのままの流用では正常に表示されませんでしたが若干のスクリプト修正で有効になりました。以下設定方法です。
1.テンプレートのサイドメニューにid属性を付与
下記の要領で折りたたみたいサイドメニューのタイトルに「id=xxname」、リストの方に「id=xxlist」を付与します。"name"と"list"は固定、"xx"の部分はメニュー毎に異なる名称を付与します(例えばカテゴリーリストは"category"、エントリーは"entry"等)。
<div class="sidetitle">
Categories
</div>
<div class="side">
<MTCategories>
<a href="<$MTCategoryArchiveLink$>">
<$MTCategoryLabel$></a> [<$MTCategoryCount$>]<br />
</MTCategories>
</div>
<div class="sidetitle" id="categoryname">
Categories
</div>
<div class="side" id="categorylist">
<MTCategories>
<a href="<$MTCategoryArchiveLink$>">
<$MTCategoryLabel$></a> [<$MTCategoryCount$>]<br />
</MTCategories>
</div>
2.JavaScriptファイルの作成
下記の内容を丸ごとコピーして"menufolder.js"という名前のファイルを作成します。作成したファイルはここではmt.cgiが配置されているディレクトリに配置することにします。赤および青字はオリジナルのスクリプトとの差分を示しています。
オリジナルではスクリプトをテンプレートに直接記述されていますが、他のテンプレートで同機能を持ちまわることを考え、ここでは独立したファイルにしてみました。注:ファイルの文字コードはBlogの文字コードと一致させてください。またMac+IEの場合は、後述の「テンプレートにJavaScriptファイル読み込みの設定」で示された位置に、本スクリプトを直接埋め込むようにしてください(jsファイルを正常に読み込めない報告を頂いております)。
function InitFoldNavi() {
FoldNavigation('newentry','off',false); // new entry
FoldNavigation('entry' ,'on' ,true); // entry
FoldNavigation('comment' ,'on' ,false); // comment
FoldNavigation('tb' ,'on' ,false); // trackback
FoldNavigation('archive' ,'off',true); // archive
FoldNavigation('link' ,'on' ,true); // link
FoldNavigation('profile' ,'off',false); // profile
}
function FoldNavigation(idName,initMode,viewNum) {
var openMark = '[+]'; // open mark
var closeMark = '[?]'; // close mark
var preMark = true; // position of mark
var idTitle = Array(idName,'name').join('');
var idList = Array(idName,'list').join('');
var objTitle = this.document.getElementById(idTitle);
var objLists = this.document.getElementById(idList);
if (!objTitle || !objLists) return;
var dispMode = objLists.style.display;
if (!dispMode) {
var tmpText = Array('FoldNavigation(',"'",idName,"','chng','');return(false);").join('');
var insMark = new Array();
var insText = new Array();
insMark[insMark.length] = Array('<a class="foldmark" href="#" onclick="',tmpText,'" onkeypress="',tmpText,'">').join('');
insMark[insMark.length] = (initMode == 'off') ? openMark : closeMark;
insMark[insMark.length] = '</a>';
if (preMark) insText[insText.length] = insMark.join('');
// insText[insText.length] = objTitle.innerHTML;
if (viewNum) {
var objItems;
objItems = objLists.getElementsByTagName('a');
var counter;
if (idName == "link") { // delete 3Link
counter = objItems.length - 3;
} else {
counter = objItems.length;
}
insText[insText.length] = ' ' + Array(' <span>',counter,'</span>').join('') + ' ' + objTitle.innerHTML;
} else {
insText[insText.length] = ' ' + objTitle.innerHTML;
}
if (!preMark) insText[insText.length] = insMark.join('');
objLists.style.display = (initMode == 'off') ? 'none' : 'block';
objTitle.innerHTML = insText.join('');
} else if (initMode == 'chng') {
var objMarks = objTitle.getElementsByTagName('a');
for (i=0;i<objMarks.length;i++) {
if (objMarks[i].className == 'foldmark') {
objMarks[i].firstChild.nodeValue = (dispMode == 'none') ? closeMark : openMark;
}
}
objLists.style.display = (dispMode == 'none') ? 'block' : 'none';
}
}
InitFoldNavi();
以下スクリプトの説明です。上部にある
FoldNavigation('newentry','off',false);
ですが、()内のパラメータの意味はそれぞれ
FoldNavigation('id属性名','初期状態',リスト数表示);
です。id属性名が先の"category"や"entry"に対応します。つまり折りたたみをしたいメニュー分、この行を作ります(注:全角文字(空白など)が混入しないように気をつけてください)。その右の初期状態はページを開いた時の折りたたみ状態です。onは開いた上体、offは閉じた状態です。最後のリスト数表示はタイトル横にそのメニュー内のリスト数(例えばカテゴリーメニューにカテゴリーが10あれば"10")を表示します。'true'と記述すれば表示、'false'は非表示です。
青色部分はオリジナルから変更した部分です。以下主な変更内容です。
まず、"[+]"、"[?]"はメニュータイトル横に表示される折りたたみ切り替え用のリンク文字です(好きな文字を設定できます)。
このスクリプトは前述の通りタイトル横にリストの合計数を表示してくれます。オリジナルは"li"のタグ数を計算して表示していますが改造版では<a href="?">タグの数を計算するようにしています(リスト表示に<li>タグを使っていないため)。またオリジナルではリストの合計数をタイトル右側に"()"で表示していますが、このスクリプトではタイトルの左側に表示するようにしてみました。BlogPeopleのリンク数についてはバナーと登録用リンクの計3つが余分なので、その分を減算しています(エレガントさに欠けますが…)。
さらに折りたたみ用マークをつけることでタイトルの位置が若干左にずれるため、タイトル左に全角空白を1文字挿入して微妙に位置調整しています(ただしマークをタイトル右側に挿入することが前提)。
3.テンプレートにJavaScriptファイル読み込みの設定
テンプレートの一番最後の方(</body>の直前等)に、先に作成したJavaScriptファイルを読み込むためのタグをを挿入します。
<script type="text/javascript" src="http://xxx/menufolder.js"></script>
"xxx"の部分には任意のURLを設定してください。JavaScriptファイルをmt.cgiと同じディレクトリに配置した場合、私のblogを例にとるとxxxの部分は"www.koikikukan.com"になります。
4.スタイルシートの追加
styles-site.css の .sidetitle の下に下記を追加します。
.sidetitle a {
float: right; /* マークを右側に配置 */
width: 1.8em;
text-decoration: none;
}
.sidetitle a.foldmark {
font-size:7px; /* マークのフォントサイズ */
padding-right:3px; /* マークの位置調整 */
}
このスタイルシートは適切な指定でないかも知れませんがとりあえず正常に動作しています。
設定方法は以上です。当初マークが右側に配置されなくて悩みましたがオリジナルのサイトにかなりの質問コメントが寄せられており、そちらを参照しました(スタイルシートのfloat: rightの設定とJavaScript上部にある「マークの挿入位置」がきちんと指定できていれば大丈夫みたいです)。
マークは右側に無事配置されたのですが今度はタイトル右端にくっついてしまうのが気になるので、これはpaddingで調整しました。blogの中にblogを作っている気分です。この時スタイルシートを変更しても変更が反映されずまたしても悩みましたが、ブラウザのキャッシュに古いデータが残っているのが原因のようでした。IEであればブラウザの「更新」をクリックするかキャッシュを削除しましょう。
ちなみに「Recent Comments」等もリスト数を取得できる筈なのですが動作確認できていないので保留にしています。できるようになりました。↓追記参照ください。
2004.08.31追記
上記2.の青色部分を下記のスクリプトの青色部分と入れ替えれば「最近のコメント」も件数表示が可能になります。これは「最近のコメント」にあるURLのaタグの"#"を計数しています。
if (viewNum) {
var objItems;
var href;
var commentCounter = 0;
objItems = objLists.getElementsByTagName('a');
if (idName == 'comment') {
for (i = 0; i < objItems.length; i++) {
href = objItems[i].getAttribute("href");
if(href.indexOf("#") == -1){
commentCounter++;
}
}
}
var counter;
if (idName == "link") {
counter = objItems.length - 3;
} else {
counter = objItems.length - commentCounter;
}
insText[insText.length] = ' ' + Array(' <span>',counter,'</span>').join('') + ' ' + objTitle.innerHTML;
} else {
insText[insText.length] = ' ' + objTitle.innerHTML;
}
2004.09.20追記
BlogPeople以外にリンクを増やす場合は
if (idName == "link") { // Linkは不要な3リンク分を減算
counter = objItems.length - 3;
} else {
counter = objItems.length;
}
の部分を
if (idName == "link1") {
counter = objItems.length - 3;
} else if (idName == "link2") {
counter = objItems.length - 2;
} else {
counter = objItems.length;
}
のように、link名を適宜対応した属性名のものに変更して条件文を必要な分だけ追加してください。追加するのは減算が必要な場合だけです。
2004.10.01追記
コピー後、";"のある行は途中で折り返しがないかご確認ください(折り返しがあるとsafariで正常に表示されないようです)
2004.11.01追記
サイドメニュー折りたたみ状態保持スクリプトおよびサイドメニュー折りたたみの動作遅延対処へのリンクを本文に追加しました。
2004.11.02追記
JavaScriptの日本語コメントを半角英数に修正しました。またMac+IEの場合はmenufolder.jsを正常に読み込めないようですので、スクリプトを直接テンプレート内に埋め込む記述を追加しました。
Trackback文字化け対処
Trackbackの文字化けを対処しました。遅くなってすいません > いつもTB頂いているMagic Whiteさん
これは文字コードの異なるBlog(例えばサイトAがUTF-8、サイトBがShift_JIS等)同士でTrackbackを行うと文字化けが発生(サイドメニューのRecent Trackbackの部分)し、これに対する対処です。Trackbackを受信するサイトが対処します。ちなみに現在このサイトはMT3.0Dなのですが、MT3.01D-jaでUTF-8とShift_JISの試験サイトをそれぞれ作ってUTF-8側をTrackback受信サイトとした場合、この対処なしでも文字化けは発生しませんでした(間違ってたらすいません)。
という訳でいつもの手順メモ。
Jcode.pmのダウンロード
Comprehensive Perl Archive NetworkよりJcode-0.86.tar.gzをダウンロード(現在はこのURLにあり、0.83/0.86/0.87があったので0.86を選択)。
Jcode.pmの配置
ダウンロードしたファイルを解凍し、その中の Jcode.pm と Jcode フォルダを extlib フォルダ直下に配置。
TrackBack.pmの編集
lib/MT/App/TrackBack.pm を任意のエディタで開き、下記に青色部分のコードを追加。
sub no_utf8 {
require Jcode;
for (@_) {
next if !defined $_;
$_ = pack 'C0A*', $_;
$_ = Jcode->new($_)->utf8;
}
}
"utf8"の部分は自blogの文字コード("euc"、"sjis"等)を設定。
動作確認
自サイトの任意のエントリーに表示されているTrackback URLをブラウザに設定して、下記のXMLが表示されればOKみたいです。
<?xml version="1.0" encoding="iso-8859-1" ?>
-<response>
<error>1</error>
<message>Need a Source URL (url).</message>
</response>
参考サイトは下記です。ありがとうございました。
2004/09/15追記
2004/09/11に Movable Type 3.01D-jaにしたため、この対処は現在使用しておりません。
追記文章の折りたたみ用スクリプト(改)
#「追記折りたたみスクリプト」で再び隠した時に表示がずれるのが気になる方へ。
Movable Type のエントリーの「追記」部分に書いた文章は、エントリー本文の最後に「続きを読む」というリンクが現れ、それをクリックした時に読めるようになります。
ところがデフォルトの設定ではこのリンクをクリックすると個別アーカイブのページにジャンプしてしまい、さっきまで読んでいた箇所まで探さないといけなくなります。感覚的には「続きを読む」をクリックしたらそのまま下に続きを表示して欲しいところです。
そういう訳で、このスクリプトは今読んでいるページを動かさずに本文下に追記を表示してくれるというスグレモノです。これも以前から導入したかった機能でようやく実現できました。「追記」に文章書いたことは一度もないのですが(笑)。
スクリプトは色々なサイトに転がっており、オリジナルはScriptygoddessさんのサイトみたいです。
タイトルの(改)ですが、オリジナルのスクリプトでは続きを再び隠した時に画面がビクッとなり(=アンカー指定の位置にずれる模様)、それが起きないようJavaScriptをちょっと修正しました。それからオリジナルはコメント部分にも使える仕様ですが本文でしか使わないと思い、コメント関連のコードも削除してます。
とりあえずソースと手順を載せておきます。
1.テンプレートにスクリプト追加
リスト1のスクリプトを <head>~</head> の間にコピーしてください。
<script type="text/javascript">
function showHide(entryID, entryLink, htmlObj) {
extTextDivID = ('Text' + (entryID));
extLinkDivID = ('Link' + (entryID));
if( document.getElementById ) {
if( document.getElementById(extTextDivID).style.display ) {
if( entryLink != 0 ) {
document.getElementById(extTextDivID).style.display = "block";
document.getElementById(extLinkDivID).style.display = "none";
htmlObj.blur();
} else {
document.getElementById(extTextDivID).style.display = "none";
document.getElementById(extLinkDivID).style.display = "block";
}
} else {
location.href = entryLink;
return true;
}
} else {
location.href = entryLink;
return true;
}
}
</script>
リスト1:折りたたみ用スクリプト
2.テンプレートタグの修正
リスト2の赤字部分をリスト3の青字に入れ替えます(緑色部分は隠した時に表示がずれないための改造箇所)。
<MTEntryIfExtended>
<span class="extended">
<a href="<$MTEntryPermalink$>#more">続きを読む "<$MTEntryTitle$>"</a>
</span><br />
</MTEntryIfExtended>
リスト2:追記表示用MTタグ(修正前)
<MTEntryIfExtended>
<div id="Link<$MTEntryID$>">
<a href="<$MTEntryPermalink$>" name="<$MTEntryID pad="1"$>" onclick="showHide(<$MTEntryID$>,'<$MTEntryPermalink$>',this);return false;">続きを読む ≫</a>
</div>
<div id="Text<$MTEntryID$>" style="display: none">
<$MTEntryMore$>
<a href="<$MTEntryPermalink$>" name="<$MTEntryID pad="1"$>" onclick="showHide(<$MTEntryID$>,0,this);return false;">≪ 続きを隠す</a>
</div>
</MTEntryIfExtended>
リスト3:追記表示用MTタグ(修正後)
Category Archive/Date-Based Archiveも同様です。<MTEntryIfExtended>~</MTEntryIfExtended>で括られた部分を適宜入れ替えてください。個別エントリーアーカイブについては「個別アーカイブに続きを読むを導入」をごらんください。
2006.04.04 追記
リストから language 属性を削除しました(HTML4.01/XHTMLで非推奨あるいは廃止されているため)。
以上です。↓「続きを読む」をクリックするとこんな感じで追記が表示されます。
コメントスパム対策
ようやく取りかかりました。
- コメントスパムを削除する手間が面倒
- コメンターの方への入力文字制限をしない
というポリシーで、当初我楽さんのコメントスパム、補足というか・・・。経由で女子十二月号さんのMovableTypeコメントスパム対策をと思いましたが、コメントプレビューテンプレートでユーザ定義のhiddenタグが引き継げない(スキル不足?)ことが発覚し、今のところMagic WhiteさんのTypeKey対応などなどスパム対策経由できままにポロポロさんの続々コメントスパムを参考にさせて頂いて、半角英数のみのコメントをエラーとする対処にしています。
このサイトでのTypeKey機能
は正常に動作していません。サインインをしても「The validation failed.」となります。調べたところ、Individual Entry Archive の
<$MTSignOnURL$>&<MTIfNeedEmail>
を
<$MTSignOnURL$>&v=1.1&<MTIfNeedEmail>
に変更すれば良いということでやってみたのですが同じ現象でした。まあこれはアップグレードの方用の対処であって、私は3.0Dで無理矢理やってますからね…(よく調べきれてないので勘違いしているかも知れませんが今日のところはここまで)。
あとこのエラー画面ってなかなか出ないのでこの際テンプレートを直しておこうかと(負け惜しみ)。
2004.10.04 追記
現在はMovable Type 3.01D-jaで運用しておりますのでTypeKey機能は正常に動作しています。
カレンダーのリンク修正
月別アーカイブのページ分割後、カレンダーからクリックしたページのジャンプが思い切りおかしくなってました。デフォルト状態でのカレンダーからのリンクは、月別全体のページ+aタグのname属性でジャンプするのですが、ページ分割をしてしまうとその機能が無効になります。
ということで、再びMagic Whiteさんのカスタマイズメモその3からからIllustrations "choco*choco"さんの「アーカイブの名前を変えたよ」へ(最後までよく読んでなかったですね…)。
手順は以下の通りです。
「アーカイブファイルのテンプレート」修正
管理メニューの「ウェブログの設定」→「アーカイブの設定」でアーカイブの「日別」にチェックして「アーカイブファイルのテンプレート」に
<$MTArchiveDate format="%Y/%m/%d"$>-index.php
を設定。変更を保存。
テンプレート修正
カレンダーを使っているテンプレートで赤色部分を青色部分のように変更
<MTEntries lastn="1">
<a href="<$MTEntryLink archive_type="Monthly"$>#<$MTEntryID pad="1"$>">
<$MTCalendarDay$></a>
</MTEntries>
<MTEntries lastn="1">
<a href="<$MTEntryLink archive_type="Daily"$>">
<$MTCalendarDay$></a>
</MTEntries>
サイトの再構築
以上です。日別でジャンプしたところのサイドメニューも少し修正したいのですがとりあえずここまで。ちなみにテンプレートを持っていかれた方は元々下の設定になっていました。2ヶ月表示に変更した時のテンプレートが上の設定になっていたようです(無知)。
非常にすっきりしましたが再構築時間がちょっと心配。
カテゴリーアーカイブと月別アーカイブのページ分割
Movable Type でのカテゴリーアーカイブと月別アーカイブのページ分割方法をご紹介します。
参照サイトはMagic whiteさんの「カスタマイズメモその2」経由できままにポロポロさんの「ページ分割」です。あっさりできました。ありがとうございます。
ということで以下に設定方法(プラグインファイルの配置は自宅サーバ用)を記しておきます。
1.プラグインファイルのダウンロード
MT Extensions より MTPaginate をダウンロード(ページ上の方にある「Download」をクリック)。ファイルは任意のフォルダ(デスクトップ等)に保存します。
2.プラグインファイルのアップロード
ダウンロードしたファイルを解凍し、その中の MTPaginate.pl を plugins ディレクトリにアップロードします。
注:この情報はバージョン1.28のものです。
ダウンロードしたファイルを解凍し、その中の MTPaginate ディレクトリを下記のディレクトリ構成になるように plugins ディレクトリに丸ごとアップロードします。
plugins/MTPaginate/lib/MTPaginate.pm
plugins/MTPaginate/MTPaginate.pl
2.1 アーカイブURL/アーカイブ・パスの設定(Movable Type 3.2-ja 以降の場合)
管理メニューの「設定」→「公開」にある「アーカイブの設定」のチェックボックスをチェックします。チェックするとその下に「アーカイブURL」「アーカイブ・パス」の項目が表示されるので、下記のように設定します。
- アーカイブURL:サイトURL/archives/
- アーカイブ・パス:サイト・パス/archives
サイトURLとサイト・パスは同じページに表示されている「サイトURL」「サイト・パス」の内容をそのままあてはめてください。例えばサイトURLが http://www.koikikukan.com/ であれば、アーカイブURLは
- http://www.koikikukan.com/archives/
となります。
なおこれらはページ分割を行わない場合も設定することをお勧めします。
3.アーカイブファイル名の変更
Movable Type のバージョンによって3.1項または3.2項のいずれかを実施してください。
3.1 Movable Type 3.2-ja 以降の場合
管理メニュー左の「設定」→「公開」で「アーカイブ・マッピング」の「出力フォーマット」のテキストボックス欄で「カスタマイズ」を選択して下記を設定します。
- カテゴリーアーカイブ(「カテゴリー」行)
cat_<$MTCategoryID$>.php *1 - 月別アーカイブ(「月別」行)
%y/%m/index.php - 日別アーカイブ(「日別」行)
%y/%m/%d/index.php
をそれぞれ設定し「変更を保存」をクリックしてください。
*1:カテゴリーアーカイブのファイル名にはカテゴリーIDを設定するためにMTタグを使用することを推奨します。
3.2 Movable Type 3.1x 以前の場合
管理メニュー左の「ウェブログの設定」→「アーカイブの設定」で「アーカイブ」の「アーカイブ・ファイルのテンプレート」のテキストボックス欄に下記を設定します。
- カテゴリーアーカイブ(「カテゴリー」行)
cat_<$MTCategoryID$>.php - 月別アーカイブ(「月別」行)
<$MTArchiveDate format="%Y/%m/"$>index.php - 日別アーカイブ(「日別」行) *2
<$MTArchiveDate format="%Y/%m/%d/"$>index.php
をそれぞれ設定し「変更を保存」をクリックしてください。*3 *4
*2:カレンダーのリンク等で「日別」を使用されている場合は設定が必要です。
*3:すでに「アーカイブ・ファイルのテンプレート(3.2 は「出力フォーマット」)」へカスタマイズされたフォーマットを設定されている場合は「.html」となっている部分を「.php」に修正すればOKです。
*4:フォーマットは一例ですので、任意のフォーマットを設定してください。また 3.2-ja 以降ではフォーマットの指定方法が変更されていますが、3.1x 以前のMTタグを利用した設定でも正常に動作します。
4.ページ分割の設定
カテゴリーアーカイブテンプレート・日別アーカイブテンプレートに以下の青色部分を設定します。
カテゴリーアーカイブの場合
<div class="blog">
<MTPaginate>
<MTPaginateContent max_sections="8">
<MTEntries>
:
:
<$MTPaginateSectionBreak$>
</MTEntries>
</MTPaginateContent>
<MTPaginateIfMultiplePages>
<div class="paginate">
<MTPaginateIfPreviousPage_>
<a href="<$MTPaginatePreviousPageLink$>"><</a>
</MTPaginateIfPreviousPage_>
<$MTPaginateNavigator style="links" format_all="All pages" place_all="after" separator=" | ">
<MTPaginateIfNextPage_>
<a href="<$MTPaginateNextPageLink$>">></a>
</MTPaginateIfNextPage_>
</div>
</MTPaginateIfMultiplePages>
</MTPaginate>
</div>
日付アーカイブの場合
<div class="blog">
<div id="menu">
<MTArchivePrevious>
<a href="<$MTArchiveLink$>"><< <$MTArchiveTitle$></a> |
</MTArchivePrevious>
<a href="<$MTBlogURL$>">Main</a>
<MTArchiveNext>
| <a href="<$MTArchiveLink$>"><$MTArchiveTitle$> >></a>
</MTArchiveNext>
</div>
<MTPaginate>
<MTPaginateContent max_sections="8">
<MTEntries>
:
:
<$MTPaginateSectionBreak$>
</MTEntries>
</MTPaginateContent>
<MTPaginateIfMultiplePages>
<div class="paginate">
<MTPaginateIfPreviousPage_>
<a href="<$MTPaginatePreviousPageLink$>"><</a>
</MTPaginateIfPreviousPage_>
<$MTPaginateNavigator style="links" format_all="All pages" place_all="after" separator=" | ">
<MTPaginateIfNextPage_>
<a href="<$MTPaginateNextPageLink$>">></a>
</MTPaginateIfNextPage_>
</div>
</MTPaginateIfMultiplePages>
</MTPaginate>
</div>
赤色部分は中央に配置スタイルシート(styles-site.css)に ".paginate" というクラスセレクタを作成し、ページリンクのスタイルを設定するためのタグです。スタイルシートには必要に応じて
.paginate {
text-align: center;
font-size: 9px;
}
という風に設定してください。
設定が完了したら「保存」をクリックします。
追記.XML宣言の修正
拡張子を .html から .php に変更したテンプレートの1行目が
<?xml version="1.0" encoding="<$MTPublishCharset$>"?>
となっている場合は
<? echo('<?xml version="1.0" encoding="<$MTPublishCharset$>"?>') ?>
に修正してください(XML宣言が存在しない場合はこの対処自体不要です)。この修正を行わないとページ表示時に
Parse error: parse error, unexpected T_STRING in [...] on line 1
というエラー(またはページが真っ白)が発生します。
5.サイトの再構築
4項まで完了したら再構築を実施し、ページ分割を設定したアーカイブのページを開き、分割されていればOKです。
6.その他
きままにポロポロさんのページで
<$MTPaginateNavigator format_current="<font size=+1>%d</font>">
と書けば現在のページ番号の文字を装飾できるようですが、上の例ではfontタグの"<"と">"(計4ヶ所)を"<"と">"で記述する必要があります。具体的には青色で表示してある
<$MTPaginateNavigator format_current="&lt;font size=+1&gt;%d&lt;/font&gt;">
となります。なお、XHTMLでは各要素の属性(ここでは font 要素の size 属性)はダブルクォーテーションで括る仕様となっているため、ここでは非推奨とします。font 要素自体も非推奨です。
なお月別アーカイブはjolie'sさんの【長くなったページを分割】でやってみたところ再構築でInvalid Argumentというエラーになりました。原因は、そのページに表示されていたアーカイブファイル名のテンプレート名をそのままコピー&ペーストして使ったのですが、そのタグの"<"と">"が全角になっているせいでした。こういうのって意外に気がつかないものです。
2004.10.04 追記
【PHPのバージョンについて】
ページ分割はPHP4.1以下では正常に動作しないようです。詳細については先と同様、Cool Gaming ! weBlogさんのカテゴリ、月別アーカイブのページ分割を参照ください。
2005.03.01 追記
日付アーカイブの設定について追加しました。
2005.04.13 追記
SWEET WATER Web Server さんの記事を参考に、日付アーカイブの設定について追加しました。
2005.11.11 追記
3.2-ja 用の設定を追記しました。
2005.11.20 追記
3.2-ja 用の設定をさらに追記しました。
2005.11.28 追記
3.2-ja 用の出力フォーマットを 3.1x 以前のものと分割しました。またページリンクのタグを改善しました。具体的には、MTPaginateIfMultiplePages タグと div 要素の位置を入れ替えて、ページ分割が行われない場合に不要な div 要素を生成しないようにしました。さらに div 要素に設定していた align 属性を削除しました。
2006.02.19 追記
XML宣言の修正について記述を追加しました。
2006.04.25 追記
XML宣言の修正について記述を修正しました(XML宣言がない場合は不要である旨)。
2007.05.04 追記
プラグインのバージョンアップに伴い、アップロード方法を修正しました。
タイトルの色変更
最近暑いですね?。しかも自宅で24時間PCを立ち上げているせいか部屋がムッとしっぱなしです。この無駄な熱をなんとか冷房に利用できないものでしょうか。
とりあえず涼しくなるかなと思って青色にしてみました。トップページだけですが。
Movable Type 3.0 Developer Edition 日本語版の提供開始
Movable Type 3.0 Developer Edition 日本語版が公開されました。7月15日リリースでしたので予定通りですね。もっともそのニュースが投稿されたのは23:59ですが(笑)。
とりあえずダウンロード手順を記しておきます。
- Movable Type のページ上または左の「
Movable Typeを入手ダウンロード」をクリック - 右の「
Movable Typeオンライン購入システムダウンロードへ」をクリック - ログイン(アカウントを持っていない場合はここで登録しましょう)
- ログインすると「Get Movable Type!!!」というページに進みます。無償で利用したい場合は一番上の「限定個人ライセンス」をクリック
- 「ライセンス契約を承諾する」をチェックして(利用許諾契約書も読んでね)「>>次へすすむ」をクリック
- パッケージの種類・アーカイブの種別を選んで「ダウンロード」をクリック。
その後のインストールはMovable Type 3.x 導入手順が分かりやすいです。
日本語版ですがインストール時は英語なんですよね(笑)。
エントリーの画像をサイドメニューに表示
エントリーに携帯等で撮った画像を表示しているブログをよく見かけますが、エントリーの画像を検索してサイドバーに自動的に表示するカスタマイズをご紹介致します。具体的な動作は、エントリーの中に書かれている img 要素の src 属性を検索し、そこで指定された画像をサイドバーに表示します。Collect プラグインというものを利用しています。
以下、手順メモです。
1.プラグインのダウンロード
Collect Plugin for Movable Type の Collect より Plugin をクリックします(ソースが表示される場合は右クリックして「対象をファイルに保存」を選択)。
2.プラグインのアップロード
ダウンロードした Collect.pl を plugins ディレクトリ直下にアップロードします。
3.テンプレート修正
リスト1のタグを、画像を表示したいテンプレート(メインページ/カテゴリーアーカイブ/日付アーカイブ/個別エントリーアーカイブ等)のサイドバー部分に追加します。次のタグは最近の8エントリーより、各エントリー内にある一番最初のイメージを表示します。
<MTEntries lastn="8">
<MTCollect tags="img">
<MTCollectThis show="0">
<$MTEntryBody$>
</MTCollectThis>
<MTIfCollected tags="img">
<MTCollected tags="img" lastn="1">
<a href="<$MTEntryLink$>">
<img src="<$MTCollectedAttr attr="src"$>" style="margin:10px" />
</a><br />
</MTCollected>
</MTIfCollected>
</MTCollect>
</MTEntries>
リスト1:最近の8エントリーより各エントリー内にある一番最初のイメージを表示
リスト2のタグは、全エントリーから最新の5個のイメージを表示します。
<MTCollect tags="img">
<MTEntries lastn="5">
<MTCollectThis>
<$MTEntryBody$>
<$MTEntryMore$>
</MTCollectThis>
</MTEntries>
<MTIfCollected>
Recent Photos of all <$MTCollectedTotalCount$> photos<br />
<MTCollected tags="img" lastn="5">
<img width="100" src="<$MTCollectedAttr attr="src"$>" alt="<$MTCollectedAttr attr="alt"$>"<$MTCollectedContent$><br />
</MTCollected>
<MTElse>
No Photos
</MTElse>
</MTIfCollected>
</MTCollect>
リスト2:全エントリーから最新の5個のイメージを表示
以上です。なおこの機能については以下のサイトを参考にさせて頂きました(テンプレートもそこからの抜粋です)。
あとはカメラ付き携帯を買うだけ(爆)。
2005.08.08 追記
本文を全面修正しました。
2006.09.10 追記
マークアップ修正。
MT-3.0D-ja-b3
さらに Movable Type 3.0 日本語版ベータ3が公開されてました。正式版の提供は7月中旬ということなのでそろそろでしょうか。
日本語カテゴリー名使用時の不具合を修正
日本語カテゴリーを作ると別の日本語カテゴリーのエントリーが誤ってリンクされるようです。例えば「車」カテゴリーのリンクをクリックすると「音楽」カテゴリーが表示されてしまいます。
原因は、英語(多分数字も含む)のカテゴリーであればそのカテゴリー名がフォルダとして作られる(厳密にはその配下に index.html を配置)のですが、日本語カテゴリーは任意のアルファベットに変換し、その名前でフォルダを作ります。その時に元の日本語カテゴリ名と生成されたフォルダの関連づけが誤ってしまうようです。
そういう時は横着して英語カテゴリー名に直していましたが本質的な解決ではありません。ということでこちらの記事を参考に日本語カテゴリー名を使用しても不具合が発生しないように修正しました。面倒かと思ったらカテゴリー用ファイル名を指定して再構築するだけでした。
日本語エントリーの個別アーカイブファイル名も場合によっては「aaeaaaaaaaa.html」みたいになってしまうことがあり、ちょっと気に入りません(動作上の問題は今のところありません)。こちらも解決策があるみたいですがとりあえず次回まわしにします。
それにしてももう少し気の利いた変換できないものでしょうか。
MT-3.0D-ja-b2
Movable Type 3.0 日本語版ベータ2が公開されたようです。が、とりあえずアップグレードせずに3.0正式版を待とうと思います。
「検索」タイトルとテキストエリア間の空白修正(その2)
以前テーブルタグを用いてフォーム前後の空白を除去しましたが、以下のスタイルシートを追加すれば同様の効果がありました。
form {
margin: 0;
}
この設定では全ての form タグに有効になりますので、個別に設定が必要な場合は form のクラス属性を指定します。例えば
<div class="side">
<form>
:
であれば、
.side form {
margin: 0;
}
としてください。
2005.08.18 追記
記事の内容を一部修正しました。