Magento Controller Core Controller überschreiben sowei Model, Helper und Block dateien

Gepostet am November 3, 2012

Überschreiben von Block, Helper und Model Dateien

Grundsätzlich ist das überschreiben von Block, Helper oder Model Dateien im Core recht einfach, dazu kopiert man die zu überschreibende Datei einfach von Beispielsweise „app/code/core/Mage/was-auch-immer/block/datei.php“ in den Ordner „app/code/local/Mage/was-auch-immer/block/datei.php“ und führt die Entsprechenden Änderungen in der Datei durch.

Controller überschreiben

Bei Controllern ist das ganze nicht so einfach und man muss eine Extension erstellen, welche diesen Controller und Funktionen darin überschreibt. Dies möchte ich am Beispiel PayPal Controller durchführen. Im folgenden Beispiel wird eine E-Mail versendet sobald ein Zahlungsabbruch oder Fehler erfolg.

1. Öffne folgendes Verzeichnis:
app/code/local/

2. Lege folgendes Verzeichnis an (Herstellername und Modulname können selbst gewählt werden, müssen aber dann im folgenden Code auch ersetzt werden, dabei muss immer auf Groß und Kleinschreibung geachtet werden!):
im Beispiel nenne ich das Modul „Rewrite“ und den Hersteller einfach „Herstellername“:

app/code/local/Herstellername
app/code/local/Herstellername/Rewrite
app/code/local/Herstellername/Rewrite/controllers
app/code/local/Herstellername/Rewrite/etc

3. Dateien anlegen
Der Name des Controllers muss gleich dem Controller sein, welchen wir überschreiben möchten!
Die config Datei wird für jedes Modul benötigt!

app/code/local/Herstellername/Rewrite/controllers/StandardController.php
app/code/local/Herstellername/Rewrite/etc/config.xml

4. StandardController.php mit Inhalt füllen
Hier wird der Originale Controller eingefügt (include_once) und die zu überschreibende Funktion (Action) mit dem gleichen Funktionsnamen angelegt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
require_once Mage::getModuleDir('controllers', 'Mage_Paypal').DS.'StandardController.php';
 
class Herstellername_Rewrite_StandardController extends Mage_Core_Controller_Front_Action {
 
	public function _sendErrorEmail($order_id) {
		// Transactional Email Template's ID
		$templateId = 148;
 
		// Set sender information          
		$senderName = Mage::getStoreConfig('trans_email/ident_support/name');
		$senderEmail = Mage::getStoreConfig('trans_email/ident_support/email');    
		$sender = array('name' => $senderName,
					    'email' => $senderEmail);
 
		// Set recepient information
		$customer = Mage::getSingleton('customer/session')->getCustomer();
		$_email = $customer->getEmail();
		$_name = $customer->getName();
		$recepientEmail = $_email;
		$recepientName = $_name ;       
 
		// Get Store ID    
		$storeId = Mage::app()->getStore()->getId();
 
		// Set variables that can be used in email template
		$vars = array('customerName' => $_name,
				  'incrementId' => $order_id);
 
		$translate  = Mage::getSingleton('core/translate');
 
		// Send Transactional Email
		Mage::getModel('core/email_template')
			->sendTransactional($templateId, $sender, $recepientEmail, $recepientName, $vars, $storeId);
 
		$translate->setTranslateInline(true);   
	}
 
	public function cancelAction()
    {
        $session = Mage::getSingleton('checkout/session');
        $session->setQuoteId($session->getPaypalStandardQuoteId(true));
        if ($session->getLastRealOrderId()) {
            $order = Mage::getModel('sales/order')->loadByIncrementId($session->getLastRealOrderId());
            if ($order->getId()) {
                $order->cancel()->save();
            }
        }
        $this->_sendErrorEmail($session->getLastRealOrderId());
        $this->_redirect('checkout/cart');
    }
 
}
?>

5. config.xml mit Inhalt füllen
Die config.xml enthält im ersten Teil „modules“ allgemeine Modulinfos und im zweiten Teil „frontend -> routers“ wird angewiesen den „Mage_PayPal_StandardController“ durch den in „Herstellername_Rewrite“ gespeicherten Controller zu überschreiben.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0"?>
<config>
  <modules>
    <Herstellername_Rewrite>
      <version>0.1.0</version>
    </Herstellername_Rewrite>
  </modules>
  <frontend>
    <routers>
 
	  <paypal>
	    <use>standard</use>
		<args>
		  <modules>
		    <Herstellername_Rewrite before="Mage_PayPal_StandardController">Herstellername_Rewrite</Herstellername_Rewrite>
		  </modules>
		</args>
	  </paypal>
 
    </routers>
  </frontend>
</config>

6. am Ende die Extension ins System einbinden
Nun binden wir die erstellte Extension in das System ein. Dazu muss eine xml Datei erstellt werden die grundsätzlich nur die Position der Extension enthält und diese aktiviert.

Dazu gehen wir in das Verzeichnis „app/etc/modules“ und legen die Datei „Herstellername_Rewrite.xml“ an.

Inhalt:

1
2
3
4
5
6
7
8
9
<?xml version="1.0"?>
<config>
  <modules>
    <Herstellername_Rewrite>
      <codePool>local</codePool>
      <active>true</active>
    </Herstellername_Rewrite>
  </modules>
</config>

Tags: ,

Leave a Reply

 

Posts of Current Category



Facebook: