1

誰かが私を助けてくれることを本当に願っています。

セッション変数に依存するカテゴリでバナーを提供できる必要がありますが、それを実行するコンポーネントが見つかりません。そこで、カテゴリパスを含むセッション変数に基づいてバナーを選択するために、Joomlaバナーコンポーネントを拡張したいと思います。

正しいセッション変数が正しく保存されています。

これを行うために、bannersモジュール.xmlに、セッション変数とセッション変数の名前を許可するオプションを追加しました。paramsこれは、他のモジュールパラメータとともにフィールド内のモジュールテーブルに正しく保存されています。

それから私は始めました

コンポーネント>バナー>com_banners>モデル>banners.php

がアセンブルされるgetListQuery場所に2行のコードを追加します。SQL彼らです:

$sess_vars  = $this->getState('filter.sess_vars');
$sess_vars_name = $this->getState('filter.sess_vars_name');

ただし、コンポーネントがすでに持っている変数を正常に取得できたとしても、両方の変数には何も含まれていません。間違いなく、私はどこか別の場所でも何かを変更する必要がありますが、どうしたらよいかわかりません。

どんな助けでも大歓迎です。

4

1 に答える 1

1
  1. 最初にすべきことは、コア ファイルをハックしないことです。コアをハッキングすると、組み込みの更新機能を使用して、Joomla がリリースする定期的なバグ修正やセキュリティ パッチを適用できなくなります。(たとえば最近リリースされた 2.5.9 バージョン)。

  2. むしろそれらのコピーを作成し、それを変更して、 のような別の名前にしますcom_mybanners。フォルダ名とエントリ ポイントファイルbanners.php(つまりmybanners.php、(フロント エンドの両方を複製して変更する必要があります。 )banners.xmlmybanners.php

    /components/com_banners//administrator/components/mybanners.php

  3. /modules/mod_banners/バナーの機能 (つまり、バナーはモジュールに表示される) のため、/modules/mod_banners/mod_banners.phpとを複製して変更する必要があり/modules/mod_banners/mod_banners.xmlます。mod_banners場所ごとに変わりmod_mybannersます。

  4. ジュムラで!コンポーネントstateは通常、JModel がインスタンス化されるときに設定されますが、この場合、コンポーネントは実際にはバナーの管理と、表示が によって処理されるクリックの記録に関するものmod_bannersです。mod_mybanners.phpそのため、操作対象のセッション変数を使用するコードを追加する必要があります。

    通常、モデルの状態が照会されると、JInputを介して変数を収集し、オブジェクトの状態に追加します。

protected function populateState()
{
    $jApp = JFactory::getApplication('site');

    // Load state from the request.
    $pk = $jApp->input->get('id',0,'INT');
    $this->setState('myItem.id', $pk);

    $offset = $jApp->input->get('limitstart',0,'INT');
    $this->setState('list.offset', $offset);

    // Load the parameters.
    $params = $app->getParams();
    $this->setState('params', $params);

    // Get the user permissions
    $user       = JFactory::getUser();
    if ((!$user->authorise('core.edit.state', 'com_mycomponent')) &&  (!$user->authorise('core.edit', 'com_mycomponent')))
    {
        $this->setState('filter.published', 1);
        $this->setState('filter.archived', 2);
    }
}

メソッドは、populateState()状態がメソッドによって読み取られるときに呼び出されgetStateます。

/components/com_banners/models/banner.phpこれは、上記の例と同様に、変数をオブジェクトの状態にキャプチャするために、のコピーを変更する必要があることを意味します。

そこからはすべて独自のコードです。

この情報はすべて、Joomla Doc のサイトの「モデル ビュー コントローラーの開発」チュートリアルで見つけることができます。

于 2013-02-08T00:44:09.403 に答える