コンポーネントで他のコンポーネントのモデルをどのように使用できますか?


8

コンポーネントを作成していますが、#__ contentテーブルにアクセスする必要があります。コンポーネントcom_contentは、コンポーネントがそのテーブルで実行する必要があるすべてのことを実行します。コンポーネントのコントローラーにcom_contentモデルをインポートするにはどうすればよいですか?

独自のテーブルを作成する代わりに既存のテーブルを使用することは良い習慣ですか?私のコンポーネントはコメント付きのフォトギャラリーを表示する予定であり、#__ contentテーブルを使用してコメントを保存したいと思います。コメントに新しいテーブルを作成する必要がありますか?

回答:


16

次のメソッドcom_contentを使用して、モデルをコントローラーにインポートできますaddIncludePath()

JModelLegacy::addIncludePath(JPATH_SITE . '/components/com_content/models', 'ContentModel');

addIncludePath()メソッドは、JModelLegacyモデルを検索するディレクトリを追加します。文字列またはディレクトリの配列を最初のパラメータとして渡すことができます。2番目のパラメーターとして、モデルのクラスプレフィックスを指定できます(オプション)。

次に、getInstance()メソッドを使用します:

$model = JModelLegacy::getInstance('Articles', 'ContentModel', array('ignore_request' => true));

最初のパラメーターはインスタンス化するモデルタイプ、2番目はモデルクラス名のプレフィックス(オプション)、3番目のパラメーターはモデルの構成配列(オプション)です。

しかし、私はカスタムコンポーネントに既存のコアコンポーネントテーブルを使用しないことを好みます。


ありがとう!探していたものです。既存のコアコンポーネントを使用しないようにします。あなたはそれについて正しいと思います。
csbenjamin 14

わかりました、今...どうすれば使用できますか。たとえば、関数getMsgがあるとしましょう。どのように呼び出しますか? $this->msg = $this->get('Msg');
ValRob 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.