3

私の意図は、サードパーティの JavaScript (Google アナリティクス、optimizely、pricegrabber など) を onepage success のフッターに挿入して、複数のチャネルを通じてコン​​バージョンを追跡することです。

local.xml 内のチェックアウト成功ノード内のフッター参照にブロックを追加することでこれを達成し、すべてが適切に機能します。

私の質問は、効率と拡張性に関するものです。

すべてのブロックを単一のブロック参照に結合し、さまざまな関連モデルへの単一の呼び出しに作用するさまざまなメソッドを使用して、各ブロックの JavaScript への挿入に必要なデータを提供する方がよいと思いました。コンバージョン トラッキング スクリプト。

コンバージョン トラッキングが依存する可能性のある一般的なデータの例 (疑似): Order ID 、Order Total、Order.LineItem.Name(foreach) など

現在、スクリプトごとに適切なモデルを呼び出し、顧客の最後の注文 ID を負荷値として渡し、get() を呼び出して戻り値を変数に割り当て、データを反復処理して値を一致させました。特定のサード パーティ サービスの期待と共に。

チェックアウトが完了したら、すべてのデータを 1 回プルする必要があります。

以下は、チェックアウト成功のフッターに読み込まれるコンバージョン トラッキング テンプレート ファイルの 1 つの例です。

$order = Mage::getModel('sales/order')->loadByIncrementId(Mage::getSingleton('checkout/session')->getLastRealOrderId());
$amount = number_format($order->getGrandTotal(),2);
$customer = Mage::helper('customer')->getCustomer()->getData();
?>

<script type="text/javascript">
    popup_email = '<?php echo($customer['email']);?>';
    popup_order_number = '<?php echo $this->getOrderId() ?>';
    </script>
<!-- PriceGrabber Merchant Evaluation Code -->
<script type="text/javascript" charset="UTF-8" src="https://www.pricegrabber.com/rating_merchrevpopjs.php?retid=<something>"></script>
<noscript><a href="http://www.pricegrabber.com/rating_merchrev.php?retid=<something>" target=_blank>
    <img src="https://images.pricegrabber.com/images/mr_noprize.jpg" border="0" width="272" height="238" alt="Merchant Evaluation"></a></noscript>
<!-- End PriceGrabber Code -->

このようなコードを 1 つだけ持つことは大したことではありませんが、さまざまなサードパーティ サービスで同様のことを行っています。

Pricegrabber は、より単純な例の 1 つです。より高度な追跡サービスでは、すべての製品名、ID、価格、カテゴリ、注文 ID などのコンマ区切りのリストが必要です。

すべてをより管理しやすくしたいので、次のことを行うという私の考えは次のとおりです。

  1. すべてのテンプレート ファイルを 1 つのファイルに結合する
  2. データを変換テンプレートに配信するヘルパー クラスまたはライブラリを開発する

目標に含まれるもの

  1. 拡張性
  2. 最小限のモデル呼び出し
  3. 最小限のメソッド呼び出し

質問 1. 魔法使いのヘルパーは最善の方法ですか? 2.「ヘルパー」クラスに推奨できるデザイン パターンはありますか? 3. 選択したデザイン パターンがこのインスタンスに最適なのはなぜですか?

4

2 に答える 2

0

Magento を理解するのはとても楽しそうです。Alan Storm のブログと magento ナレッジ ベースから始めることをお勧めします。

現実には、既に設計されたフレームワークの上に別のパターンは必要なく、最も簡単な方法と保守可能な方法は既存のパターンに従うことであり、あなたの場合は次のようになります。

  • あなたの延長を作る
  • テンプレートをサービス プロバイダーごとに作成する
  • プロバイダーごとにレイアウト記述子を作成する
  • それらを 1 つのブロックで結び付けるか、複数のブロックを使用します (より管理しやすくするため)。
  • Magento がブロック出力のキャッシュに由来し、レイアウト記述子とハンドラーがデフォルトでキャッシュされる場合、パフォーマンスが最も向上します。

したがって、何をキャッシュできるかを考えてください * css、js は縮小および圧縮できます * 必要なテンプレートには新しい情報が含まれている可能性が高く、注文ごとに異なるため、それらをキャッシュできず、サービス プロバイダーに送信する新しいデータが必要です

新しいビジネスロジックを追加しない場合は、出力メソッドをブロックでコーディングすることをお勧めします

于 2012-12-06T11:01:41.510 に答える
0

Google アナリティクスを拡張するカスタム モジュールを作成できます

/app/code/local/MageIgniter/SiteTracker/etc/config.xml 内

<config>
    <modules>
        <MageIgniter_SiteTracker>
            <version>0.1.0</version>
        </MageIgniter_SiteTracker>
    </modules>
    <global>
        <blocks>
            <googleanalytics>
                <rewrite>
                    <ga>MageIgniter_SiteTracker_Block_CustomTracking</ga>
                </rewrite>
            </googleanalytics>
        </blocks>
    </global>
</config>

次に、app/code/core/Mage/GoogleAnalytics/Block/Ga.php を参照して、必要に応じてこのメソッドを変更します。

/app/code/local/MageIgniter/SiteTracker/Block/CustomTracking.php 内

class MageIgniter_SiteTracker_Block_CustomTracking extends Mage_GoogleAnalytics_Block_Ga
{
    protected function _getOrdersTrackingCode(){
       ....
    }
}
于 2012-12-06T10:52:42.080 に答える