Payment-Modul “Rechnung” – Teil1 (Basismodul)

Bei einem unsere Kunden will der Paymentfilter einfach nicht – aber der Kunde möchte die Zahlungsart Rechnungen für bestimmte Kundengruppen. Aus diesem Grund bleibt mir eine Entwicklung eines eigenen Payment-Moduls für Magento nicht erspart.
In Teil1 werden wir ein Rechnungsmodul mit minimum an Code erstellen. Dieses Modul werden wir dann Step by Step erweitern. Die Erklärungen schreibe ich als Kommentare in den Code.
1. Datei app\etc\modules\Mxperts_Invoice.xml
<?xml version="1.0"?>
<config>
<modules>
<!-- Magento-Modul definieren -->
<Mxperts_Invoice>
<active>true</active>
<!-- Daten sind in codePool\Mxperts\Invoice (app\code\local\Mxperts\Invoice) zu finden -->
<codePool>local</codePool>
<!-- Abhaengigkeiten fure die korrekte Ausfuehrung des Moduls -->
<depends>
<Mage_Payment />
</depends>
<!-- Versionierung, Wichtig fuer Datenbankupdates!!! -->
<version>0.1.0</version>
</Mxperts_Invoice>
</modules>
</config>
Mit dieser Datei registrieren wir unser Modul in Magento und können es unter System->Konfiguration->Erweitert komplett deaktivieren oder aktivieren.
2. Datei app\code\local\Mxperts\Invoice\etc\config.xml
<?xml version="1.0"?>
<config>
<global>
<!-- Definition des Models/Alias - Mage::getModel('invoice/...') -->
<models>
<invoice>
<class>Mxperts_Invoice_Model</class>
</invoice>
</models>
<!-- Definition der Ressourcen -->
<resources>
<!-- Setup,Write,Read Ressourcen definbieren. (Nur Core-Funktionen) -->
<invoice_setup>
<setup>
<!-- Modul welches verwendet werden soll -->
<module>Mxperts_Invoice</module>
</setup>
<connection>
<use>core_setup</use>
</connection>
</invoice_setup>
<invoice_write>
<use>core_write</use>
</invoice_write>
<invoice_read>
<use>core_read</use>
</invoice_read>
</resources>
</global>
<!-- Standardeinstellung des Moduls -->
<default>
<payment>
<invoice>
<active>0</active>
<model>invoice/invoice</model>
<order_status>1</order_status>
<title>Rechnung</title>
<allowspecific>0</allowspecific>
</invoice>
</payment>
</default>
</config>
Die system.xml stellt die Basis-Konfiguration für unser Modul. In der config.xml folgt nun die Konfiguration für das Magento-Backend.
3. Datei app\code\local\Mxperts\Invoice\etc\system.xml
<?xml version="1.0"?>
<config>
<sections>
<!-- Backend TAB payment -->
<payment>
<groups>
<!-- invoice Fieldset -->
<invoice translate="label" module="payment">
<!-- Titel im Backend -->
<label>Invoice</label>
<frontend_type>text</frontend_type>
<sort_order>1</sort_order>
<!-- In der Standarkonfiguration anzeigen -->
<show_in_default>1</show_in_default>
<!-- In der Websitekonfiguration anzeigen -->
<show_in_website>1</show_in_website>
<!-- Nicht in der Storekonfiguration anzeigen -->
<show_in_store>0</show_in_store>
<!-- Nun folgend die Defenition der Backend-Eingabefelder -->
<fields>
<active translate="label">
<!-- Bezeichnung des Eingabefeldes -->
<label>Enabled</label>
<!-- Eingabetyp (text,select,mutliselect, text, texarea, etc...) -->
<frontend_type>select</frontend_type>
<!-- Model welches die Inhalte dere Auswahl liefert -->
<source_model>adminhtml/system_config_source_yesno</source_model>
<!-- Position im Backend -->
<sort_order>1</sort_order>
<!-- Kommentar -->
<comment><![CDATA[<b>Aktivieren</b> oder <b>Deaktivieren</b> des Moduls.]]></comment>
<!-- Anzeige der jeweiligen Konfig.-Bereiches -->
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>0</show_in_store>
</active>
<title translate="label">
<label>Title</label>
<frontend_type>text</frontend_type>
<sort_order>2</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>0</show_in_store>
</title>
<order_status translate="label">
<label>New order status</label>
<frontend_type>select</frontend_type>
<source_model>adminhtml/system_config_source_order_status</source_model>
<sort_order>4</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>0</show_in_store>
</order_status>
<sort_order translate="label">
<label>Sort order</label>
<frontend_type>text</frontend_type>
<sort_order>5</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>0</show_in_store>
</sort_order>
</fields>
</invoice>
</groups>
</payment>
</sections>
</config>
Viele benutzen bei Ihrer Backendkonfiguration das Comment-Tag nicht. Dies möchte ich hier aber zeigen, da man damit dem Benutzer Hilfestellung geben kann. Durch die Verwendung von CDATA kann man auch HTML-Tags verwenden.
Im Backend sieht unser Modul dann wie folgt aus:

