概要:同じデータベース内にデータベーステーブルのさまざまなコピーがあるが、テーブルプレフィックスが異なる単一のJoomla Webサイトがあります。
どのユーザーがサイトにアクセスしているかに応じて、関連するテーブルを表示するために、どのjoomlaテーブルプレフィックスを使用するかを変更する必要があります。
これはサイト全体でなければなりません。
Problem:コアコードハックを使用すると、必要に応じてプレフィックスを変更できますが、プラグインとしてこれを使用します。
プラグインを使用すると、$ db-> getPrefix()を使用してプレフィックスを取得できます。また、$ db = JDatabaseDriver :: getInstance($ option)を使用して、接続の即時インスタンスを設定できます。しかし、これはサイト全体ではなく、標準の$ db = JFactory :: getDbo()によって上書きされます。
したがって、実行時にテーブルプレフィックスのすべてのインスタンスを置き換えるシステムプラグインが必要です。
何か案は?
プラグイン内からこれを行う方法はまったくありません。これは、Joomlaがプラグインをロードする前にデータベースへのアクセスを開始するためです。
これを行う唯一の方法は、ロジックが必要なconfiguration.php
ファイル内からです(getTablePrefix
という関数を作成する必要があります)。 Joomlaがこのファイルに書き込めないことを確認する必要があります。そうすると、変更が破棄されます。
defines.php
ファイルを使用してこれを行うことを考えましたが、構成がロードされる前にロードされるため、そこで実行することはできません。
ところで、すばらしい質問ですが、ユーザーごとに異なるテーブルセットが必要な理由にも興味があります。おそらく、最善の解決策は、ロジック全体を再考することでしょう。
私がそれを行う唯一の方法は、例えばあなたのカスタム_class JDatabaseDriverCustom extends JDatabaseDriverMySql
_を追加することだと思います、そしてそこにあなたはいくつかのオプションで行くことができるでしょう:
とにかく、考えてみてください。ユーザーに依存するサイトが本当に必要ですか、それともIPなどのJoomlaに関連しないものに依存する必要がありますか。このようにして、設定ファイル内に__constructor()
を記述し、そこにロジックを配置して_$this->db_prefix
_を変更できます。