hmmm… ich und module… tja… das kommt davon wenn ein ex-graphiker meint er codet mal einfach so vor sich hin…
generell läuft es ja, aber aus irgendeinem Grund wird das Modul mehrfach aufgerufen… Somit kommt es natürlich zu einem nicht gewünschten Ergebnis…
So wird der toBasket Event 4-6 mal getracked, nur um dann vom letzten “cl=details” call überschrieben zu werden…
wo/wie kann denn am besten gesteuert werden, dass ein Modul / Klasse nur einmal aufgerufen wird??
Anbei mal der Code des Moduls:
class onefacebookpixelconversion_oxoutput extends onefacebookpixelconversion_oxoutput_parent
{
/**
* returns config parameter for facebook Conversion Pixel ID
* @return int
*/
public function getFacebookPixelID()
{
// check if global config was set
if(oxRegistry::getConfig()->getConfigParam( 's132onefacebookPixelID'))
{
return oxRegistry::getConfig()->getConfigParam( 's132onefacebookPixelID');
} else return '0';
}
/**
* returns current/active page controller (aka view)
* @return oxUBase
*/
protected function _getViewOrder()
{
return oxRegistry::getConfig()->getActiveView();
}
/**
* runs function _setFacebookConversionTagByViewObject by active controller (_getViewOrder())
* @return void
*/
protected function _setFacebookConversionTagByViewObject()
{
$oViewObject = $this->_getViewOrder();
// Initialize --> will only be set if a "special" page is called
$oneFacebookConversionPixelReturnValue ='';
// set class name of current page
$oneCurrentPage = $oViewObject->getClassName();
// Details Page = ViewContent
// switch values
switch($oneCurrentPage)
{
case 'search':if(oxRegistry::getConfig()->getConfigParam( 's132onefacebookSearch')){$oneFacebookConversionPixelReturnValue='fbq(\'track\', \'Search\');';};break;
case 'order':if(oxRegistry::getConfig()->getConfigParam( 's132onefacebookInitiateCheckout')){$oneFacebookConversionPixelReturnValue='fbq(\'track\', \'InitiateCheckout\');';};break;
case 'thankyou':if(oxRegistry::getConfig()->getConfigParam( 's132onefacebookPurchase')){$oOrder = $oViewObject->getOrder();$oneFacebookConversionPixelReturnValue='fbq(\'track\', \'Purchase\', {value: \''.$oOrder->getTotalOrderSum().'\', currency: \'EUR\'});';};break;
case 'payment':if(oxRegistry::getConfig()->getConfigParam( 's132onefacebookAddPaymentInfo')){$oneFacebookConversionPixelReturnValue='fbq(\'track\', \'AddPaymentInfo\');';};break;
case 'contact':if(oxRegistry::getConfig()->getConfigParam( 's132onefacebookLead')){$oneFacebookConversionPixelReturnValue='fbq(\'track\', \'Lead\');';};break;
}
// TO BASKET FUNCTION
$oNewItem = oxRegistry::getSession()->getVariable( '_newitem' );
if($oNewItem || $oneCurrentPage == 'details')
{
if($oNewItem)
{$oneFacebookConversionPixelReturnValue='fbq(\'track\', \'AddToCart\'';}
else
{$oneFacebookConversionPixelReturnValue='fbq(\'track\', \'ViewContent\'';}
if(oxRegistry::getConfig()->getConfigParam( 's132onefacebookViewContent') && oxRegistry::getConfig()->getConfigParam( 's132onefacebookShowProductIDs'))
{
$oProduct = $oViewObject->getProduct();
$oCategory = $oViewObject->getActCategory();
$oneFacebookConversionPixelReturnValue.=',{content_type: \'product\',content_ids: [\''.$oProduct->oxarticles__oxartnum->value.'\'],content_name: \''.$oProduct->oxarticles__oxtitle->value.'\',content_category: \''.$oCategory->oxcategories__oxtitle->value.'\',value: \''.$oProduct->oxarticles__oxprice.'\',currency: \'EUR\'});';
}
else
$oneFacebookConversionPixelReturnValue.=');';
}
if($oNewItem) {echo("<script>".$oneFacebookConversionPixelReturnValue."</script>");}
return $oneFacebookConversionPixelReturnValue;
}
/**
* returns HTML string with facebook conversion pixel javascript source and params
* @return string
*/
public function getFacebookConversionPixelTrackingCode()
{
$sFacebookConversionPixelCode = '
<script>
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version=\'2.0\';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
document,\'script\',\'//connect.facebook.net/en_US/fbevents.js\');
fbq(\'init\', \''.$this->getFacebookPixelID().'\');
fbq(\'track\', "PageView");
'.$this->_setFacebookConversionTagByViewObject().'
</script>
<noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id='.$this->getFacebookPixelID().'&ev=PageView&noscript=1" alt="facebookpixel"/></noscript>
';
return $sFacebookConversionPixelCode;
}
/**
* appends facebook conversion pixel tracking javascript source right after body
* @param $sOutput
* @return mixed
*/
public function oneFacebookConversionPixelCode( $sOutput )
{
$sFacebookConversionPixelTrackingCode = $this->getFacebookConversionPixelTrackingCode();
$sOutput = str_ireplace('id="body">', "id=\"body\">
{$sFacebookConversionPixelTrackingCode}", ltrim($sOutput));
return $sOutput;
}
/**
* @param $sValue
* @param $sClassName
* @return mixed
*/
public function process($sValue, $sClassName)
{
$sValue = parent::process($sValue, $sClassName);
$sValue = $this->oneFacebookConversionPixelCode( $sValue);
return $sValue;
}
}