Joomlaのプラグインは、Joomlaが動いていくなかで様々なイベントで呼ばれます。今回はそのイベントを少し書いてみます。中には、プラグインとして実装されていないものもあるので、ソースを見ない限りわからないものもあったりします。
Ajaxでpostしてデータベースの操作を行っていたのですが、思ったように動いてくれないんですよ。
タイトルで結論がもう見えてますが・・・。
大雑把に書くと、Ajaxでデータベースの複数の操作を行うリクエストをループで行うように書いたんです。最初は、その処理毎に(非同期がその時はちゃんと頭に入っていた。)Completeしてから次のリクエストを行うようにしていました。
けど、だんだん面倒になってきたんです。
何かとコンポーネントが必要では無いかと考えがちですが、プラグインとテンプレート(テンプレートのオーバーライドで行ってNoHack)で大抵の事ができると思う。
たとえば、コンタクト。
こんな風に作れば簡単にオリジナルのものが作成できるでしょう。
(実際に作成してはいないので想像で書きます。)
終わり。
これだけでオリジナルのお問い合わせが作成できます。データを格納したければ、データベーステーブルを新たに作成しなければいけませんが、ワンオフのアプリケーションなら手作業で作成すれば済みます。
昨日発見した点
まず2点。Fireboardへのリンクは、先ほどリダイレクトのメソッドを追加したので解決した。
Joomla!は、Itemidでの管理が多用されていてItemid(メニューIDのことです。)が無い場合内部では99999999などと勝手にItemidをつけて処理しているようです。ですが、これだとItemid無しでアクセスまたは、異なるItemidでのアクセスの場合、Itemidで表示を管理するモジュールなどが正しく表示されません。Allにしていれば問題ないでしょうが、Itemid(メニューID)ごとに異なるモジュールを割り当てている場合は、Allのもののみ表示されるだけで意図した表示にはならないです。
小さなことかもしれませんが、サイトを移転したりメニューIDを変更したときには重要かもしれません。
今回の場合、Itemidが異なるため表示はされるのですが、ComibineコンポーネントでFireboard用に出力されるはずのJavascriptが出力されていませんでした。
指定した(存在するメニューID)Itemidでのみアクセスを許可し、それ以外ならリダイレクトさせるような処理をしてくれるエクステンションが、必要かもしれませんね。それがあれば、サイト移転しても楽じゃないかな。
以前にJavascriptでショッピングカートのようなものを作成したことがあって先日その依頼者が画面を見て悩んでいた。
依頼者:「数が増えると重くて使えない。」・・・それは、私が作った物。
私:「Javascriptにも限界があるのな。」・・・ぉぃ
依頼者:「・・・・。」
すこしソースを眺めていた。動作は、間違っていない。ソースも間違いではない。エラーももちろん出ていない。クッキーを利用しているのでクッキー?、いやそうでない。じゃあ何よって。
私は、陥りやすいのかもしれない。
コードを処理によってパーツ化するのは当然なのですが、そう・・・ループの中で同じ値を参照するのにループ内でそれを見にいっている。それは間違っていますよね。パーツ化していると単純にそれを呼び出せば値が返ってくることがわかっているのでそれを使ってしまう罠でした。それが単純ならわかりやすいのですが、参照先からさらに奥へとつながっていたのでその先で何やってたか把握してなくてそんなことになっていました。
ループの外で参照しよう・・・・。
言い訳太郎でした。