Die Daten der einzelnen Eingabefelder, sowie die Aktivierung des Moduls, werden in der Tabelle core_config_data ihrer Shopdatenbank gespeichert. Beim Entfernen des Moduls sollte man darauf achten, dass auch diese Einträge aus der Datenbank entfernt werden. Anbei ein Screenshot einer SQL-Abfrage die alle Werte mit dem Keyword invoice ausgibt.

Nachdem wir die Konfiguration vorgenommen haben, wird nun noch die Klasse für unser Payment-Modul erstellt.
4. Datei app\code\local\Mxperts\Invoice\Model\Invoice.php
<?php
class Mxperts_Invoice_Model_Invoice extends Mage_Payment_Model_Method_Abstract
{
// Eindeutiger Bezeichner
protected $_code = 'invoice';
// Ausgabe des Titels aus dem Backend
public function getCODTitle()
{
return $this->getConfigData('title');
}
}
Das Modul sollte nun auch im Backend verfügbar sein.

Download des Moduls: mxperts_invoice_teil1.zip
In den nächsten Teilen werden wir unser Payment-Modul noch um einige Features erweitern.
Bis dahin viel Spaß beim Testen.
Johannes Teitge
Wow, ihr seid die besten! Genau das, was mir noch fehlte…
War diese Antwort hilfreich?
LikeDislikeDanke für das tutorial!
War diese Antwort hilfreich?
LikeDislikeHallo, danke für die genaue Beschreibung
Ich habe jetzt versucht den Modul um Form und Info Blocks zu erweitern in dem ich in dem Template Ordner follgende Dateien erstellt hab
app\design\frontend\default\default\template\invoice\form.phtml und
app\design\frontend\default\default\template\invoice\info.phtml
diese enthalten standart Code (kopiert von einem Mage Module) dann habe ich in
app\code\local\Mxperts\Invoice\Block Ordner die ensprechenden Dateien, die die Templates setzen und anschließend in der config.xml
Mxperts_Invoice_Block
nun sobald ich in der Model Klasse die formBlockType und die infoBlockType setze
protected $_code = ‘invoice’;
protected $_formBlockType = ‘invoice/form’;
protected $_infoBlockType = ‘invoice/info’;
bekomm ich einen Fehler
Fatal error: Class ‘Mage_Invoice_Block_Info’ not found in /…/magento/app/code/core/Mage/Payment/Helper/Data.php on line 156
er versucht die Block Klassen aus dem Mage Kern zu nehmen. Eigentlich müsste der doch die Mxperts_Invoice_Block_Info nehmen, da ich das in der config.xml konfiguriert hab
ich habe zuerst auf den Cash getippt, doch ich habe sogar den kompletten Inhalt des var Ordners gelöscht um sicher zu sein, leider bekomm ich den Fehler immer noch.
Wenn ich den kompletten Modul in den app/code/local/mage und die Dateien dem entsprechend anpass dann klappt es, ich würde aber dies in einem eigenen Ordner ablegen.
Hättet ihr da ein Tip für mich, vieleicht hab ich einfach was übersehen
Gruss,
und nochmals vielen Dank für die kompetenten Beiträge
War diese Antwort hilfreich?
LikeDislike