Try the Demo

Magento Forum

   
Probleme beim Überschreiben eines Blocks in einem eigenen Modul (anonymizeIp)
 
Jörn-Bernd
Sr. Member
 
Total Posts:  153
Joined:  2008-09-21
 

Hallo zusammen,

um einen Magento Shop datenschutzkonform zu machen, möchte ich gerne die Ausgabe des Google Analytics Code im Magento Frontend um die Zeile “_gaq.push(["_gat._anonymizeIp"]);" erweitern. Dazu habe ich ein eigenes Modul erstellt, das die Funktion “_toHtml()” aus dem Block “/app/code/core/Mage/GoogleAnalytics/Block/Ga.php” überschreiben soll. Das klappt auch so weit ganz gut, nur leider wird der alte Code nicht ersetzt.

Dafür habe ich bisher folgendes gemacht:
- Unter “/app/code/local/” den Ordner “Kruse” angelegt
- im Ordner “Kruse” die Ordner “Block” und “etc” erstellt
- im Ordner “Block” die Datei “Ga.php” erstellt
- im Ordner “etc” die Datei “config.xml” erstellt
- im Ordner “/etc/modules” die Datei “Kruse_GoogleAnalytics.xml” erstellt

Die Dateien im Einzelnen:

“Ga.php”

