命名規則は有力な候補になりそうですね(^ ^)。
> (2)モジュール側は、xoops_module_header でライブラリを指定
>
>> >(2)ライブラリの二重読み込み
>> 管理画面より、読み込むライブラリ(とバージョン)を指定できるようにする。
> と
>> >(3)サイト全体に適用する javascript
>> (2)と同様、管理画面より javascript の script を追加できるようにする。
>> 追加した script は、xoops_script_header みたいな場所に書き出される
>> (あるいは、xoops_module_header に追加する
>
> の部分で、管理画面から設定するというのは、ライブラリの管理の手間も増えるし、きちんと定義しておけば問題はないと思います。
hiro1173さんの方法(「きちんと定義して~」)だと、テーマとモジュールの
両方で同じライブラリを読み込んだ場合に問題になるんじゃないでしょうか?
たとえば、僕が作ったbizforumというモジュールではjQueryを読み込んでいます。
一方、サイト運営者が、トップページで使うためにテーマファイルに jQuery を
読み込む指定を<head>内にしたとします。
このサイトで、bizforum モジュールにアクセスすると、テーマで読み込み、
モジュールの xoops_module_header の指定で読み込み、都合2回読み
込むことになりますよね。
モジュール作者側は、テーマやブロックでどんなライブラリが読み込まれるか
分からないので定義をしっかりするだけでは解決できないような気がします。
また、テーマにjavascriptを書く人も、各モジュールでどんなライブラリが使わ
れているかを注意深く確認して書く、後からモジュールを追加するときも
新モジュールで使うライブラリがバッティングしないようにする、というのは
かなりの手間になると思います。
なので、それぞれが気にせず読み込みの指定をして、重複はLegacyなどで
うまく処理するようにしないと構築・運用が結構厳しいのではないでしょうか。
以上です。
2008/10/06 22:35 hiro1173 <in...@beabo.net>:
ライブラリの置き場所のということではないのですが、関連しそうなので
書いておきます。
OSCのときに、モジュールを依存関係を解決しつつ自動でアップデートしたいと
いうような話をしてまして、minahitoさんがそれはマニフェストファイル(minifest)
に依存関係を記述してある(はっきり覚えてないですがそんな趣旨のことを)
と言ってました。
例えばあるモジュールが altsys に依存していたらインストール時に自動で
altsys がインストールされるといったことです。(あくまで仮定の話です)
さっきメールを読んだら javascript のファイルも同じかもと思いました。
モジュールが依存しているライブラリをマニフェストファイルに書いておいて、
コアではそれを元に自動でファイルを読み込んでページを表示することができる
かなと。
コア側で必要なライブラリのバージョンや依存関係を把握できるので、二重読み
込みを防げますし、必要なファイルだけ読んで無駄がないといったこともいえる
かと思います。
--
時田正彦 <BQB0...@nifty.ne.jp>
http://tokita.net/
各種javascriptライブラリ自体をそれぞれモジュールにしてしまうという方法も
ありますね。
jQueryならjQueryモジュールとか。XCだとpreloadがあるので、preloadで
xoops_module_headerやxoops_script_header(?)に
<script src="http://xoops_url/modules/jQuery/js/jQuery.js"></script>
みたいなものをassign(またはappend)。
こうすればjavascriptライブラリ用に新たに管理機構を作る必要がなくなり
ますし、commonのようなところにわざわざ各種ライブラリを設置する
必要もなくなりますね。
この場合、現状のモジュール管理を少し改良して、モジュールの依存性も扱えるよう
にできると良いですね。例えば、bizforumモジュールはjQueryモジュールが
インストールされていないとインストールできないとか。将来的には時田さんの
言われたmanifestoで処理するのでしょうけど。。
また、現状だとリクエスト毎に各モジュールのpreloadを読み込みに行っているようです
けど、この辺りもなんらかのキャッシュ機構を作ったりした方が良いのではと思います。
> jQueryモジュールというのは、javascriptファイルの置き場のために作った
> ダミーモジュールみたいなのでしょうか?
> それとも何か機能を持ちますか?
いえ、機能は持たないと思います。持たせることもできるかもしれませんが。。
そういう意味ではダミーモジュールですが、
> 「preload で xoops_module_header に」というpreload ファイルは bizforum/preload
> に置く、という理解であっていますか?
preloadはもちろんjQuery/preloadに置きます。
すいません、僕はソースしか見ていないのですが、preloadってsettings/site_defaut.ini.phpで
[Legacy]AutoPreload=1であれば、全てのアクティブなモジュールのpreloadを読み込んでますよね?
そうであればカレントのモジュールがbizforumであっても、jQueryモジュールが有効であれば
jQuery/preloadを読み込みに行くので、preloadはjQuery/preloadに置くことになります。
>> <script src="http://xoops_url/modules/jQuery/js/jQuery.js"></script>
>> みたいなものをassign(またはappend)。
>
> と、
>
> <script src="http://xoops_url/common/js/jQuery.js"></script>
> みたいなものをassign(またはappend)。
>
> と、置き場所が違うだけ? jQueryをモジュール化することで得られる何かを
> うまく使うことを想定されていると思うのですが、すみません、そのあたりの
> 仕組みをもう少し教えていただけますか。
はい、簡単に言えば、置き場所が違うだけになります。ただ、「jQueryが必要なモジュールは
jQueryモジュールがインストールされていないとインストールできない」のような仕組みを
現在のモジュール管理機構に付けることができれば、jQueryライブラリの重複は避けることが
できるのではないでしょうか?もちろん、モジュール側でjavascriptライブラリを用意しないことが
前提です。
> もちろん、モジュール側でjavascriptライブラリを用意しないことが
> 前提です。
すいません、この部分少し分かりにくかったですね。。
要は、bizforumのような、jQueryに依存しているモジュール側でjQueryライブラリを
用意しないことが前提ということです。
うーん、更に分かりにくくしてしまっているようですいません。
ただ、例えばbizforumとbiznewsの両方の配布パッケージにhtml/common/jQueryが有る場合に、
両モジュールをインストールしようとするユーザにとって、html/common/jQueryを上書きして
しまって良いのかどうかというのは大きな問題だと思うんです。
そういったユーザの為にも、javascriptライブラリ自体がモジュールだとそういった心配が
なくなる。bizforumとbiznewsをインストールする際に、jQueryモジュールが既に
インストールされているかどうかをチェックするだけで済む。モジュール開発者側に
とっては単純なことですが、ユーザに取っては結構大きな問題だと思うんです。
2008/10/09 20:27 K. Ono <ono...@gmail.com>:
ピンポイントレスですが、以前HDのMLにおいて、PEARなどの扱いについて同様の
話題になったことがありました。
このスレッドは一通りウォッチしていたのですが、同一ライブラリのバージョン
差異などについても、検討しておいた方が良いと思います。
(最新だと動かないモジュールと、最新でしか動かないモジュールのバッティン
グなど)
モジュール同士なら、module_headerという手段もありますが、ブロックが絡ん
でくると、どこで衝突が起きるか判りませんし、何か妙案があればよいのですが。
。。
"K. Ono" <ono...@gmail.com>さんからのメールを引用します。
----------ここから原文----------
>
> 小野です。
>
> うーん、更に分かりにくくしてしまっているようですいません。
>
> ただ、例えばbizforumとbiznewsの両方の配布パッケージにhtml/common/
jQueryが有る場合に、
> 両モジュールをインストールしようとするユーザにとって、html/common/
jQueryを上書きして
> しまって良いのかどうかというのは大きな問題だと思うんです。
>
> そういったユーザの為にも、javascriptライブラリ自体がモジュールだとそう
いった心配が
> なくなる。bizforumとbiznewsをインストールする際に、jQueryモジュールが
既に
> インストールされているかどうかをチェックするだけで済む。モジュール開発
> 小野さんの方法ですと、XOOPSの全てのページでライブラリを読み込む(使っていようが
> いまいが)ので、必要なモジュールでのみ呼び出す方法に比べて上のような問題が
> 発生しやすくなってしまいますね。そこが弱点でしょうか。
> (あと無駄なロードをするというのが若干気にならないでも)
この場合、javascriptライブラリも通常のモジュールなので、一般設定でこのライブラリを
使用するモジュールを選択できるようにするというような方法もあるかもしれないですね。
または、このモジュール自身がdelegate managerを通して独自のイベントを発生させて、
ライブラリを使用するモジュールの情報を集めて、カレントのモジュールがその中にある場合に
xoops_script_headerをセットするとか。。
無駄なロードに関しては、キャッシュヘッダをうまく利用すればリクエスト毎に
読み込むということもなくなると思うので、原則的に全てのページでxoops_script_header
にセットしても良いと思うのですが、どうなんでしょう。
各種ライブラリのバージョンの問題に関しては、例えばprototypeモジュールというのが
あって、このモジュールの各バージョンの同梱物が
prototypeモジュール v1.00
- prototype.js(1.6.0)
- scriptaculous.js(1.8.0)
prototypeモジュール v1.03
- prototype.js(1.6.0.3)
- scriptaculous.js(1.8.1)
だった場合に、xpWiki 3.71.84はprototypeモジュール1.03以上がインストール
されていないとインストールできないようにするとか。。
現行のモジュール管理を改良して、依存するモジュールと、依存するモジュールの
最低バージョンのチェックが行えるようになると良さそうですね。ついでにPHPのバージョン
チェックとかも。。
Xiggでも各種javascriptライブラリ等をそれぞれプラグインとしているのですが、
プラグインのインストール時に上記チェックを行うようにしています。ただ、XOOPSの
モジュールのバージョン形式だと単純にversion_compare()とはいかないのが面倒ですけど。
あと、jQuery/prototypeの$()のバッティングの問題とかは、XCに限った話だと思わないので、
各ライブラリの作者に掛け合うしかなさそうですね^^;
>> こうすればjavascriptライブラリ用に新たに管理機構を作る必要がなくなり
>> ますし、commonのようなところにわざわざ各種ライブラリを設置する
>> 必要もなくなりますね。
>
> という当初のシンプルな解決策からは外れていってしまいますね。
ま、どうしてもシンプルにということであれば、原則的に全てのページで
xoops_script_headerに書き込んで、無駄なロードはキャッシュヘッダで
処理するような感じですかね。
>> または、このモジュール自身がdelegate managerを通して独自のイベントを発生させて、
>> ライブラリを使用するモジュールの情報を集めて、カレントのモジュールがその中にある場合に
>> xoops_script_headerをセットするとか。。
も、それこそpreloadに数行追加するだけで済むと思いますが、ブロックで
ライブラリが必要な場合も考慮すると良い案ではないかもしれないですね。