Zurück   rack::SPEED Support-Forum > Magento FAQ > Magento FAQ - Extensions

Magento FAQ - Extensions FAQ zu Magento Extensions

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 26.10.2008   #1 (permalink)
rack::SPEED Support
 
Benutzerbild von rack::SPEED
 
Registriert seit: 19.10.2008
Ort: Krefeld
Beiträge: 907
Renommee-Modifikator: 10
rack::SPEED hat die Renommee-Anzeige deaktiviert
Standard Modulerstellung: Wie erstelle ich ein Modul (Funktion überschreiben)?

Oft reichen für die normalen Magento-Funktionen zur Erstellung eines wirklich individuellen Onlineshops nicht aus. Dieses Tutorial zeigt, wie Magento "core-Klassen" richtig überschrieben und verändert werden.

Die hier gezeigte Lösung funktioniert für Block- und Model-Klassen, Controller werden etwas anders behandelt und bekommen daher ein eigenes Tutorial.

Ziel dieses Tutorials ist es, die Funktion der Datei "app/code/core/Mage/Catalog/Block/Breadcrumbs.php" zu überschreiben. Dazu haben wir zwei Möglichkeiten:

1. Die schnelle Lösung

Um schnell und unkompliziert eine Funktion zu verändern genügt es die Datei Breadcrumbs.php inkl. Verzeichnisbaum nach "app/code/local" zu kopieren.

Der vollständige Pfad sollte am Ende so aussehen: "app/code/local/Mage/Catalog/Block/Breadcrumbs.php". - Jede Veränderung des Quellcodes wirkt sich, sofern der Cache deaktiviert wurde, sofort auf den Shop aus.

2. Die saubere Lösung

Da die 1. Lösung einige Nachteile mit sich bringt und nur schwer weiterzugeben ist, wollen wir nun ein Modul für die Änderungen erstellen. Dieses Modul kann später auch exportiert und über MagentoConnect der ganzen Comunity zugänglich gemacht werden.

Als erstes erstellen wir unterhalb von "app/code/local" einen Arbeitsordner. Diesen Ordner nennen wir "Rackspeed", damit wir später wissen wo wir unsere Änderungen bzw. Module wiederfinden. - Wichtig hierbei ist die Schreibweise: 1. Buchstabe groß, der Rest klein.

In diesem Ordner erstellen wir einen weiteren Order mit dem Namen unseres Moduls, z.B. "BreadStop". Als nächstes werden zwei weitere Ordner in dem soeben erstellten Ordner erstellt: "etc" und "Catalog".

"etc" nimmt die Konfigurationsdatei "config.xml" unseres Moduls auf, "Catalog" leiten wir vom originalen Pfad der zu überschreibenden Funktion ab. Im "Catalog"-Ordner erstellen wir wiederum einen Ordner mit dem Namen "Blocks" welcher ebenfalls vom originalen Pfad abgeleitet wird. Abschließend kopieren wir die Datei "Breadcrumbs.php" in diesen Ordner.

Das Ganze sollte nun wie folgt aussehen:

Code:
app/code/local/Rackspeed/BreadStop/Catalog/Block/Breadcrumbs.php
app/code/local/Rackspeed/BreadStop/etc/config.xml
Nun füllen wir die soeben erstellte leere Konfigurationsdatei wie folgt. - Sollte Ihr Modul einen anderen Namen haben, ist dieser entsprechend zu ersetzen:

Code:
<?xml version="1.0"?>
<config>
    <modules>
        <Rackspeed_BreadStop>
            <version>0.1.0</version>
        </Rackspeed_BreadStop>
    </modules>
    <global>
        <blocks>
            <catalog>
                <rewrite>
                        <breadcrumbs>Rackspeed_BreadStop_Catalog_Block_Breadcrumbs</breadcrumbs>
                </rewrite>
            </catalog>
        </blocks>
    </global>
</config>
Als nächstes bearbeiten wir die "Breadcrumbs.php" Datei, dabei entfernen wir zunächst sämtlichen Quellcode den wir nicht benötigen und ändern den Namen der Klasse von:

Code:
class Mage_Catalog_Block_Breadcrumbs extends Mage_Core_Block_Template
zu

