ホーム > フォーラム > 開発 > モジュール開発 > Xoopsモジュール PHPファイルのカスタマイズルールについて

Xoopsモジュール PHPファイルのカスタマイズルールについて
投稿者: userzerox | 投稿日時: 2013/5/27 16:10 | 閲覧: 9974回
userzerox

お世話になります。Xoopsを久しぶりに触ることになりました。
さっそくXoops(ten)を設置しました。

表題の件についてご教示ください。

モジュールのメインファイルは下記ディレクトリにインストールされますが、
xoops_trust_path/module

PHPファイルのカスタマイズはどのように行なうのがベストでしょうか。

例えば、picoの以下のファイルをカスタマイズするとします。
カスタマイズ内容は、class内に新規メソッドの追加や、
メソッドのオーバーライトを想定します。

xoops_trust_path/modules/pico/class/PicoD3commentContent.class.php
※上記ファイルに修正をそのまま加えた場合、モジュールをアップデートしたときに
修正内容が消えますよね?

ECCUBEであれば class_extendsディレクトリ内で修正を加えますが、
Xoopsだとどうすればいいのか、調べてもすぐにでてこず、
投稿させていただきます。宜しくおねがいいたします。

コメント(4)

新しいものから | 古いものから | ネスト表示 | RSS feed
Re: Xoopsモジュール PHPファイルのカスタマイズルールについて 
投稿者: nao-pon | 投稿日時: 2013/5/28 23:14
nao-pon

userzerox さん、こんにちは。

私の知る範囲では、XOOPS において、class 自体をアップデート時に上書きされないように安全にカスタマイズする方法は用意されていないと思います。
もちろん、モジュールレベルではそのような実装がなされているものもありますが、例に上げられた pico はそのような機能はないと思います。

XCL (XOOPS Cube Legacy) に対応したモジュールであれば、ユーザーが換装しそうなメソッドをオーバーライドできるように delegate ポイントを設けてあり、preload ディレクトリに配置されたファイルで機能拡張や換装を行えるようになっている場合もありますが、詳しいマニュアルが整備されていないことも多く、ソースコードで確認して delegate ポイントを探し、適切な preload を実装することが多いように思います。

また、pico ですが XCL に対応はしていますが、preload による機能拡張には対応していないように思います。

ということで、機能拡張するためには、当該ファイルを直接書き換えることになりますが、ご心配されている通りアップデートでその修正内容は消えてしまいます。

理想的には、モジュール作者に delegate ポイントを加えてもらって、元のソースコードの修正を行うことなく、機能追加を実現できるとよいと思います。
そのために、どのような機能を追加したいかと、具体的な修正内容をモジュール作者(開発コミュニティ)へ伝えることで、delegate ポイントを組み込んでもらえるかも知れません。

現状では、古めのモジュールは XOOPS X のリポジトリ(GitHub) でメンテナンスしていますので、そちらも訪れてみてください。
GitHub にアカウントをお持ちでしたら、ぜひ Fork してください。 PullRequest もお待ちしています。
Re: Xoopsモジュール PHPファイルのカスタマイズルールについて 
投稿者: userzerox | 投稿日時: 2013/5/30 12:35 | 親コメント: #21296
userzerox

nao-pon 様

わかりやすい解説ありがとうございます。大変助かります。

>GitHub にアカウントをお持ちでしたら、ぜひ Fork してください。 PullRequest もお待ちしています。

アカウントにssh公開鍵を設定した時点で止まっております。勉強してみます。



一つ教えて頂けますと助かります。
下記はモジュールのアップデート時に消されますでしょうか?

/xoops_trust_path/modules/pico/<自分で作成したファイル>.php
/html/modules/pico/<自分で作成したファイル>.php
Re: Xoopsモジュール PHPファイルのカスタマイズルールについて 
投稿者: nao-pon | 投稿日時: 2013/5/30 23:31 | 親コメント: #21298
nao-pon
引用:
一つ教えて頂けますと助かります。
下記はモジュールのアップデート時に消されますでしょうか?

/xoops_trust_path/modules/pico/<自分で作成したファイル>.php
/html/modules/pico/<自分で作成したファイル>.php


アップデート時は、ご自身で消すか同名のファイルが新しく追加されない限り、独自に作成したファイルが消されることは、通常はありません。

ひょっとすると、モジュールによっては独自のアップデート機能を持っていて、未知のファイルを削除するという可能性もありますが、私の知る範囲ではそのようなモジュールはありません。
当然、pico もアップデート時に消すようなことはありません。
Re: Xoopsモジュール PHPファイルのカスタマイズルールについて 
投稿者: bluemoonjp | 投稿日時: 2013/6/3 10:44
bluemoonjp
引用:
ECCUBEであれば class_extendsディレクトリ内で修正を加えますが、


上記のロジックについては知りませんでしたが推測すると、class_extendsフォルダがあって、動作させたいコントローラやモデルやビューのクラスファイルがあれば、そちらのクラスが優先的にコアのフレームワークから呼び出されるという様な仕様なのかなあと思います。

XoopsXのアップデートのアイデアは、WordPressのアップデート機能を源流としています。そのWordPressの場合、コア(=システムが持つブログ、固定ページ、テーマ)は上書きされてしまいますので、カスタマイズを行った場合はアップデート自体を止めてしまう手法が取られます。(特に納品システムに多いですが、検収終了後にカスタマイズした結果が上書きされたりシステムがストップしてしまっては困りますので)

ちなみに WordPress 3系ですと以下1行でアップデート通知、更新機能が止まります。
add_filter( 'pre_site_transient_update_core', '__return_zero' );

XoopsXではどうすればいいかといいますと、私の場合は単純にxupdateのアクティベーションを外(案件によってはモジュールをアンインストール)して納品しております。

もし、最新の更新内容を取り入れてつつ自分のコードの差分との違いを埋めてカスタマイズしたものをメンテナンスしていきたいという場合は、他の方が述べられている様に GitHub の XoopsX プロジェクトから Folk して、自分専用のリポジトリでカスタマイズプロジェクトを管理します。

こうすると、更新されたコミットはメールによる通知が来ますし、差分を確認しマージする事が出来ます。そしてもし、自分の開発した部分で提供出来るコードがあれば Folk 元のリポジトリに Pull Request して頂く事でよりよいプロダクトになって行くと思います。

他の方の意見と重複する所もありますが、私のやり方が参考になればと思いポストしました。

    投票(0)

    新しいものから | 古いものから | RSS feed
     
    To Top