Posting in the Magento forums has been disabled pending the implementation of a new and improved forum solution which should better serve the community.

For new questions please post at magento.stackexchange.com, the community-run support site for the Magento community. We will be providing updates on the new forum solution soon. For questions or concerns please email community@magento.com.

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:  65
Joined:  2011-06-27
Mainz, Germany
 

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

 
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 05: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 06: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 08: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 08: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:  74
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;
    
}
 
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