私の勘違いで・・・
「正常に動いているのに動いていないと思いこんでいました。
」
てっきり画像がGreyBoxで表示されるものだと思いこんでしまってて・・・・。手間かけちゃってすみません。
joomlaeasy.netさんを見に行ったら記事になってるじゃないですか・・・あせりましたよ。![]()
なのでこちらでも記事にさせていただきました。
メールのやりとりだけですが、とっても熱意のある方って印象を受けました。
私の早とちりは今にはじまったことではありませんが、人に迷惑かけちゃ~いけませんね。謝!
前から気にはなっていたんです。GreyBoxで使用しているJavascriptライブラリは、他でonload時のscriptが定義されていたりすると動かない場合があるので動かない場合、その部分をAJSライブラリを使った物に書き換える必要があります。ですが、それが原因ではない場合もあります。
さて、気にはなっていたのでもっと一般に普及しているJavascriptライブラリを使おうってことで次に考えているのがmultiboxです。すでにjoomlaeasy.netさんで紹介されていますがひっそりdemoで公開していました。
少し改造してみた。
各記事上のPDFアイコンとE-Mailアイコンをクリックしてみてください。
GreyBoxを使って表示するようにしてみました。
変更は以下
Root/libraries/joomla/html/html.php
Line:110
return '<a href="'.$url.'" '.$attribs.'>'.$text.'</a>';
を
$base = substr(JURI::base(), 0, strlen(JURI::base()) - 1);
$regex = '/<img[^>]*alt="pdf"[^>]*\/>/i';
if(preg_match($regex, $text)){
$attribs = ' rel="gb_page_fs[]"';
$url = $base. $url;
}
$regex = '/<img[^>]*alt="E-mail"[^>]*\/>/i';
if(preg_match($regex, $text)){
$attribs = $attribs. ' rel="gb_page_center[480, 320]"';
$url = $base. $url;
}
return '<a href="'.$url.'" '.$attribs.'>'.$text.'</a>';
へ変更した。
これだけでは、常時GreyBoxのJavascriptは読み込まれない(プラグインには関係ない)のでテンプレートのheadセクションに以下を追加
<script type="text/javascript">var GB_ROOT_DIR = "<?brush:php; echo $this->baseurl ?>/plugins/content/greybox/"</script> <script type="text/javascript" src="/<?brush:php; echo $this->baseurl ?>/plugins/content/greybox/AJS.js"></script> <script type="text/javascript" src="/<?brush:php; echo $this->baseurl ?>/plugins/content/greybox/AJS_fx.js"></script> <script type="text/javascript" src="/<?brush:php; echo $this->baseurl ?>/plugins/content/greybox/gb_scripts.js"></script> <link href="/<?brush:php; echo $this->baseurl ?>/plugins/content/greybox/gb_styles.css" rel="stylesheet" type="text/css" />
これは、デフォルトのrhuk_milkywayテンプレートの場合です。
これによって常時GreyBoxのJavascriptがロードされるのでGreyBoxプラグインをインストールしている場合は、Output GreyBox.jsをNoに変更してください。

参考にGreyBoxを使ってみましたが、同様にLightBox、ThickBox、LightWindowなど他の画像表示のJavascriptにも応用できるでしょう。
HTMLが表示できるJavascriptライブラリでないと無理でしたね。
昨日ある問い合わせがあってCacheのことでJoomlaのソースを眺めていました。
Joomla!のCacheは、パーツごとにCacheファイルを作成し、それをパーツごとに読み込むようになっているようです。たとえば記事なら記事ごとにファイルが作成されます。モジュールならモジュールごとに。そうすることのメリットは、Cacheされては困るパーツは、Cacheさせないようにすることができるからだと思います。たとえば、このサイトで使用している!JoomlaCommentもその一つですが、Cacheされてしまうと投稿した内容はすぐに反映されません。明示的にCacheをクリアするしかありません。また、このサイトで配布しているPluginの中でもJavascriptをヘッダーに出力しているもの(SyntaxHilighter, CodePress Plugin, GreyBox)は、Cacheに対応していません。というより、Joomla!のCacheがヘッダーとともにCacheしないからです。その理由もわかります。パーツごとに管理しているため、Cacheしないパーツがヘッダー内の出力を変更することを考慮しているからだろうと想像します。Pluginは、記事内の設定された文字により、ONになります。Cacheから読み込まれた場合はPluginを通過した後の記事となるためPlugin自体を通過しません。よってヘッダーには出力することができません。
サードパーティーのCacheエクステンション(ヘッダーを含めすべてをCacheしてくれる。)をひとつ試してみましたが、すべてのエクステンションに対応しているわけでは無いのでサイトで使用しているエクステンションによっては、自分で対応するように工夫しなければなりません。このサイトではCacheはオフにしていますが、Cacheの応答性を考えるとやはり対応していかなければならないと考えています。
そこで対応の方法を考えてみました。
と、そうしなくても簡易対応ならできます。
対応していないPluginは、次のバージョン(マイナー)で簡易対応するつもりです。
XML-RPCですが、Joomla!1.5ではどうもbloggerAPIのみの対応っぽいですね。他のAPI対応の動きは盛んなようですので最終的にはサードパーティーからになるかもしれませんが、公開されるような気はします。私も密かにつくりかけてたり・・・。
昨日電話を切ったあと、担当者が折り返しにすぐ電話をかけてきた。
担当者:「あの、GreyBoxで表示したらPagePeelが邪魔でWindowを閉じられないんですけど・・・。」
私:「えっ・・・あっ本当・・・。」
私:「×ボタンが見えた時に押すといける・・・・・あっ Paypalに飛んだ・・・。」
私:「まっ 良いんじゃない? 寄付してくれる人いるかもしんない・・・・・。」
担当者:「・・・。」
この担当者は、いつも私のテストに付き合っていただいている貴重な人物。
ってことでGreyBoxのz-indexを見たら100だったのでPagePeelのz-indexを90に変更し、z-indexのパラメータを作成しました。
Joomler! PagePeelモジュール(もしかしたらコンポーネントになるかも)
いずれ公開しますが、もう少し慣れないFlashで遊ばせてください。
実装済みの機能