web-dev-qa-db-ja.com

com_weblinksからコントローラーにカスタムコードを追加する

コンポーネントcom_weblinksがtask = weblink.goで外部サイトにジャンプする前に、アナリティクストラッキングコードを追加したいと思います。

問題は、ジャンプがcontroller.phpファイルにあることです。これを上書きすることはできません。

次の更新後に保存するコードをコントローラーに変更/追加するにはどうすればよいですか?

1
Lovntola

Weblinksのしくみを見ると、weblinks.goが関与するのは、各リンクのヒット数をカウントするオプションを選択していて、view.html.phpがこのスタイルのリンクを表示する場合のみであることがわかります。

$item->link = JRoute::_('index.php?option=com_weblinks&task=weblink.go&id=' . $item->id);

default_items.phpの88行目

独自のプラグインまたはre-replacerのようなプラグインを介して作成されたリンクを「インターセプト」して、オプションとタスクの値、またはリンク全体を変更して、作成したコードの一部を指すようにすることをお勧めしますリンク名を分析測定プロトコルに追加します。プラグインはおそらくonContentBefore何かのイベントを使用して変更を加えます。

エンドユーザーがリンクをクリックすると、最初にコードに移動し、処理をweblinksに戻し、weblinks.goを介してビットを実行してから、リンクされたサイトにエンドユーザーを誘導します。

上記の方法でプロセスをインターセプトすると、コードにアクセスしたときにIDのみがあり、実際のURLはないため、IDをクエリして関連するURLを取得し、Googleに渡すことができるようにする必要があります。

または、オーバーライドcategory/view/tmpl/default_item.phpを作成して、IDとURLの両方を使用してコードに渡すリンクを表示し、onContentBeforeプラグインやre-replacerタイプの関数を含まないようにすることもできます。また、Webリンクのヒット数をカウントしたくない場合は、weblinks.goにアクセスする必要はなく、IDも必要ありません。

1
Irata