/var/exports/www/01KOHANA/dev/modules/bsn/libraries/MY_BSN_Tag_Method.php [377]:
SQLSTATE[HY000] [14] unable to open database file
PDO->__construct( sqlite:/var/www/bsn.river.tc/www/mt-apps/db/mt.db )
BSN_Tag_Method->blog_link( 3 )
call_user_func_array( Array
(
[0] => BSN_Tag_Method Object
(
[obj] => BSN_Parse Object
(
[line] => Array
(
[0] => toc((display))
[1] =>
[2] => add_id((,auto_anchor_gen))
[3] =>
[4] => <h3>20090730:KohanaからMovable Typeの記事タイトル/リンクを生成してみる</h3>
[5] =>
[6] => <p>
[7] => MovableType(MT)で書いたブログの自記事のリンクを生成表示する簡易タグを作成。
[8] => </p>
[9] => <p>
[10] => まずMTのdatabaseテーブルを調べる。
[11] => </p>
[12] => bq((start,sqlite3コマンドで調査,pre))
[13] => sqlite> .tables
[14] => mt_asset mt_field mt_permission mt_templatemap
[15] => mt_association mt_fileinfo mt_placement mt_trackback
[16] => mt_author mt_ipbanlist mt_plugindata mt_ts_error
[17] => mt_blog mt_log mt_role mt_ts_exitstatus
[18] => mt_category mt_notification mt_session mt_ts_funcmap
[19] => mt_comment mt_objectasset mt_tag mt_ts_job
[20] => mt_config mt_objectscore mt_tbping
[21] => mt_entry mt_objecttag mt_template
[22] => bq((end))
[23] =>
[24] => <p>
[25] => このうち、ブログIDとタイトル、URL情報を含まれているテーブルをテキトウにアタリをつけて探す。
[26] => </p>
[27] => <p>
[28] => mt_entryにIDとタイトル,mt_fileinfoにIDとURLがあるのがわかる。
[29] => ここまでくれば簡単で、
[30] => </p>
[31] => code((start))
[32] => public function blog_link($id) {
[33] => $sqlite_db_path = MTのsqlite dbパス;
[34] => $dbn = new PDO("sqlite:".$sqlite_db_path,'','');
[35] => $mt = $dbn->query(
[36] => "SELECT entry_title,fileinfo_url
[37] => FROM mt_entry,mt_fileinfo
[38] => WHERE fileinfo_entry_id=entry_id AND entry_id=".$id);
[39] => $row = $mt->fetch(PDO::FETCH_ASSOC);
[40] => ...略
[41] => code((end))
[42] =>
[43] => <p>
[44] => あとは、$row配列を利用して、アンカーリンクを作ってやればいい。
[45] => </p>
[46] => <p>
[47] => noparse((start))
[48] => blog_link((3))
[49] => noparse((end))
[50] => </p>
[51] =>
[52] => <p>
[53] => と書けば
[54] => blog_link((3))
[55] => が表示される。これはブログ内でも、この
[56] => mysite(())
[57] => の各ページでも機能する。
[58] => </p>
[59] =>
[60] =>
[61] => <p>
[62] => それより、ブログ記事に対応したID番号を確認するほうが問題。
[63] => MTの通常画面を透かしてみても、どうもID情報は存在しないからだ。
[64] => 電脳網で調べると、どうやら編集画面記事一覧でURLを見てID番号を確認しなければならないみたいで、
[65] => なぜそういう手間なことになっているのかワカランでした。
[66] => </p>
[67] => <p>
[68] => しかたがないのでKohana側から一覧リスト出来るようにスクリプトを書く
[69] => note((start))
[70] => 調べてみると、MTのテンプレートに
[71] => escape((<$MTBlogID$>))
[72] => というタグを書けばいいみたいだが、MTのテンプレートを一切弄らないというのが家訓であるので、採用しない。
[73] => note((end))
[74] => 。
[75] => 下の画面がそれです。
[76] => 記事が増えてきたらKohanaのpaging機能を用いることにして
[77] => とりあえず一枚画面で大丈夫でしょう。その前にこのサイト、沈没する可能性大なわけだし。
[78] => </p>
[79] =>
[80] => clear(())
[81] => image((mt_id_list.png,0.8))
[82] => clear(())
[83] =>
[84] =>
[85] => <h3>20090727:サイトのスキン関係改良?</h3>
[86] => <p>
[87] => いわゆるスキンを選択出来るように改良。
[88] => link((#bsn-skins,前のスキン))のほうが好みだけど、とりあえず実験としてこのサイトのスキンも変えてみた。
[89] => スキンのレイアウト骨格はgoogle((Artisteer))で作る。
[90] => </p>
[91] => <p>
[92] => スキンの選択は、文書ルートにおいてあるsite.ymlで行う。
[93] => </p>
[94] => code((start,ルートにあるsite.ymlの中身))
[95] => name:"both sides now"
[96] => url:"bns.river.tc"
[97] => skin_name:"country"<=現在のスキン名
[98] => cache:TRUE
[99] => map:
[100] => /scarborough/:
[101] => /kohana/:
[102] => /making_app/:
[103] => /basic/:
[104] => /memo/:
[105] => /profile/:
[106] => code((end))
[107] =>
[108] =>
[109] => <h3>20090726:Amazon Adviertising API対応作業メモ</h3>
[110] =>
[111] => <p>
[112] => 認証利用に新しく必要なのは、SecretAccessKey。これはadd_id((Amazon Web Services,aws))でログインすれば手に入る。
[113] => </p>
[114] => <p>
[115] => で、link((http://www.multiburst.net/ElectricBrain/2009/06/amazon-product-advertising-api-pear,Amazon Product Advertising APIへ対応する(PEAR)))
[116] => と、link((http://d.hatena.ne.jp/p4life/20090510/1241954889))を参照して、
[117] => いままで使ってたPEARのAmazonECS4をやめて、同じくPEARのServices_Amazon-betaを使って、SecretAccessKeyを
[118] => クラスインスタンスの引数に入れておくだけでいい。。全然面倒くさくなかったぢやないか。
[119] => </p>
[120] => <p>
[121] => リクエストuriは下記のようになった。
[122] =>
[123] => </p>
[124] => code((start,PEARクラスのgetLastUrlで取得したuri))
[125] => http://ecs.amazonaws.jp/onca/xml?
[126] => AWSAccessKeyId=秘
[127] => &AssociateTag=略
[128] => &ItemId=秘<=もちろん恥ずかしいから
[129] => &Operation=ItemLookup
[130] => &ResponseGroup=Medium
[131] => &Service=AWSECommerceService
[132] => &Timestamp=2009-07-26T02%3A24%3A41Z<==エンコードされている
[133] => &Version=2009-03-31
[134] => &Signature=秘
[135] => code((end))
[136] =>
[137] => <h3>20090725:【重要・あと30日です】Product Advertising API の署名認証利用開始のお願い</h3>
[138] => <p>
[139] => 海の日周辺であれこれ浮かれいたら、あっと言う間に7月も終わるのかい。
[140] => mylink((/memo/200906.html,,amazonapi))の項目でメモってたAmazon Advertising API変更についてのメールが再度来てるのを見逃してました。
[141] => 気がついた時に対応しないとまずいですね。
[142] => </p>
[143] =>
[144] =>
[145] =>
[146] => <h3>20090719:TABLE自動表示</h3>
[147] => <p>
[148] => PEAR HTML_Tableを使えば、楽でした。=>
[149] => mylink((/kohana/making_app/dummy/table.html))
[150] => </p>
[151] => <h3>20090718:画像表示関係のCSSを考える</h3>
[152] => <p>
[153] => amazonのサービスで項目・画像を取得して
[154] => </p>
[155] => bq((start,,pre))
[156] => +------+
[157] => 画像
[158] => +------+
[159] => 項目
[160] => 文字列
[161] => +------+
[162] => bq((end))
[163] => <p>
[164] => image((/img/_resize_200/ff.png))
[165] => のよう配置出来るようにCSSを書いて
[166] => FireFoxでは、右のように(右の画像の左下)表示されてるので安心してたのだが、
[167] => さきほどscreenshot.jpでMS IE8での表示をチェックしたら
[168] => </p>
[169] => clear(())
[170] => bq((start,,pre))
[171] => +------+
[172] => 画像 項目
[173] => +------+
[174] => bq((end))
[175] => <p>
[176] => image((/img/_resize_200/ie8.png))
[177] => となっているのだもの・・・。これは直さざる得ない。
[178] =>
[179] => </p>
[180] =>
[181] => clear(())
[182] => <h3>20090718:メニューリンクの再帰処理</h3>
[183] => <p>
[184] => google((Artisteer))は、メニューリンクのjavascriptが付いてくるので、
[185] => ul/li要素内にul要素を入れてネストするだけで、マウスオーバーで子のリンクが表示できるようになる。
[186] => </p>
[187] => image((/linkmenu.png))
[188] => clear(())
[189] => <p>
[190] => いままで、頁カテゴリーの親子関係付けを処理せず放置していたのだが、とりあえずやってみた。
[191] => 文書ルートの処理用ファイル(google((YAML)))に、map項目を設け、つぎのように書いておく。
[192] => </p>
[193] => bq((start,文書ルートのsite.yml内のカテゴリーリンク項目記述,pre))
[194] => map:
[195] => /scarborough/:
[196] => /kohana/:
[197] => /basic/:
[198] => /making_app/:
[199] => /memo/:
[200] => /profile/:
[201] => bq((end))
[202] => <p>
[203] => 上の例では/kohana/の子が、/kohana/basic/,/kohana/making_app/。
[204] => この情報をもとに、それぞれのディレクトリの情報ファイル(これもYAML)を見に行って、リンク用タイトルを得て、あとはVIEWでループを回して、リンク生成。
[205] => </p>
[206] =>
[207] => <h3>20090715:こわいことやってたんだ</h3>
[208] => <p>
[209] => link((http://headlines.yahoo.co.jp/hl?a=20090715-00000626-reu-int,中国政府、ネット依存症治療の電気ショックを禁止に))(ロイター)
[210] => </p>
[211] =>
[212] =>
[213] => add_id((,fusioncharts))
[214] =>
[215] => <h3>20090714:XML/SWF ChartsからFusionChartsへ:あっさり方針変更</h3>
[216] => <p>
[217] => グラフをあっさりと
[218] => link((http://www.fusioncharts.com/Free/,FusionCharts))
[219] => Free版(2.1)に変更した。
[220] => 表示用に各種言語に対応したコード類が提供されてるのがミソ。もちろんPHPのクラスもある。
[221] => </p>
[222] =>
[223] => <div style='margin-left:3em;'>
[224] => chart((start))
[225] => X[X軸のタイトル]
[226] => Y[yaxis]
[227] => W[480]
[228] => H[480]
[229] => CHART[MSLine]
[230] => CAPTION[編年テスト]
[231] => RANGE[1993,2,6]
[232] => JPN,123,333,223,345,443,343
[233] => FRA,321,323,139,43,34,138
[234] => GR,121,299,39,532,98,388
[235] => chart((end))
[236] => </div>
[237] => <p>
[238] => フリー版でも機能が多くて、ぼくには使いこなせそうになく、
[239] => 複数の折れ線グラフが使えるだけで、もう満足しました。
[240] => </p>
[241] => code((start,使い方メモ))
[242] => --------------前提--
[243] => (1)同梱のjavascript URLをHTMLのhead部で指定していること
[244] => <script language="Javascript" src="/skins/Charts/FusionCharts.js">
[245] => </script>
[246] => のような感じ。
[247] =>
[248] => (2)*swfがURLパス内にあること。
[249] =>
[250] => --------------手順--
[251] => 0.Code/PHPClass/Includes/FusionCharts_Gen.phpを読み込む
[252] =>
[253] => 1.$FC->setSwfPath(*swfファイルのあるURLパス名);
[254] =>
[255] => 2.$FC=new FusionCharts(グラフタイプ,幅,高);でインスタンスを作る
[256] => グラフタイプは、上の例だとMSLine1(複数折れ線)
[257] => このタイプの名前が表示を司る*swfの名前になる
[258] =>
[259] => 3.$FC->setChartParams(x/y軸とかキャプション表示のパラメタ);
[260] =>
[261] => 4.$FC->addCategory(x軸の項目);これはループで回す。上の例だと
[262] => 1993等の年号
[263] =>
[264] => 5.$FC->addDataset(データ);これはループで回す
[265] =>
[266] => 6.$result = $FC->renderChart(FALSE,FALSE);二番目引数TRUEなら
[267] => 直接出力
[268] => code((end))
[269] =>
[270] => code((start,出力されるjavascript))
[271] => <script type="text/javascript" >
[272] => var chart_MSLine1 = new FusionCharts("/skins/Charts/FCF_MSLine.swf",
[273] => "MSLine1", "480", "480", "0", "0", "","noScale","EN");
[274] => //Provide entire XML data using dataXML method
[275] => chart_MSLine1.setDataXML("<graph xAxisName='X軸のタイトル'
[276] => yAxisName='yaxis' caption='編年テスト' decimalPrecision='0'
[277] => formatNumberScale='0' ><categories ><category name='1993' />
[278] => <category name='' /><category name='1995' /><category name='' />
[279] => <category name='1997' /><category name='' /></categories>
[280] => <dataset seriesName='JPN' color='AFD8F8' ><set value='123' />
[281] => <set value='333' /><set value='223' /><set value='345' />
[282] => <set value='443' /><set value='343' /></dataset>
[283] => <dataset seriesName='FRA' color='F6BD0F' ><set value='321' />
[284] => <set value='323' /><set value='139' /><set value='43' />
[285] => <set value='34' /><set value='138' /></dataset>
[286] => <dataset seriesName='GR' color='8BBA00' ><set value='121' />
[287] => <set value='299' /><set value='39' /><set value='532' />
[288] => <set value='98' /><set value='388' /></dataset></graph>");
[289] => chart_MSLine1.render("MSLine1Div");
[290] => </script>
[291] => code((end))
[292] => <p>
[293] => 上のPHPの用例はjavascriptの中(chart_MSLine1.setDataXML関数)にデータを埋め込む
[294] => もので、*xmlファイルを指定することもできる。
[295] => その場合、escape(($FC->addDataset))等などは必要ない。
[296] => </p>
[297] =>
[298] =>
[299] => <p>
[300] => mylink((/kohana/making_app/dummy/chart.html))
[301] => </p>
[302] =>
[303] =>
[304] =>
[305] => <h3>20090715:googleには載ったようだ</h3>
[306] => <p>
[307] => 本日朝、とりあえずサイト名を検索したところgoogleのデータベースには登録されているようである。
[308] => </p>
[309] => <p>
[310] => 試しにgoogle((bsn.river.tc))。
[311] => </p>
[312] =>
[313] =>
[314] => <h3>20090714:XML/SWF Charts を使ってみる</h3>
[315] => <p>
[316] => グラフをWebで描画する必要があって、それ用のスクリプトを探してみた。
[317] => 最初JpGraphを考えたが、そこまでの機能は必要ないのでパス。
[318] => google のchart APIというのもあったが、外部依存したくないのでパス。
[319] => 結局、link((http://www.maani.us/))のswfアプリケーションを採用。
[320] => 同梱のjavascriptで動作可能なので、
[321] => 条件にあわせてjavascriptの変数を代える部分だけをPHPで書けばいいだろう。
[322] => </p>
[323] =>
[324] => <h3>20090713:yahooディレクトリ登録</h3>
[325] => <p>
[326] => google bot君が来てくれてるみたいなので、「外部リンク」情報をつけるために
[327] => yahooディレクトリに登録しました。電子工作のディレクトリです。
[328] => 記事がまだほとんどKohanaがらみのものしかないので、一応PHPディレクトリを
[329] => 追加登録(という項目が登録画面にある)してます。
[330] => いつごろ載るかな。
[331] => </p>
[332] =>
[333] =>
[334] => <h3>20090709:APCでは速度改善なし</h3>
[335] => <p>
[336] => 外部からapacheのabで速度比較をしたが、APCでは殆ど改善なし。
[337] => 考えてみればあたりまえのところがあって、このサイトは
[338] => mylink((/memo/200906.html,,reverse_proxy))の覚えで書いたように、リバースプロキシで動かしてるからだ。
[339] => LAN内のリバースプロキシサーバ<=>HTTP本体サーバの通信よりは、
[340] => サーバーになってる玄箱の処理速度とか、光対応出来てない回線速度が足を引っ張ってるようである。
[341] => 後回しになってるリバースプロキシの調整をやれば、そのへんは改善されるかもしれないけれど
[342] => 試行錯誤が多そうで面倒なので多分やらない(<=家訓)。
[343] => </p>
[344] => <p>
[345] => ということで、面倒ではないKohanaのCacheを動かしてみた。もちろん早くなりました(cf. mylink((/kohana/making_app/cache.html)))
[346] => </p>
[347] =>
[348] =>
[349] =>
[350] =>
[351] => <h3>20090708:google登録</h3>
[352] => <p>
[353] => 本日googleにURLを登録しました。公開開始です。
[354] => </p>
[355] =>
[356] =>
[357] => <h3>20090708:APCを動作させるが、MacPortsがおせっかいな件</h3>
[358] => <p>
[359] => おまじないとして、PHP PECLのAPCをMacportsで入れる。
[360] => port install php5-apc
[361] => </p>
[362] => <p>
[363] => で、、、、入れたら、php.iniいじらなくても動作している。
[364] => </p>
[365] => <p>
[366] => link((http://lists.macosforge.org/pipermail/macports-users/2009-June/015503.html,macports関係のメーリングリストに載ってた情報))で気付いて、phpinfoでmacportsのコンパイルオプションを見ると、
[367] => --with-config-file-scan-dir=/opt/local/var/db/php5
[368] => だったんだ。そうなってるのは知らなかった。
[369] => </p>
[370] => code((start))
[371] => cat /opt/local/var/db/php5/APC.ini
[372] => extension=APC.so
[373] => code((end))
[374] => <p>
[375] => でも、どうだろう。それを使うにしても、/opt/local/var/db/なんていう無関係なディレクトリじゃなくて
[376] => php.iniのディレクトリ(/opt/local/etc/php5/)に近いところにすべきだと思うよ。
[377] => </p>
[378] =>
[379] => <h3>20090708:サイトをgoogleに登録</h3>
[380] => <p>
[381] => Kohanaで作っていたアプリ(モジュール)が動いているので、このサイトのURLをgoogleに登録しました。
[382] => なんやかんやで、作り始めてから、公開までに、一月ぐらいかかりました。
[383] => でもサイトの目的はKohanaの作成メモの公開じゃなくて、電気工作日記の公開だったはず。
[384] => 本末転倒はこの程度にしてと。
[385] => </p>
[386] =>
[387] => <h3>20090707:zenphoto利用はやめる</h3>
[388] => <p>
[389] => mylink((200906.html,,zenphoto))で書いた
[390] => WEBアルバムアプリケーションzenphotoであるが、使うのはやめました。
[391] => 理由は
[392] => mylink((/kohana/making_app/image.html,TRUE))の
[393] => mylink((/kohana/making_app/image.html))
[394] => にて。
[395] => </p>
[396] =>
[397] => <h3>20090705:ClockLinkのサーバ停止原因判明</h3>
[398] => <p>
[399] => 20090704にlink((http://www.clocklink.com/))がDNSエラーになると書いたが、
[400] => 復活してる。結構気に入ってたので、よかったよかった。倒産したのかとおもってしまった
[401] => (DNS解決エラーってかなり深刻だから)。
[402] => </p>
[403] => <p>
[404] => link((http://www.clocklink.com/new_content.php?id=95&page=1))
[405] => 7月2日から4am on July 4, google((PST))まで火災原因でデータセンターが停止したということなので、かなり長期にわたったわけですね。
[406] => </p>
[407] => <p>
[408] =>
[409] => こういうことがあるので、単にjavascriptを張るだけじゃまずいかもしれないですね。頁自体の読み込みがとても遅くなる。
[410] => 相手方が生きてるかどうかを判定した上でjavascriptを動かすような仕掛けを考えたほうが、いいかもしれない。
[411] => </p>
[412] =>
[413] => <h3>20090705:Artisteerで頁構成を作った</h3>
[414] => <p>
[415] => 入れ子の密林をなんとか踏破して、VIEW+CSSをとりあえず作った。
[416] => </p>
[417] =>
[418] => <p>
[419] => CMSのskinとかを作る人って、エライなあと思った。手間がすごい。
[420] => </p>
[421] => <p>
[422] => と、ここまで書いて、add_id((とりあえず記念撮影,skins))。下のようなものが本日の構成である。
[423] => 本日の、などと書いたところを見ると、手間だと言いながら気に入らなくて作り直す可能性は否定できません。
[424] => </p>
[425] =>
[426] => <p>↓いままでの仮レイアウトだったもの</p>
[427] => image((diff_IE_FireFox.jpg))
[428] => clear(())
[429] => <p>↓今回作ったもの</p>
[430] => image((first_layout.jpg))
[431] => clear(())
[432] =>
[433] => <p>
[434] => 代わり映えしないといえばそれまでだが、それほど手間なく作り直せるし、ボタン画像なんかも自動生成してくれるみたいだし、
[435] => メニューリンクを、なにも考えないでjavascriptで表示出来るとか、
[436] => 配置のズレみたいなものを考えなくてもいいとか、やはり利が大きいので
[437] => 自分で一からしこしこ作るのはもはや考えられない。
[438] => </p>
[439] =>
[440] => <h3>20090704:Simplexmlを勉強する</h3>
[441] => <p>
[442] => Artisteerは、お手軽Webレイアウトソフトで便利である。
[443] => ただ、出力して出来るHTML の「タグ」が入れ子の入れ子の入れ子の入れ子の入れ子になっていて、
[444] => 加えて表示用のダミーの文字列がたくさんあるので
[445] => 、何処から何処までが有意の要素の塊なのかすぐに判らなくなる。
[446] => </p>
[447] => <p>
[448] => HTMLソースの不必要な塊や記述をちぎっては投げちぎっては投げ、必要なところだけをKohanaのVIEWに使うという作戦なので困った。
[449] => </p>
[450] => <p>
[451] => さいしょ、FireFoxのアドインのgoogle((FireBug))を入れてみて、HTML要素を樹木表示しつつ、エディタで編集していたのだけれど、出力ファイルのインデントが深すぎてすぐに間違う。
[452] => </p>
[453] => <p>
[454] => そこで、これをXMLファイルと見なして要素タグのみを抜き出して、浅いインデントを付けたファイルを作ればいいんじゃないかと考える。最初はsed/gawkで安直に手を付け始めたのが意外と難敵だったのですぐに諦め(出来ないことは出来ない<=家訓)、PHP5がもっているXML解析関数のsimplexmlを勉強しようと少し頑張った(少しは頑張る振りをしろ<=家訓)。
[455] => </p>
[456] => <p>
[457] => 結論。勉強しなくてよろしい。
[458] => </p>
[459] => <p>
[460] => link((http://www.php.net/manual/ja/function.simplexml-element-asXML.php))
[461] => の取説頁にarian.stolwijk [at] gmail [dot] com さんと
[462] => rgezella at gmail dot comさんのSimpelXMLElementが投稿・修正した拡張クラスを使えば、
[463] => Artisteerの出力HTMLファイルにちょっと手を加えるだけで
[464] => note((start))
[465] => 各行にある要素内容の文字列を削ることと、
[466] => 一行に複数ある要素タグを一行一つに切り分けることが必要。
[467] => note((end))
[468] => 、さっくりと出来るのであった。
[469] => おかげで、入れ子の水準をエディタ二分割視認するのが楽になった。
[470] => どうもありがとう。
[471] => </p>
[472] =>
[473] => image((simplexml.jpg))
[474] => clear(())
[475] =>
[476] => <p>
[477] => あとは、Artisteerの使ってるCSSのID/CLass名などを抜き出すスクリプトなどを書けば、
[478] => VIEW回りを作れそうである。
[479] => </p>
[480] => </p>
[481] => <h3>20090704:「20090620:時計表示リンクというのがあるんだ」が無くなっている件</h3>
[482] => <p>
[483] => link((http://www.clocklink.com/))のDNSが見当たりません。
[484] => </p>
[485] =>
[486] => <h3>20090702:Artisteerを買う</h3>
[487] => <p>
[488] => なんとかKohanaでControllerとModelは出来て、Viewに取り掛かろうとしているのだが
[489] => 構成とか美術能力がないので、米国のExtensoftという会社が売ってる
[490] => 「网頁自動作成柔体
[491] => note((start))
[492] => というのかどうか知らない。
[493] => link((http://www.ne.jp/asahi/chen/jianyuan/yougo.htm,中国インターネット用語集))
[494] => をみて単語を並べてみただけ。
[495] => note((end))
[496] => 」のlink((http://www.artisteer.com/?p=home,Artisteer2))
[497] => というのを、買ってしまった。試用版をいじってたら、なぜか欲しくなったので衝動で。
[498] => </p>
[499] =>
[500] =>
)
[block_mode] =>
[comment_out] =>
[pre_mode] =>
[buffer] => Array
(
[article] => Array
(
[0] => __DIV__TOC__
[1] =>
[2] => <span id="bsn-auto_anchor_gen"></span>
[3] =>
[4] => <div class="bsn-return_top"><a href="#bsn-wrapper" style="float:;"><img src="http://bsn.river.tc//skins/common/link_top.gif" width="115" height="11" alt="goto top" />
</a><br class="bsn-clear"></br>
</div>
<h3 id='bsn-h-0'>20090730:KohanaからMovable Typeの記事タイトル/リンクを生成してみる</h3>
[5] =>
[6] => <p>
[7] => MovableType(MT)で書いたブログの自記事のリンクを生成表示する簡易タグを作成。
[8] => </p>
[9] => <p>
[10] => まずMTのdatabaseテーブルを調べる。
[11] => </p>
[12] => <div class="bsn-bq"><p class="bsn-bq">sqlite3コマンドで調査</p>
<div><pre>
[13] => sqlite> .tables
mt_asset mt_field mt_permission mt_templatemap
mt_association mt_fileinfo mt_placement mt_trackback
mt_author mt_ipbanlist mt_plugindata mt_ts_error
mt_blog mt_log mt_role mt_ts_exitstatus
mt_category mt_notification mt_session mt_ts_funcmap
mt_comment mt_objectasset mt_tag mt_ts_job
mt_config mt_objectscore mt_tbping
mt_entry mt_objecttag mt_template </div>
</pre></div>
[14] =>
[15] => <p>
[16] => このうち、ブログIDとタイトル、URL情報を含まれているテーブルをテキトウにアタリをつけて探す。
[17] => </p>
[18] => <p>
[19] => mt_entryにIDとタイトル,mt_fileinfoにIDとURLがあるのがわかる。
[20] => ここまでくれば簡単で、
[21] => </p>
[22] => <div class="bsn-code"><p class="bsn-code">---</p>
<pre>
[23] => public function blog_link($id) {
$sqlite_db_path = MTのsqlite dbパス;
$dbn = new PDO("sqlite:".$sqlite_db_path,'','');
$mt = $dbn->query(
"SELECT entry_title,fileinfo_url
FROM mt_entry,mt_fileinfo
WHERE fileinfo_entry_id=entry_id AND entry_id=".$id);
$row = $mt->fetch(PDO::FETCH_ASSOC);
...略
</pre></div>
[24] =>
[25] => <p>
[26] => あとは、$row配列を利用して、アンカーリンクを作ってやればいい。
[27] => </p>
[28] => <p>
[29] =>
[30] => blog_link((3))
[31] => </p>
[32] =>
[33] => <p>
[34] => と書けば
)
[annex] => Array
(
)
[note] => Array
(
)
[keywords] => Array
(
)
[description] => Array
(
)
)
[note_counter] => 1
[label] => article
[block_level] => 0
[tmp] => Array
(
)
[htmlspecialchars] =>
[toc_replace_string] => __DIV__TOC__
[toc_mode] => 1
[toc_counter] => 1
[heading] => Array
(
[0] => Array
(
[0] => <h3>20090730:KohanaからMovable Typeの記事タイトル/リンクを生成してみる
[1] => 3
[2] => 20090730:KohanaからMovable Typeの記事タイトル/リンクを生成してみる
)
)
)
)
[1] => blog_link
)
, Array
(
[0] => 3
)
)BSN_Parse_Core->get_tag_content( blog_link, Array
(
[0] => 3
)
)BSN_Parse_Core->call_func_by_tags( blog_link((3)), Array
(
[0] => Array
(
[0] => blog_link((3))
)
[1] => Array
(
[0] => blog_link
)
[2] => Array
(
[0] => 3
)
)
)BSN_Parse_Core->parse_line( )
BSN_Parse_Core->parse( 1, 1 )
Page_Controller->html( )
ReflectionMethod->invokeArgs( Page_Controller Object
(
[model] => PathInfo_Model Object
(
[start_path] =>
[parent] => Array
(
)
[pathinfo] => Array
(
[default] => PathInfo_Model
[docroot] => /var/exports/www/river.tc/bsn/www/../docs/
[dirpath] => /memo/chronicle/
[filepath] => /memo/chronicle/200907.html
[filename] => 200907.html
[fullpath] => /var/exports/www/river.tc/bsn/www/../docs//memo/chronicle/200907.html
[extension] => html
[mime] => text/html
[exists] => 1
[homepage] =>
)
[db:protected] => Database Object
(
[config:protected] => Array
(
[benchmark] => 1
[persistent] =>
[connection] => Array
(
[type] => mysql
[user] => dbuser
[pass] => p@ssw0rd
[host] => localhost
[port] =>
[socket] =>
[database] => kohana
)
[character_set] => utf8
[table_prefix] =>
[object] => 1
[cache] =>
[escape] => 1
)
[driver:protected] => Database_Mysql_Driver Object
(
[link:protected] =>
[db_config:protected] => Array
(
[benchmark] => 1
[persistent] =>
[connection] => Array
(
[type] => mysql
[user] => dbuser
[pass] => p@ssw0rd
[host] => localhost
[port] =>
[socket] =>
[database] => kohana
)
[character_set] => utf8
[table_prefix] =>
[object] => 1
[cache] =>
[escape] => 1
)
[query_cache:protected] =>
)
[link:protected] =>
[select:protected] => Array
(
)
[set:protected] => Array
(
)
[from:protected] => Array
(
)
[join:protected] => Array
(
)
[where:protected] => Array
(
)
[orderby:protected] => Array
(
)
[order:protected] => Array
(
)
[groupby:protected] => Array
(
)
[having:protected] => Array
(
)
[distinct:protected] =>
[limit:protected] =>
[offset:protected] =>
[last_query:protected] =>
[query_history:protected] => Array
(
)
)
)
[view_name] => html
[toc_flag] => 1
[nobr_flag] => 1
[rawhtml] =>
[uri] => URI Object
(
)
[input] => Input Object
(
[use_xss_clean:protected] => 1
[magic_quotes_gpc:protected] =>
[ip_address] =>
)
)
)Kohana::instance( )
call_user_func( Array
(
[0] => Kohana
[1] => instance
)
)Event::run( system.execute )
require( /var/exports/www/01KOHANA/dev/system/core/Bootstrap.php )
Loaded in 0.0589 seconds, using 3.94MB of memory. Generated by Kohana v2.3.4.