Code:
class Rackspeed_Breadstop_Catalog_Block_Breadcrumbs extends Mage_Core_Block_Template
Jetzt können wir die eigentliche Funktion anpassen und verändern. In diesem Beispiel werden wir den "Home"-Link ausblenden. Die veränderte Datei sieht nach der Bearbeitung (entsprechende Zeilen wurden auskommentiert) so aus:

PHP-Code:
<?php
    
class Rackspeed_Breadstop_Catalog_Block_Breadcrumbs extends Mage_Core_Block_Template 
    
{
        protected function 
_prepareLayout()
        {
            if (
$breadcrumbsBlock $this->getLayout()->getBlock('breadcrumbs')) {
                
/*$breadcrumbsBlock->addCrumb('home',
                    array('label'=>Mage::helper('catalog')->__('Home'), 'title'=>Mage::helper('catalog')->__('Go to Home Page'), 'link'=>Mage::getBaseUrl())
                );*/
    
                
$title = (string)Mage::getStoreConfig('system/store/name');
                
$path Mage::helper('catalog')->getBreadcrumbPath($this->getCategory());
                foreach (
$path as $name=>$breadcrumb) {
                    
$breadcrumbsBlock->addCrumb($name$breadcrumb);
                    
$title $breadcrumb['label'].' '.Mage::getStoreConfig('catalog/seo/title_separator').' '.$title;
                }
    
                if (
$headBlock $this->getLayout()->getBlock('head')) {
                    
$headBlock->setTitle($title);
                }
            }
            return 
parent::_prepareLayout();
        }
    }
?>
Bevor wir unsere Arbeit begutachten können müssen wir Magento noch mitteilen, dass ein neues Modul vorhanden ist und aktiviert werden soll. Dazu erstellen wir unter: "app/etc/modules/" eine neue Datei mit dem Namen "Rackspeed_BreadStop.xml". In diese Datei fügen wir nun folgenden Inhalt ein:

Code:
<?xml version="1.0"?>
<config>
    <modules>
        <Rackspeed_BreadStop>
            <active>true</active>
            <codePool>local</codePool>
        </Rackspeed_BreadStop>
    </modules>
</config>
Jetzt können wir das Frontend aufrufen und das Modul testen. Wenn alles geklappt hat sollte der Home-Link nicht mehr in der Breadcrumb-Navi angezeigt werden. - Zur Kontrolle kann in der Datei "app/etc/modules/Rackspeed_BreadStop.xml" der Schalter von "true" auf "false" geändert werden um das Modul zu deaktivieren.

Das komplette Modul wurde als ZIP-Datei angehängt, und kann als Grundlage für neue Module genutzt werden, oder um die eigene Arbeit zu kontrollieren.

Da dies mein erstes Tutorial ist freue ich mich über jede Art von Feedback.
Angehängte Dateien
Dateityp: zip Rackspeed_BreadStop.zip (2,9 KB, 21x aufgerufen)
rack::SPEED ist offline   Mit Zitat antworten
Alt 13.03.2009   #2 (permalink)
rack::SPEED Kunde
 
Registriert seit: 19.11.2008
Beiträge: 15
Renommee-Modifikator: 0
Deichstyle befindet sich auf einem aufstrebenden Ast
Standard

Einen kleinen Fehler hat das Tutorial:

In dem Code-Abschnitt unter Punkt 2 muss es nicht

Code:
app/code/local/Rackspeed/BreadStop/catalog/etc/config.xml
heißen, sondern

Code:
app/code/local/Rackspeed/BreadStop/etc/config.xml
Ich habe zwar den Anhang heruntergeladen, aber wollte das Tut erstmal "zu Fuß" bearbeiten, da bin ich auf diesen Mini-Fehler gestoßen.

Ansonsten ein hervorragendes Beispiel. Bin der Magento-Logik so einen großen Schritt näher gekommen.
Deichstyle ist offline   Mit Zitat antworten
Alt 13.03.2009   #3 (permalink)
rack::SPEED Support
 
Benutzerbild von rack::SPEED
 
Registriert seit: 19.10.2008
Ort: Krefeld
Beiträge: 907
Renommee-Modifikator: 10
rack::SPEED hat die Renommee-Anzeige deaktiviert
Standard

