MovableType | メイン |
All Pages |  1  |  2  |  3  |  4  |  5  |  6  |  7 


月間アーカイブリストのショート化

Weblog始めて1年も経つとそれだけで
月間アーカイブリンクが12個もタテに並ぶわけで、
σ(゚∀゚ オレ!!的に美観がよろしくない。

つーか、1個のリンクのために1行とられ、しかもそれは永久に増え続ける
→サイドバーの長さがどんどん長くなる
→(´Α`)ウゼーヨ

というわけで、ArchiveDateHeader Pluginを使ってこんな風にしてみた。

ma-before.jpg ma-after.jpg

月間アーカイブリストは例によってPHPモジュール化
monthly-archive.jpg

名前をmonthly-list.cgiとかにしておく。
内容は下記の通り。

#!/usr/local/bin/php
<MTArchiveList archive_type="Monthly">
<MTArchiveDateHeader>
<li><$MTArchiveDate format="%Y年"$><br></MTArchiveDateHeader> <a href="<$MTArchiveLink$>" title="<$MTArchiveDate format="%Y/%m"$>"><$MTArchiveDate format="%m月"$></a></li>
</MTArchiveList>

これでもってindex.cgiの月間アーカイブの記述をPHP includeに書き換える。

<h2>月間アーカイブ</h2>
<ul><? include"http://delta-j.web.infoseek.co.jp/cgi-bin/mt/monthly-list.cgi";?></ul>

あとはテンプレート保存・再構築でOK。
あ、monthly-list.cgiはメインページと同時にリビルドされるよう、
チェックいれておくことを忘れずに。
忘れると新しい月に変わったときにリンクが増えないwww


by Daryl 2006年07月08日 23:41 | Permalink


携帯からのアクセスをmt4i.cgiに振り分ける

携帯からのアクセス振り分けにはhtaccessによるURL書き換え(mod_rewrite使用)か、
Perl/Javascript/PHP等で判別→ページ移動がポピュラーだろう。
うちではPHP化したときにすでにhtaccessでごりごりリダイレクトかましてるので、
ここにさらに携帯用をいれるとすげー面倒くさい。
index.cgiだけならともかく、個別エントリまでとなるとやってられん。
というわけで、とりあえずindex.cgiの先頭でPHPによるUser-Agent判別を行い、
携帯のUAを持つ場合はmt4i.cgiへリダイレクトすることにした。

keitai-index.jpg

mt4i.cgiがインストール済みであり、
MovableTypeがすでにPHP化されているなら、
先頭行の#!/usr/local/bin/phpの次に下記のような判別/リダイレクトルーチンをいれるだけでOK。

<?
$ua = $_SERVER["HTTP_USER_AGENT"];
if(ereg("DoCoMo",$ua)){
header("Location: http://delta-j.web.infoseek.co.jp/cgi-bin/mt/mt4i.cgi");
exit;
}elseif(ereg("J-PHONE",$ua)){
header("Location: http://delta-j.web.infoseek.co.jp/cgi-bin/mt/mt4i.cgi");
exit;
}elseif(ereg("UP\.Browser",$ua)){
header("Location: http://delta-j.web.infoseek.co.jp/cgi-bin/mt/mt4i.cgi");
exit;
}elseif(ereg("Vodafone",$ua)){
header("Location: http://delta-j.web.infoseek.co.jp/cgi-bin/mt/mt4i.cgi");
exit;
}elseif(ereg("KDDI",$ua)){
header("Location: http://delta-j.web.infoseek.co.jp/cgi-bin/mt/mt4i.cgi");
exit;
}else{
}
?>
UAの判定はDoCoMo / KDDI / Vodafone / J-PHONE だけで足りるような希ガス。

携帯からHPルートにアクセスしたときのみ、自動的にmt4i.cgiへリダイレクトされるが、
この部分をそれぞれのアーカイブテンプレートの先頭につっこめば、
どこからどう携帯でアクセスされてもmt4i.cgiが表示されることになる。
ま、それもちょっとウザイかなと思ったし、
個別エントリを携帯からダイレクトに見たい酔狂人もいるかもしれないので、
とりあえずindex.cgiだけの措置にしてある。


by Daryl 2006年07月08日 10:36 | Permalink


iswebでエクスポートが失敗する件の対策

isweb鯖だけの問題だと思うが、
エントリ数が300を超えるとWeblogの「読み込み/書き出し」において
途中で終了してしまう現象がある。

たとえば、500を超えるエントリを書き出ししても、300くらいで終わってしまい、
何回やっても全エントリが取れない、ということが起こる。
読み込みに関してはエントリのサイズによっては1つしか読めないこともある。

とりあえず書き出しできないことにはブログのバックアップにもならんので、
分割エクスポートの方法を考えてみた。

といはいってもたいしたことじゃなくて。

ブラウザ出力でエントリを得ようとすると途中でタイムアウトするので、
テンプレートでエクスポート用のHTMLを作成し、ファイルに書き出させる方法をとったのだが、
それでも途中で終わる(InternalError500がでる)ので、
全エントリをブロック分けして書き出させ、FTPでDLするというもの。

export.jpg

書き出しのためのテンプレートはこれを使う


<MTEntries lastn="200">
AUTHOR: <$MTEntryAuthor strip_linefeeds="1"$>
TITLE: <$MTEntryTitle strip_linefeeds="1"$>
STATUS: <$MTEntryStatus strip_linefeeds="1"$>
ALLOW COMMENTS: <$MTEntryFlag flag="allow_comments"$>
CONVERT BREAKS: <$MTEntryFlag flag="convert_breaks"$>
ALLOW PINGS: <$MTEntryFlag flag="allow_pings"$>
<MTIfNonEmpty tag="MTEntryCategory">PRIMARY CATEGORY: <$MTEntryCategory$>
</MTIfNonEmpty><MTEntryCategories>
CATEGORY: <$MTCategoryLabel$>
</MTEntryCategories>
DATE: <$MTEntryDate format="%m/%d/%Y %I:%M:%S %p"$>
-----
BODY:
<$MTEntryBody convert_breaks="0"$>
-----
EXTENDED BODY:
<$MTEntryMore convert_breaks="0"$>
-----
EXCERPT:
<$MTEntryExcerpt no_generate="1" convert_breaks="0"$>
-----
KEYWORDS:
<$MTEntryKeywords$>
-----
<MTComments>
COMMENT:
AUTHOR: <$MTCommentAuthor strip_linefeeds="1"$>
EMAIL: <$MTCommentEmail strip_linefeeds="1"$>
IP: <$MTCommentIP strip_linefeeds="1"$>
URL: <$MTCommentURL strip_linefeeds="1"$>
DATE: <$MTCommentDate format="%m/%d/%Y %I:%M:%S %p"$>
<$MTCommentBody convert_breaks="0"$>
-----
</MTComments>
<MTPings>
PING:
TITLE: <$MTPingTitle strip_linefeeds="1"$>
URL: <$MTPingURL strip_linefeeds="1"$>
IP: <$MTPingIP strip_linefeeds="1"$>
BLOG NAME: <$MTPingBlogName strip_linefeeds="1"$>
DATE: <$MTPingDate format="%m/%d/%Y %I:%M:%S %p"$>
<$MTPingExcerpt$>
-----
</MTPings>
--------
</MTEntries>

画面みたくテンプレートを作成、エントリ数の指定のオフセットとファイル名を変えていけば、
全エントリのバックアップが鯖上にできる。これをFTPでDLすればOK。

<MTEntries lastn="200"> → <MTEntries lastn="200" offset="200">

こうすることで、次の200エントリの出力になる。
ただしファイル名を変えておかないと上書きされるので注意。

出力が成功したらローカルに保存してマージすれば全エントリのバックアップになるが、
iswebの場合、大量のエントリを「読み込み」しようとしても途中で止まってしまうので
分割しないといけない。

いくつに分割すればOKなのか?というのが問題なのだが、それが不定だから困る。
よって自分の場合は下記のスクリプトを使って全エントリをすべて単独のエントリに分解することにした。


#!/usr/local/bin/perl

use strict;

my($spl, $fi, $fo);
my(@buff, $cu, $c, $max);

$fi = "mt.txt";
$fo = "split/mt_%03d.txt";
$spl = "--------";
$max = 1;

@buff = ();
$cu = 0;
$c = 1;
open(IN, $fi) or die "open error $fi";
while(<IN>) {
chop;
push(@buff, $_);
if ($_ eq $spl) {
$cu++;
}
if ($cu == $max) {
&fout(\@buff, $fo, $c++);
@buff = ();
$cu = 0;
}
}
close(IN);
print "Content-type: text/html; charset=EUC-JP\n\n";
print "<html><body>split complete.</body></html>\n";
exit(0);

sub fout($$$) {
my($buff, $fo, $c) = @_;
my($foo);

$foo = sprintf($fo, $c);
open(OUT, ">$foo") or die "open error $foo";
foreach (@{$buff}) {
print OUT $_. "\n";
}
close(OUT);
}

__END__;

このスクリプト、どっかのHPにあったものなのだが出典がわからなくなってしまった。
出所不明で申し訳ないが、とりあえず動作はしている。

使い方

・全エントリを1ファイルにまとめる(ファイル名 mt.txt)
・スクリプトとmt.txtを同一ディレクトリに置き、配下にsplitディレクトリを作成
・スクリプトを実行するとsplitディレクトリ内にmt001.txtから連番で全エントリが個別ファイルに分割される
・Weblogにリストアするときは、$MTDIR/importディレクトリを作成し、そこにsplitされたファイルをすべてULする。
・その上で、Weblogの読み込みを実行すれば1エントリずつDBに書き戻してくれるので、iswebのタイムアウトに引っかからずにリストアができる

この方法考え付くまでにDBごと全部バックアップ・リストアしてたorz


by Daryl 2006年06月18日 06:53 | Permalink


検索キーワード表示

googleやらY!Jやらから検索でココにきたとき、
どんなキーワードで調べたのかをそれぞれのエントリに付加してみた。
と、文章で説明してもわけわからんだろうから

swc.jpg

ここ↓のスクリプトを個別エントリアーカイブに埋め込んだだけよん。
ページがどんなキーワードで検索されたかをTagCloud風に表示させるくっつきサービス

こんなカンジでモジュール化してPHP include→再構築

<h2>検索エンジンのサーチキーワード</h2>
<span style="font-size:10px"><span style="color:#666666">
<script>jp_blogdb_swc_baseurl='delta-j.web.infoseek.co.jp/cgi-bin/mt/';</script>
<script>jp_blogdb_swc_f_defaultstyle='false';</script>
<script src="http://swc.blogdb.jp/js/swc_init.js"></script></span></span><br />


by Daryl 2006年06月12日 18:36 | Permalink


トラックバックモジュール改定

サイドバーのトラックバック一覧がFirefoxだとちゃんと表示されてなかったので
モジュールテンプレート(tblist.cgi)を修正。

修正後の状況はこのとおり。

#!/usr/local/bin/php
<MTEntries recently_pinged_on="10">
<li><a href="<$MTEntryPermalink$>"><strong><$MTEntryTitle first_n_text="15"$></strong></a><br />
<MTPings lastn="5">
<span class="comment"><a href="<$MTPingURL$>" target="new" rel="nofollow"><$MTPingTitle first_n_text="14"$></a></span>
</MTPings>
<br />
</MTEntries>

これでIE/Firefoxともにちゃんと出るようになった。


by Daryl 2006年06月01日 19:57 | Permalink


画像アップロード時のデフォルトを変更する

うちのMovebleTypeは画像アップロード時にこんな風にでるようになっている。
upload-default.jpg
Finaceネタが毎回HTML表示+サムネール作成がデフォなので、
標準設定を正反対→めんどくさい→書き換えちまえ、というわけでこうなっている。
これ、MTDIR/tmpl/cms/upload_complete.tmplを2箇所いじるだけ。

まず1つめ。

<label><input type="radio" name="new_entry" value="1" checked="checked" /> <MT_TRANS phrase="Create a new entry using this uploaded file"></label> <a href="#" onclick="return openManual('uploading', 'autocreating a new entry')" class="help">?</a><br />
<label><input type="radio" name="new_entry" value="0"> <MT_TRANS phrase="Show me the HTML"></label>
↓↓↓
<label><input type="radio" name="new_entry" value="0" /> <MT_TRANS phrase="Create a new entry using this uploaded file"></label> <a href="#" onclick="return openManual('uploading', 'autocreating a new entry')" class="help">?</a><br />
<label><input type="radio" name="new_entry" value="1" checked="checked" > <MT_TRANS phrase="Show me the HTML"></label>

2つめ

<label><input type="checkbox" name="thumb" value="1"> <MT_TRANS phrase="Create a thumbnail for this image"></label> <a href="#" onclick="return openManual('uploading', 'creating thumbnails')" class="help">?</a><br />
↓↓↓
<label><input type="checkbox" name="thumb" value="1" checked="checked"> <MT_TRANS phrase="Create a thumbnail for this image"></label> <a href="#" onclick="return openManual('uploading', 'creating thumbnails')" class="help">?</a><br />

要はckeckedの位置を変えただけのようなものだ。
これでわからん人はいじらんほうがいいと思われ。


by Daryl 2006年06月01日 17:58 | Permalink


トラックバックエラー再び

過去のトラックバックを削ったら正常にTBPINGが通るようになった、、、と思ったら
やっぱりヾ(`◇’)ダメッ

PING自体は受け付けてるし、DBにも反映されているし、再構築もできてる。
最後の何かの段階でcore吐いてるから、ちゃんとしたリザルトが返ってないだけなのだ。
ログにも何にも残らないし、iswebではサーバログもないから調べようがない。。。
前にも書いたが、エラーが返る以外に事実上問題ないのだが、気に食わない

もっともMT3.2では正常なTBPINGでさえエラーとしてはじくバグがあったようだが。。
標準で装備されてるspamlookupが悪さするようだ。
たしかOgawaさんがパッチだしていたはず。 → http://as-is.net/wiki/3.2-ja-2_UO_Patch

--追記
trackback.dbのサイズみたら729KBもある。。。
もしかしてコレが原因か?
でもtrackback.dbは各エントリーごとのidを持ってるもんだから
勝手に削るわけにもいかん。。。(つか、整合取れなくなっちまう)
サイズ落とすには過去のエントリーをガンガン消していけばいいのだろうが。。。。
Newsの古いのでも消すかな。。。

--6/2 追記
古いTBやエントリを消しても、DBのサイズは変わらないのだった _| ̄|○
一旦拡張されてしまったDBレコードは未使用のまま残り、実質レコードが0になっても変化しない。

entry.dbとtrackback.dbのサイズをダイエットするには、
・全エントリーを書き出し(export)
・これらを一旦削除(バックアップして名前変更)
・全エントリーの読み込み(import)
しか方法がない。

ところが、iswebの場合まずエントリのexportで引っかかる。
読み出し最中にCPUタイムが規定値を超えてしまうとそこで終わってしまうのだ。
importに関してはもっとひどく、エントリの内容によっては
1個ずつやらないとエラーもなにも出ずにSTOPする。

というわけで、
・エントリをカテゴリーまたは月ごとにテキスト化してexport
・書き出したテキストを分割、1エントリー1ファイルにしてimport

という非常に手間のかかる事態が発覚。。。
エントリ数を減らせば全exportでもなんとかなるのだが、
うちの場合200以上のエントリを消さないとexportできなかった。
テキストファイルのエントリごとの分割はperlで簡単にできるが、
MovableTypeからのexportはdbいじるだけに面倒くさい。
/(-。-)\ こまった~


by Daryl 2006年06月01日 13:37 | Permalink


赤字ボタンの追加

<span class="red">赤字表記</span>という使い方をすることが多いので、
edit_entry.tmplとmt.jsにさらに追加してみた。

redspan.jpg

  1. mt.jsにspanred()を追加。場所はfunction insertLink()の上あたり。
    function redspan(e) {
    if (!canFormat) return;
    var str = getSelected(e);
    if (!str) return;
    setSelection(e, '<span class="red"$gt;' + str + '</span>');
    return false;
    }

  2. edit_entry.tmplに追加
    例によって186行目付近と210行目付近に追加。
    ※if (canFormat) {
      with (document) { の下にいれればOK

    write('<a title="<MT_TRANS phrase="red" escape="singlequotes">" href="#" onclick="return redspan(document.entry_form.text)"><img src="<TMPL_VAR NAME=STATIC_URI>images/redspan.gif" alt="<MT_TRANS phrase="red" escape="singlequotes">" width="22" height="16" /></a>');

  3. メニュー用の画像作成(22x16) こんなん → 
  4. 書き換えたファイル、画像をうp
  5. スタイルシートに追記
    .red{
    color: #FF0000;
    font-weight:none;
    font-size: 13px;
    }


by Daryl 2006年05月30日 18:09 | Permalink


HTML特殊文字を変換

tableボタンついでに、<>といった特殊文字を
&lt; および &gt;などに一発変換する
タグ変換ボタンを追加した。

add-html-chars.jpg

参考にしたのはこちら。

[MT] HTML特殊文字を変換する

基本的にはtableボタン同様、mt.jsとedit_entry.tmplへの追加、ボタン画像の追加だけで済む。
措置が済むと画像のように[<>]ボタンがエントリー画面に追加される。

mt.jsに追加する関数 formatChars
function formatChars(e) { if (!canFormat) return; var str = getSelection(e); if (!str) return;

tmp = str.split("&").join("&amp;"); tmp = tmp.split("<").join("&lt;"); tmp = tmp.split(">").join("&gt;"); tmp = tmp.split("\"").join("&quot;");

setSelection(e, tmp); return false; }
edit_entry.tmplの185行目あたりに追加
write('<a title="<MT_TRANS phrase="HTMLSpecialChars">" href="#" onclick="return formatChars(document.entry_form.text)"><img src="<TMPL_VAR NAME=STATIC_URI>images/html-chars.gif" alt="<MT_TRANS phrase="HTMLSpecialChars">" width="22" height="16" /></a>');

追記のほうにもいれるなら、edit_entry.tmplの210行目あたり、

if (canFormat) {
with (document) {
の後ろにいれる


by Daryl 2006年05月25日 14:57 | Permalink


エントリー投稿画面にtableボタンを追加

デイトレネタみたく画像+文章という構成のときに、
手打ちでtableタグ打つのがだるくなってきたので、
edit_entry.tmplとmt.jsの改造で対処。

参考にしたのはこちら
→ エントリーでテーブルタグを設定(ver3.17対応)

add-table-button.jpg 措置後にはエントリーの投稿画面にボタンが追加される。テーブルにいれたい文字を選択→ボタンクリックで、tableに囲まれた状態になる。

いやいや、超便利ですな。
ありがたく使わせていただきます。
ボタンはエントリー投稿画面にあわせたものを自作すますた。

ご自由にお持ちください。 → 


by Daryl 2006年05月25日 02:01 | Permalink

«前ページ |  1  | 2 |  3  |  4  |  5  |  6  |  7  | 次ページ»