2014-02-04 4 views
1

Прежде всего, извините за длинный пост. Я просто не могу работать после этого.Magento checkout success observer не работает правильно

Я пытаюсь отобразить код отслеживания с помощью наблюдателя, который смотрит на событие успеха. Я включил журналы систем и исключений, и я не вижу никаких ошибок. У меня может быть ошибка с заглавностью/синтаксисом в моей конфигурации. Это мой первый модуль, и косые черты назад, потому что я копирую и вставляю их с рабочего стола. Here is a zip of the files (only 6) Вот код:

\ приложение \ и т.д. \ модули \ Capps_Cact.xml

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Capps_Cact> 
      <active>true</active> 
      <codePool>local</codePool> 
     </Capps_Cact> 
    </modules> 
</config> 

приложение \ код \ Local \ Капс \ CACT \ и т.д. \ config.xml

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Capps_Cact> 
      <version>1.0.0</version> 
     </Capps_Cact> 
    </modules> 
    <frontend> 
     <layout> 
      <updates> 
       <Capps> 
        <file>cact.xml</file> 
       </Capps> 
      </updates> 
     </layout> 
    </frontend> 
    <global> 
     <blocks> 
      <cappscact> 
       <class>Capps_Cact_Block</class> 
      </cappscact> 
     </blocks> 
     <models> 
      <cappscact> 
       <class>Capps_Cact_Model</class> 
      </cappscact> 
     </models> 
    </global> 
    <events> 
      <checkout_onepage_controller_success_action> 
       <observers> 
        <Capps_Cact_order_success> 
         <class>capps_cact/observer</class> 
         <method>setCappsCactOnOrderSuccessPageView</method> 
        </Capps_Cact_order_success> 
       </observers> 
      </checkout_onepage_controller_success_action> 
      <checkout_multishipping_controller_success_action> 
       <observers> 
        <Capps_Cact_order_success> 
         <class>capps_cact/observer</class> 
         <method>setCappsCactOnOrderSuccessPageView</method> 
        </Capps_Cact_order_success> 
       </observers> 
      </checkout_multishipping_controller_success_action> 
    </events> 
</config> 

приложение \ код \ Local \ Капс \ CACT \ Model \ observer.php

<?php 
class Capps_Cact_Model_Observer 
{ 

    /** 
    * Add order information into CC block to render on checkout success pages 
    * 
    * @param Varien_Event_Observer $observer 
    */ 
    public function setCappsCactOnOrderSuccessPageView(Varien_Event_Observer $observer) 
    { 
     $orderIds = $observer->getEvent()->getOrderIds(); 
     if (empty($orderIds) || !is_array($orderIds)) { 
      return; 
     } 
     $block = Mage::app()->getFrontController()->getAction()->getLayout()->getBlock('capps_cact'); 
     if ($block) { 
      $block->setOrderIds($orderIds); 
     } 
    } 
} 

приложение \ код \ Local \ Капс \ CACT \ Block \ Track.php

<?php 

class Capps_Cact_Block_Track extends Mage_Core_Block_Template 
{ 
    /** 
    * Render information about specified orders and their items for Channel Advisor 
    * 
    * @link http://code.google.com/apis/analytics/docs/gaJS/gaJSApiEcommerce.html#_gat.GA_Tracker_._addTrans 
    * @return string 
    */ 
    protected function _getCATrackingCode() 
    { 
    $orderIds = $this->getOrderIds(); 
    if (empty($orderIds) || !is_array($orderIds)) { 
      echo ('It worked its'); 
      return; 
     } else { 
      echo ('did that work'); 
      $orderId = Mage::getSingleton('checkout/session')->getLastRealOrderId(); 
      $order = Mage::getModel('sales/order')->loadByIncrementId($orderId); 
      echo ('<script type="text/javascript"> 
      '); 
      echo ('var _caq = _caq || []; 
      '); 
      echo ('var products = []; 
      '); 
      $Id = ''; 
      $Qty = ''; 
      $Price = ''; 
      $items = $order->getAllItems(); 
      foreach($items as $item){ 
       echo ('products.push({Sku: \''); 
       echo $Id .= $item->getSku(); 
       echo ("', "); 
       echo ('UnitPrice: \''); 
       echo $Price .= $item->getPrice(); 
       echo ("', "); 
       echo ('Quantity: \''); 
       echo $Qty .= $item->getQtyOrdered(); 
       echo ('\'}); 
       '); 
       $Id = ''; 
       $Qty = ''; 
       $Price = ''; 
       } 
      $separateones = substr($separateones, 0,-1); 
      echo ('_caq.push(["Order", {OrderId: \''); 
      echo $order->getIncrementId(); 
      echo ('\', Revenue: \''); 
      echo $order->getSubtotal(); 
      echo ('\', CurrencyCode: \'USD\', Products: products}]); 
      '); 
      echo ('</script>'); 
     } 
    } 
} 

приложение \ дизайн \ интерфейс \ базы \ умолчанию \ расположение \ cact.xml

<?xml version="1.0"?> 
<layout version="1.0.0"> 

<!-- 
Default layout, loads most of the pages 
--> 

    <default> 
     <!-- Mage_GoogleAnalytics --> 
     <reference name="after_body_start"> 
      <block type="cappscact/track" name="capps_cact" as="capps_cact" template="Capps/Cact.phtml" /> 
     </reference> 
    </default> 
</layout> 

приложение \ дизайн \ оболочка \ базы \ умолчанию \ шаблон \ Капс \ Cact.phtml

<!-- Begin Channel Advisor Tracking Code --> 
    <?php echo $this->_getCATrackingCode(); ?> 
<!-- End Channel Advisor Tracking Code --> 

ответ

3

Основные проблемы, которые я вижу, что узел <events> в config.xml находится не в нужном месте. Пожалуйста, переместите <events> узел внутри <frontend> узел. После ясного боя.

Я не уверен, но я думаю, что это

protected function _getCATrackingCode() 

не будет работать.

Вы не можете вызвать методы файлов шаблонов, которые защищены. Сделайте это общедоступным.

+0

Исправлено, что спасибо! но, к сожалению, код не срабатывает правильно. Как только я разместил заказ, я подумал, что наблюдатель загрузит $ orderIds, а затем моя функция пропустит первый возврат и эхо. Это не так. –

+0

Первое эхо справа после аргумента if и перед возвратом отображается на моем веб-сайте. Поэтому я «знаю», что функция запускается и создает выход на моем сайте. –

+0

Отладка вашего наблюдателя, чтобы убедиться, что 'if ($ block)' is true. –

Смежные вопросы