Vielen Dank, ich habe den Fehler im Post korrigiert...
rack::SPEED ist offline   Mit Zitat antworten
Alt 15.03.2009   #4 (permalink)
rack::SPEED Kunde
 
Registriert seit: 19.11.2008
Beiträge: 15
Renommee-Modifikator: 0
Deichstyle befindet sich auf einem aufstrebenden Ast
Standard

Gibt es eigentlich auch noch weiterführende Tutorials?

Ich versuche z.B. gerade ein Modul zu erstellen, mit dem man per Eingabe der Bestellnummer und Angabe der Menge eine Schnellbestellung durchführen kann. Ich "frickel" mich hier gerade durch die Funktion Catalog_Search von Magento.

Wenn jemand da Tipps hat, wäre ich sehr sehr dankbar!!!
Deichstyle ist offline   Mit Zitat antworten
Alt 16.03.2009   #5 (permalink)
rack::SPEED Kunde
 
Registriert seit: 19.11.2008
Beiträge: 15
Renommee-Modifikator: 0
Deichstyle befindet sich auf einem aufstrebenden Ast
Standard

Ich habe ein Modul gefunden, welches genau dieses macht:

Es nennt sich Karma Quickaddtocart. Ich bekomme folgende Fehlermeldung, wenn ich dieses Modul installieren möchte:

Code:
Failed to download magento-community/Karma_quickaddtocart within preferred state "beta", latest release is version 1.0, stability "alpha", use "channel://connect.magentocommerce.com/community/Karma_quickaddtocart-1.0" to install
Cannot initialize 'channel://connect.magentocommerce.com/community/Karma_quickaddtocart', invalid or missing package file
Install Errors
Package "channel://connect.magentocommerce.com/community/Karma_quickaddtocart" is not valid
PEAR ERROR: install failed
Ich wäre für Hilfe sehr verbunden.
Deichstyle ist offline   Mit Zitat antworten
Alt 16.03.2009   #6 (permalink)
rack::SPEED Kunde
 
Registriert seit: 19.11.2008
Beiträge: 15
Renommee-Modifikator: 0
Deichstyle befindet sich auf einem aufstrebenden Ast
Standard

Wer lesen kann...

Über Settings habe ich den preferred State kurzzeitig auf Alpha gesetzt, schon liefs...
Deichstyle ist offline   Mit Zitat antworten
Alt 03.01.2010   #7 (permalink)
bnn
Neuer Benutzer
 
Registriert seit: 03.01.2010
Beiträge: 1
Renommee-Modifikator: 0
bnn befindet sich auf einem aufstrebenden Ast
Standard

Perfekt, genau danach habe ich gesucht! Vielen Dank!

Nur der Vollständigkeit halber: der Schalter steht in der angehängten Rackspeed_BreadStop.xml auf 'false' und muss erst auf 'true' gesetzt werden, bevor der beschriebene Effekt sichtbar wird.
bnn ist offline   Mit Zitat antworten
Alt 21.06.2010   #8 (permalink)
Neuer Benutzer
 
Registriert seit: 21.06.2010
Beiträge: 1
Renommee-Modifikator: 0
Haggbard befindet sich auf einem aufstrebenden Ast
Standard

hallo also ich versuche gerade einen eigenen Menü Punkt zu erstellen und in "Manage Products" ein neues Feld einzufügen in der Edit/Add Funktion und sie soll natürlich auch in der Übersicht angezeigt werden.

Das Tutorial hilft mir fast

Und zwar in der etc/config.xml schreibst du folgendes:
Code:
 <global>
        <blocks>
            <catalog>
                <rewrite>
Wie kommst du den genau auf den Pfad?
Das kann ich nocht nicht ganz nachvollziehen.

Kann mir da jemand helfen?
Haggbard ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
erstellen, extension, howto, magento, modul, programmierung, tutorial

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


LinkBacks (?)
LinkBack to this Thread: http://rackspeed.de/forum/magento-faq-extensions/modulerstellung-erstelle-modul-funktion-ueberschreiben-19
Erstellt von For Type Datum
23kar.at's Bookmarks on Delicious This thread Refback 17.03.2009 16:19
Modulentwicklung mit Magento ? KolibriWiki This thread Refback 04.12.2008 14:13


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:48 Uhr.


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Content Relevant URLs by vBSEO 3.6.0
© 2008 by rack::SPEED

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17