class Kruse_GoogleAnalytics_Block_Ga extends Mage_GoogleAnalytics_Block_Ga
{
    
public function _toHtml()
    
{
        
if (!Mage::getStoreConfigFlag('google/analytics/active')) {
            
return '';
        
}

        $this
->addText('
<!-- BEGIN GOOGLE ANALYTICS CODE -->
<script type="text/javascript">
//<![CDATA[
    (function() {
        var ga = document.createElement(\'
script\'); ga.type = \'text/javascript\'; ga.async = true;
        ga.src = (\'
https:\' == document.location.protocol ? \'https://ssl\' : \'http://www\') + \'.google-analytics.com/ga.js\';
        
(document.getElementsByTagName(\'head\')[0] || document.getElementsByTagName(\'body\')[0]).appendChild(ga);
    
})();

    var 
_gaq _gaq || [];
    
_gaq.push(["_setAccount""' . $this->getAccount() . '"]);
    
_gaq.push(["_gat._anonymizeIp"]);
    
_gaq.push(["_trackPageview""'.$this->getPageName().'"]);
//]]>
</script>
<!-- END GOOGLE ANALYTICS CODE -->
        
');

        $this->addText($this->getQuoteOrdersHtml());

        if ($this->getGoogleCheckout()) {
            $protocol = Mage::app()->getStore()->isCurrentlySecure() ? '
https' : 'http';
            $this->addText('
<script src="'.$protocol.'://checkout.google.com/files/digital/ga_post.js" type="text/javascript"></script>);
        
}

        
return parent::_toHtml();
    
}
}

“config.xml”

<?xml version="1.0"?>
<config>
    <
modules>
        <
Kruse_GoogleAnalytics>
            <
version>0.1.0</version>
        </
Kruse_GoogleAnalytics>
    </
modules>

    <global>       
        <
blocks>
            <
googleanalytics>
                <
rewrite>
                    <
ga>Kruse_GoogleAnalytics_Block_Ga</ga>
                </
rewrite>
            </
googleanalytics>
        </
blocks>       
    </global>   
</
config>

“Kruse_GoogleAnalytics.xml”

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

Wo liegt mein Fehler?
Hat einer eine Idee?
Kann doch nur eine Kleinigkeit sein, oder?

 
Magento Community Magento Community
Magento Community
Magento Community
 
Alexander_Menk
Member
 
Total Posts:  64
Joined:  2011-06-27
Mainz, Germany
 

Die Datei muss “config.xml” heißen, nicht “confix.xml”. Hast du weiterhin den Cache geleert?

 Signature 

Viele Grüße,
Alexander Menk

iMi Gruppe | AddisMap.com

 
Magento Community Magento Community
Magento Community
Magento Community
 
wshqq
Sr. Member
 
Total Posts:  155
Joined:  2010-11-27
 

Ich würde mal sagen letzte Zeile in der Ga.php.

return parent::_toHtml();

Da ruft er ja das _toHtml(); des Überschrieben Blocks auf, der dann deinen Code wieder ersetzt.

Grüße

 
Magento Community Magento Community
Magento Community
Magento Community
 
Jörn-Bernd
Sr. Member
 
Total Posts:  153
Joined:  2008-09-21
 
Alexander_Menk - 21 September 2011 06:56 AM

Die Datei muss “config.xml” heißen, nicht “confix.xml”. Hast du weiterhin den Cache geleert?

Ups. Danke Alexander!
Die Datei heißt auch “config.xml”. Hab mich verschrieben. Hab´s korrigiert.
Cache ist geleert bzw. deaktiviert.

wshqq - 21 September 2011 07:02 AM

Ich würde mal sagen letzte Zeile in der Ga.php.

return parent::_toHtml();

Da ruft er ja das _toHtml(); des Überschrieben Blocks auf, der dann deinen Code wieder ersetzt.

Danke für deinen Hinweis.
Mit

return $this;

gibt es zwar keinen Fehler aber auch keinen Analytics Code.
Für weitere Hilfe bin ich sehr dankbar.

 
Magento Community Magento Community
Magento Community
Magento Community
 
wshqq
Sr. Member
 
Total Posts:  155
Joined:  2010-11-27
 

Nee

return $this;

Wird nicht funktionieren, du müsstest die Funktion _toHtml von dem Block aufrufen von dem der Ga.php Block erbt.
Die einfachste Möglichkeit ist, die originale Datei von “core” nach “local” inklusive dem Pfad zu kopieren und dort dann die Funktion zu ändern. Da brauchst halt kein Modul. 

Du kannst auch die Funktion _toHtml des Blocks Mage_Core_Block_Text (Ga.php ruft diese Funktion auf.) kopieren.

if (!$this->_beforeToHtml()) {
            
return '';
        
}

        
return $this->getText();

Unten in deine Funktion einfügen und schon funktionierts…

 
Magento Community Magento Community
Magento Community
Magento Community
 
Jörn-Bernd
Sr. Member
 
Total Posts:  153
Joined:  2008-09-21
 
wshqq - 21 September 2011 09:52 AM

Die einfachste Möglichkeit ist, die originale Datei von “core” nach “local” inklusive dem Pfad zu kopieren und dort dann die Funktion zu ändern.

Das es so einfach ist, habe ich gar nicht gewusst. Man lernt nie aus.
Danke für den Hinweis. Funktioniert!

wshqq - 21 September 2011 09:52 AM

Du kannst auch die Funktion _toHtml des Blocks Mage_Core_Block_Text (Ga.php ruft diese Funktion auf.) kopieren.

if (!$this->_beforeToHtml()) {
            
return '';
        
}

        
return $this->getText();

Unten in deine Funktion einfügen und schon funktionierts…

Funkioniert auch! Vielen dank für deine Hilfe!

Die fertige, angepasste “Ga.php” sieht dann so aus:

Ga.php

class Kruse_GoogleAnalytics_Block_Ga extends Mage_GoogleAnalytics_Block_Ga
{
    
public function _toHtml()
    
{
        
if (!Mage::getStoreConfigFlag('google/analytics/active')) {
            
return '';
        
}

        $this
->addText('
<!-- BEGIN GOOGLE ANALYTICS CODE -->
<script type="text/javascript">
//<![CDATA[
    (function() {
        var ga = document.createElement(\'
script\'); ga.type = \'text/javascript\'; ga.async = true;
        ga.src = (\'
https:\' == document.location.protocol ? \'https://ssl\' : \'http://www\') + \'.google-analytics.com/ga.js\';
        
(document.getElementsByTagName(\'head\')[0] || document.getElementsByTagName(\'body\')[0]).appendChild(ga);
    
})();

    var 
_gaq _gaq || [];
    
_gaq.push(["_setAccount""' . $this->getAccount() . '"]);
    
_gaq.push(["_gat._anonymizeIp"]);
    
_gaq.push(["_trackPageview""'.$this->getPageName().'"]);
//]]>
</script>
<!-- END GOOGLE ANALYTICS CODE -->
        
');

        $this->addText($this->getQuoteOrdersHtml());

        if ($this->getGoogleCheckout()) {
            $protocol = Mage::app()->getStore()->isCurrentlySecure() ? '
https' : 'http';
            $this->addText('
<script src="'.$protocol.'://checkout.google.com/files/digital/ga_post.js" type="text/javascript"></script>');
        }

        if (!$this->_beforeToHtml()) {
            return '
;
        
}

        
return $this->getText(); 
    
}

}

 
Magento Community Magento Community
Magento Community
Magento Community
 
mklooss
Member
 
Avatar
Total Posts:  70
Joined:  2011-01-04
 

deine geschrieben Variante ist nicht wirklich zu empfehlen, das Problem hier liegt dabei du überschreibst wichtige Teile.

bspw. Ecommerce Tracking und co…

besser wäre es die Methode “_getPageTrackingCode” zu überschreiben und es dort mit anfügen.

protected function _getPageTrackingCode($accountId{
        $return 
parent::_getPageTrackingCode($accountId);
        
$return .= '_gaq.push(["_gat._anonymizeIp"]);';
        return 
$return;
    
}

 Signature 

work: http://www.loewenstark.de | private: http://www.gunah.eu

 
Magento Community Magento Community
Magento Community
Magento Community
 
daboss1984
Jr. Member
 
Total Posts:  15
Joined:  2010-12-28
 

Also laut dem Google Analytics Test funktioniert der Code von Gunah leider nicht, der Parameter aip wird nicht gesetzt. Wenn man die beiden return-Zuweisungen umdreht, scheint\’s aber zu passen:

protected function _getPageTrackingCode($accountId{
        $return 
'_gaq.push([\"_gat._anonymizeIp\"]);';
        
$return .= parent::_getPageTrackingCode($accountId);

        return 
$return;
}

 
Magento Community Magento Community
Magento Community
Magento Community
Magento Community
Magento Community
    Back to top