TOPページの分割
ひとつ前へのリンク では MTEntriesFooterとMTEntryPreviousで
「ひとつ前のページへ」を実現していたが、
これだとindexに5件+過去1件ずつ、という閲覧形式になってしまう。
過去5件なら5件分まとめてダラダラと読みたいわけで、
そこでまたMTPagenateの出番ですよ。
※すでにMTPaginateプラグインが導入されていることが前提
まだの人はここを読め → http://nonchan.web.infoseek.co.jp/cgi-bin/blog/archives/2005/04/22/index.php
weblogの設定変更
・ローカルサイトパスをHOME/cgi-bin/mt に変更

iswebではCGIファイルは/cgi-bin以下にないと動作しないため、
index.cgi の位置を/cgi-bin/mtにする。この設定をmt.cgiで行う。
インデックステンプレートの改造
・拡張子をcgiにする(.phpではないところがミソ)
・先頭に#!/usr/local/bin/phpをいれる(iswebではこの措置が必要)
・エントリー表示部分に以下のような細工をいれる
<MTEntries lastn="5">
メイン記事部分の始まり(before)
<MTPaginate>
<MTPaginateContent max_sections="5">
<MTEntries lastn="20">
5件ずつ4ページ、合計20件になるよう宣言
テンプレートエンド付近にある</MTEntries>は以下のように書き換え。
<$MTPaginateSectionBreak>
</MTEntries>
</MTPaginateContent>
<MTPaginateIfMultiplePages>
<MTPaginateIfFirstPage_>
<$MTPaginateNavigator format_current="%d">
| <a href="<$MTPaginateNextPageLink$>">次ページ»</a>
</MTPaginateIfFirstPage_>
<MTPaginateIfMiddlePage_>
<a href="<$MTPaginatePreviousPageLink$>">«前ページ</a>
| <$MTPaginateNavigator format_current="%d"> |
<a href="<$MTPaginateNextPageLink$>">次ページ»</a>
</MTPaginateIfMiddlePage_>
<MTPaginateIfLastPage_>
<a href="<$MTPaginatePreviousPageLink$>">«前ページ</a>
|<$MTPaginateNavigator format_current="%d">
</MTPaginateIfLastPage_>
</MTPaginateIfMultiplePages>
</MTPaginate>
これでindexのボトム付近には
が現れ、
ページナビゲーションをしてくれるようになる。
1ページあたり何件のエントリーをいれるかは
MTPaginateContent max_sections="5"の数字で指定し、
全体で何件にするかはMTEntries lastn="20"の数字で指定する
ただ、index.cgiとしてのサイズは大きくなるので、
20件以上のエントリをいれるのはお勧めしない。
エントリーのサイズにもよるがサーバーエラー頻発するかも。
isweb_htaccessの書き換え
これをやっておかないと、index.htmlにアクセスされたときに自動で新しいページ分割されたindex.cgiに飛ばない
RedirectMatch /index.html$ http://delta-j.web.infoseek.co.jp/cgi-bin/mt/index.cgi
ちなみにσ(゚∀゚ オレ!!の場合アーカイブページも分割しているので、isweb_htaccessの内容は
こんな感じだ。
RedirectMatch /mt/archives/(.*)\.html$ http://delta-j.web.infoseek.co.jp/cgi-bin/mt/archives/$1.cgi
RedirectMatch /index.html$ http://delta-j.web.infoseek.co.jp/cgi-bin/mt/index.cgi
by Daryl 2005年12月13日 18:16 | Permalink
重複トラックバックのフィルタリング
小粋空間さんのところをみていたら、重複トラックバック防止プラグインというのがあったので早速導入。
MT3.2ではトラックバックやコメントSPAMの防止機構が強化されているが、
自分のスキルではiswebでMT3.2を動かすことができなかった。
ちなみに、iswebベーシックでMT3.2を動かす方法は存在する。
ここを見ろ → iswebで動作させる為の手順(MT3.2)
ちょっと強引ではあるが、この方法で動くことは動く。
ただし問題が山積。
- iswebではBerkeleyDBしか使えない
- 無理やりMT3.2を動かしたとしてもクソ重いのは変わりなす
- すぐにInternalError500になる
- なら3.171-jaでいいや
- どうせだから重複トラックバック防止をいれておこう
というわけだ。
でもコレ導入したからといって、
トラックバックやコメントのSPAMをはじいてくれるわけではない。
あくまで同じ内容のトラックバックがきたときにだけ、
エラーリザルトを返してくれるというだけのものだ。
でもあるとないとでは大違いかも。
by Daryl 2005年12月11日 08:18 | Permalink
MovableType 3.171-ja
ひそかに3.17 → 3.171 へのアップデートをしたのだが、
このときにMT3.2の残骸を消そうとして、
iswebにおける先頭が"."なファイル名 な事態に発展したのであった。
しかしその前にもっと大きな問題があった。
3.17のマイナーチェンジ版である3.171-jaは現在どこからもダウンロードすることができない。
Movable TypeのダウンロードからgetしようとしてもMT3.2しか取得できないのだ。
3.171-jaがでたときにアーカイブで保存しておけばよかったと思ってもアフターカーニバルである。
しょーがないので、Movable Type一般お問い合わせフォームに泣きついてみた。
サーバの問題でMT3.2が動かないんで3.171-jaホシス。
でもダウソできなす。
なんとかしてちょんまげ
てなことをメールしたら、3.171-jaのフルパッケージアーカイブファイルを、
ネットストレージ経由で送ってくれた。いやあ、言ってみるもんだwww
さて、3.171-jaを手に入れたはいいが、そのまま全部上書きしたのでは芸がないし、
第一時間かかるうえにいろいろいじった部分を反映させるのが面倒くさい。
そこでぐぐってみたら小粋空間さんのところに
まんまのエントリー Movable Type 3.171-ja リリース があった。
大事なとこだけ抜粋すると、
3.17-ja との差分ファイルは下記の通りです。3.17-ja をご利用の方で正規の手順でのアップグレードが面倒な方はファイルの差し替え&再構築のみで大丈夫と思います。
docs/known-issues.html
docs/mtchanges.html
lib/MT.pm
lib/MT/Mail.pm
lib/MT/Util.pm
lib/MT/App/CMS.pm
lib/MT/App/Search.pm
lib/MT/L10N/ja.pm
php/mt.php
というわけで、3.171-ja-fullから上記のファイルだけ取り出し、
上書きUp→サイト再構築で糸冬 了..._〆(゚▽゚*)
いやあ、手っ取り早く済んだwww
by Daryl 2005年12月11日 07:54 | Permalink
iswebにおける先頭が"."なファイル名
infoseekのHPサービスiswebでは、.htaccessに代表される「先頭が"."なファイル名」が許可されていない。
が、FTPソフトによってはuploadすることはできてしまう。
でもupしたところでFTPやファイルマネージャ(isweb付属)では見えない。
その結果、どうやっても消せないファイル/ディレクトリができてしまうことになる。
MovableType3.2には MT/php/extlib/smarty/以下に .csvignore 等の
先頭が"."なファイル名があり、iswebの制約を知らずにまるごとuploadすると、
smartyディレクトリが消せなくなってしまう。
なにしろ、ファイル名が表示されないのだから消しようがない。
これは.htaccess等が許されてないiswebならではの事態である。
MT3.2がちゃんと動かない
→消してしまえ
→消せないディレクトリキタ―――(゚∀゚)――― !!
というわけだ。
そこで事務局に「なんとかしてちょ」と頼むと、「はいはい」とばかりに
ホームディレクトリごと全削除されてしまう。
ただでさえFTPのup/downがクソ遅いiswebで全削除はなんとしても避けたいので、
半分寝ながらない知恵を絞って考えた。
perlで削除スクリプト組めばいいんだ
とりあえずsmartyディレクトリの中の見えない".なんとか"ファイルを消すだけなら、
以下のスクリプトをextlibディレクトリに置いてブラウザから実行すればいい。
#! /usr/bin/perl
print "Content-type: text/html\n\n";
print "<html><body>\n";
if (unlink(<smarty/.*>)) {
print "削除に成功しました。\n";
}
else {
print "削除に失敗しました。\n";
}
print "</body></html>\n";
exit;
isweb_smarty_dotted_file_unlink.cgi
他のディレクトリでも応用は効くが、間違ってもunlink(<*.*>)などと指定しないこと。
ちなみに、ホームディレクトリに間違って.htaccessをuploadしてしまった場合は、
以下のスクリプトでリネームできる。
#! /usr/bin/perl
print "Content-type: text/html\n\n";
print "<html><body>\n";
if (rename("../.htaccess","htaccess")) {
print "リネーム成功しました。\n";
}
else {
print "リネーム失敗しました。\n";
}
print "</body></html>\n";
exit;
cgi-binディレクトリに置いて実行すること
※なお、無料版のiswebライトではそもそもisweb_htaccess自体が使えないし、
MovableTypeも動かせないのでこの話題は関係なす。
by Daryl 2005年12月11日 07:26 | Permalink
ひとつ前へのリンク
どーもWeblogって使いにくいなと思う部分に、
いわゆる掲示板のような「次のページへ」「前のページへ」ってなリンクがない。
個別エントリーアーカイブにはもともと存在するのだが、
メインページにないために、最近x件からExpireされたエントリーは
カレンダーかもしくはカテゴリー等のアーカイブから見るしかない。
しかしよー考えたら、
インデックスページに「ひとつ前の記事へのリンク」をつけりゃいいじゃん。
なんでこんな簡単なことに気づかなかったのか。。。
<div align="right">
<MTEntryPrevious>
<a href="<$MTEntryPermalink$>" title="ひとつ前の記事へ»">ひとつ前の記事へ»</a>
</MTEntryPrevious>
</div>
これを </MTEntries>の直前にいれればOKなわけだ。
で、早速やってみた。
うまくいくじゃーん σ(゚∀゚ オレ!! 頭( ・∀・)イイ!
・・・誰でも考えつくか _| ̄|○
と、思ってた矢先
さらによく考えたら、これってば
すべてのエントリーの最後に「一つ前へのリンク」がついてしまうことが八角。
_| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○
で、再考察。
MTEntriesFooterを使えばいいんだ
ということが判明。
<MTEntriesFooter>
<div align="right">
<MTEntryPrevious>
<a href="<$MTEntryPermalink$>" title="ひとつ前の記事へ»">ひとつ前の記事へ»</a>
</MTEntryPrevious>
</div>
</MTEntriesFooter>
これでバッチリよ フ━━━( ´_ゝ`)━━━ン!!
参考:
http://www.sixapart.jp/movabletype/developers/cheebow/archives/2005/03/index.html
つーか、まんまやね。。。 (´・ω・`)ショボーン
by Daryl 2005年12月09日 13:50 | Permalink
Movable Typeアフィリエイト
Six Apart - MovableType News: Movable Typeアフィリエイトサービス開始のお知らせ
SixApartがMTのアフィリエイトをはじめたらすい。
A8.netまたはアクセストレードと契約
→SixApartのプログラム選択
→バナーソース取得
→貼り付け
なわけだが、MT3.2をまともに買うやつなんかいるのかなあ・・・
個人利用がほとんどだしょ?
法人はTypePad使うだろうし。。
はてさて?
by Daryl 2005年12月09日 01:37 | Permalink
カテゴリーアーカイブのPHP化とページ分割その2
どーにもナットクいかないのでまたまたテンプレート作り直し。
iswebがエラー出す原因がだいたい判明。
要するにアーカイブを作るときにトラックバックだのコメントだののデータを
ひっぱってこようとするからコケるのであって、
サイズが大きくなるアーカイブならこのへんをカットすればいいわけだ。
<MTPaginate>
<MTPaginateIfMultiplePages>
<div><$MTPaginateNavigator format_all="All Pages" placement_all="after"></div>
</MTPaginateIfMultiplePages>
<br>
<MTPaginateContent max_bytes="5000">
<MTEntries>
<h3 id="a<$MTEntryID pad="1"$>" title="<$MTEntryDate format="%x"$>"><a href="<$MTEntryLink$>"><$MTEntryTitle$></a></h3>
<p><$MTEntryExcerpt$></p>
<p class="posted">by <$MTEntryAuthor$> <$MTEntryDate format="%x %X"$>
<$MTPaginateSectionBreak$>
<br>
</MTEntries>
</MTPaginateContent>
<MTPaginateIfMultiplePages>
<div>
<$MTPaginateNavigator format_all="All Pages" placement_all="after"$>
</div>
</MTPaginateIfMultiplePages>
</MTPaginate>
</div>
</div>
カテゴリーアーカイブのテンプレートはだいたいこんな感じかなと。
ちなみに月別のテンプレートは別途新規に作ったが、
だいたい似たような内容になってしまったorz
by Daryl 2005年10月30日 23:16 | Permalink
カテゴリーアーカイブのPHP化とページ分割
カテゴリーアーカイブがタイトルだけだと何がなんだか解らない
→概要を含ませてみた → InternalError500 (重すぎるらしい)
そこで、あちこちのページにでているカテゴリーアーカイブのPHP化(iswebなので拡張子は.cgi)と
ページ分割処理をやってみた。
↓参考にしたのはここ↓
http://nonchan.web.infoseek.co.jp/cgi-bin/blog/archives/2005/04/22/index.php
四苦八苦してなんとかPHP化ができたわけだが、その過程で判明したこと
- ページ分割してもファイルは一つ
- つまり、カテゴリーアーカイブのサイズは変わらないか、より大きくなる
- 当然、iswebのCGI負荷制限に引っかかる
- 概要を含ませるとさらにサイズアップ
- しょーがないので、カテゴリーアーカイブに記録するエントリ数を固定化(最新から30)
これで今以上の負荷は掛からないが・・・いまいちすっきりせんなあ ( ´ー`)y-~~
by Daryl 2005年10月30日 20:09 | Permalink
Internal Error 500で落ちる件について
iswebで新エントリー投稿したり再構築するとInternal Error 500で落ちるのは
やはりカテゴリーアーカイブが問題だった。
現状のタイトルリンク仕様にしてから全然でねえモン ( ゚Д゚)y-~~
1カテゴリーあたりのエントリー数が増えたら分割すりゃいいわけだが、
PHP化するのが事実上ムリな現状ではタイトルのみ表示が一番軽くてよい鴨。
それもこれもBerkelyDBがクソ重いのと、
iswebがCPU負荷みてInternalError500だしてくる2重の罠。
ロリポップなら快適にSQLiteで使えるのになあ orz
by Daryl 2005年10月28日 17:59 | Permalink
カテゴリー・アーカイブテンプレートの改造
カテゴリー・アーカイブのリビルドが重くてInternal Error500が頻発するので、
エントリー全文をカテゴリーに含めるのをやめて、
日付+記事タイトルからのリンクに改造
<$MTEntryTrackbackData$>
<MTDateHeader>
<h2><$MTEntryDate format="%x"$></h2>
</MTDateHeader>
<h3 id="a<$MTEntryID pad="1"$>"><$MTEntryTitle$></h3>
<$MTEntryBody$>
<MTEntryIfExtended>
<$MTEntryMore$>
</MTEntryIfExtended>
before
<MTEntries>
<$MTEntryTrackbackData$>
<h3 id="a<$MTEntryID pad="1"$>" title="<$MTEntryDate format="%x"$>"><a href="<$MTEntryLink$>"><$MTEntryTitle$></a></h3>
after
これで新規投稿やリビルドもエラーなしで快適になった。
iswebはすぐタイムアウトになるのでカテゴリーを増やして
1カテゴリーあたりの記事数を減らすか、
こういう風に本文を含めない形でのリンク表にするしかないようだ。
PHP化も考えたのだが、iswebの場合普通のPHPと違う方式なので断念。
※iswebでのPHPはCGIアプリとして動くため、拡張子は.cgiだし、TOPディレクトリだと動作しないので面倒
by Daryl 2005年10月26日 10:46 | Permalink
«前ページ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 次ページ»