これは、顧客が利用可能な在庫レベルを超えて注文しようとするたびに、Google アナリティクス追跡イベントを送信するようにする方法です。
最初のコピー: app/code/core/Mage/CatalogInventory/Model/Stock/Item.php
宛先: app/code/local/Mage/CatalogInventory/Model/Stock/Item.php
コア ファイルを変更しないようにします。
app/code/local/Mage/CatalogInventory/Model/Stock/Item.phpにこの関数を追加します
public function notifyOutOfStock($productId){
$session = Mage::getSingleton('checkout/session');
//Initialise as empty array, or use existing session data
$outOfStockItems = array();
if ($session->getOutOfStock()){
$outOfStockItems = $session->getOutOfStock();
}
try {
$product = Mage::getModel('catalog/product')->load($productId);
$sku = $product->getSKu();
if($sku){
//Add the current sku to our out of stock items (if not already there)
if(! isset($outOfStockItems[$sku]) ) {
$outOfStockItems[$sku] = 0;
}
}
} catch (Exception $e){
//Log your error
}
Mage::getSingleton('checkout/session')->setOutOfStock($outOfStockItems);
}
その同じファイルには、checkQuoteItemQtyという別の関数があります。その関数内で、 $this->notifyOutOfStock($this->getProductId());を使用して新しい関数を呼び出す必要があります。各エラー メッセージを設定した直後、return ステートメントの前。
そう:
public function checkQuoteItemQty($qty, $summaryQty, $origQty = 0)
{
....
if ($this->getMinSaleQty() && ($qty) < $this->getMinSaleQty()) {
$result->setHasError(true)
->setMessage(
$_helper->__('The minimum quantity allowed for purchase is %s.', $this->getMinSaleQty() * 1)
)
->setQuoteMessage($_helper->__('Some of the products cannot be ordered in requested quantity.'))
->setQuoteMessageIndex('qty');
//** Call to new function **
$this->notifyOutOfStock($this->getProductId());
return $result;
}
.....
->setQuoteMessageIndex('qty');
//** Call to new function **
$this->notifyOutOfStock($this->getProductId());
return $result;
.....
これにより、チェックアウト セッションで製品 SKU が配列に追加されます。これは、ページが読み込まれて「在庫不足」の通知が表示された直後に、テンプレート ファイル内のその情報にアクセスできることを意味します。
したがって、テンプレート ファイルの 1 つに、必要な JavaScript をレンダリングするためのコードを追加できます。すべてのページに読み込まれるため、header.phtml を選択しました。(ユーザーは、商品ビュー ページだけでなく、カート ページでも商品の数量をカートに追加できます)。
アプリ/デザイン/フロントエンド/カスタム名/デフォルト/テンプレート/ページ/html/header.phtml
コードの一番下のどこかにこれを追加します:
<!-- GA tracking for out of stock items -->
<script>
try {
<?php
$session = Mage::getSingleton('checkout/session');
if ($session->getOutOfStock()){
$outOfStockItems = $session->getOutOfStock();
foreach($outOfStockItems as $sku=>$value) {
if($value==0){
//Render the GA tracking code
echo "_gaq.push(['_trackEvent', 'AddToCart', 'ProductQtyNotAvailable', '".$sku."']); \r\n";
//Set it to 1 so we know not to track it again this session
$outOfStockItems[$sku] = 1;
}
}
//Update the main session
Mage::getSingleton('checkout/session')->setOutOfStock($outOfStockItems);
}
?>
}
catch(err) {
//console.log(err.message);
}
</script>
これがうまく機能することを確認できます。私の意見では、他の分析と一緒に分析できるため、メールや RSS フィードよりも優れています。