$bcBaser->content() の出力結果に手を加えるプラグインの実装について
tecking > $bcBaser->content() の出力結果に手を加えるプラグインの実装について @ 2013/10/21 2:04 |
---|
baserCMSプラグインの習作として、記事本文にメディアを埋め込む「oEmbed機能」のプラグインを作り始めています。
……が、開始早々行き詰まってしまいました ともかく、$bcBaser->content() の出力結果を横どりできないことには始まらない、ということで /app/plugins/sample/views/helpers/sample_hook.php というファイルを作り、下記のようなコードを書いてみました。
これで記事本文中の「baserCMS」が「べっしー」に変わるはず……と思ったのですが、まったく変化ナシでした。 試しに afterRender メソッドの中身をまるっと /baser/views/helpers/bc_baser.php の afterRender 内に
……のような形でコピペしたところ、こちらはうまくいきました。 baserCMSのプラグインフックについて理解が甘く、どこかで見落としをしているのだと思います。 どなたか、ご教示くださるとありがたいです。よろしくおねがいいたします。 ■ BaserCMS:2.1.1 ■ サーバー名:XAMPP Lite for Windows 1.8.1(PHP 5.4.7 / MySQL 5.1.57) ■ スマートURL:ON ■ 設置フォルダ:サブフォルダ ■ PHPスキル:C ■ PHPのバージョン:5.4.7 |
goichi > Re: $bcBaser->content() の出力結果に手を加えるプラグインの実装について @ 2013/10/22 0:24 |
---|
こんにちは!
すごく、あやふやな記憶での回答になるのですが、公式プラグインのアップローダープラグインが、確か($bcBaser->content()での出力部分ではないのですが)afterLayoutを使って、出力されるHTMLを正規表現を使って書き換えていたように思います。 それを参考にしてソーシャルボタンを出力するプラグインを作った時も、同じようにafterLayoutを使ってフックを仕掛けた記憶があります。 参考にならなかったらすみません。。。。 |
tecking > Re: $bcBaser->content() の出力結果に手を加えるプラグインの実装について @ 2013/10/22 9:53 |
---|
goichiさん
解決へのヒント、ありがとうございます。 ソーシャルボタンプラグインやアップローダープラグインのソース、見てみました。 たしかに $view->output に対して str_replace() や preg_replace() で置換してますね。 私も試行錯誤しながら、afterLayout にフックした方がいいかなあ、とも思ったのですが oEmbedの対象になるYouTubeやTwitterなどのURLは、 コンテンツエリア以外(サイドバーやフッタ)にも出現する可能性があるので HTMLファイル全体を走査する手法はとりづらそうです。 単にoEmbed機能を組み込むだけなら、jQueryプラグイン (たとえば https://github.com/hypomodern/jquery-oembed) で実装してしまうのがサクっといけるのですけど プラグインづくりの練習をかねて、なんとかPHPでやってみたいんですよねー :) ともあれ、引き続き試行錯誤してみます。 |
tecking > Re: $bcBaser->content() の出力結果に手を加えるプラグインの実装について @ 2014/12/29 1:33 |
---|
自己レス遅レスです。
1年以上伸ばし伸ばしにして、ようやくプラグインができました。その間にbaserCMSも3系にバージョンアップし、$bcBaser->content() という関数も忘却の彼方に…… ということで処理を全面的に見直し、CakePHPのイベントシステムを使っています。 完成までの道のりをブログに書きましたので、ご興味ございましたらご覧ください。 学習を兼ねてoEmbedが使えるプラグインつくってみました|WordPressユーザーのbaserCMS覚え書き http://baser-for-wper.tecking.org/column/enable_oembed_plugin |