Extensions Tutorial: Teil 3 – Datenbank
In diesem Teil unserer Extension Tutorials geht es darum, wie man eigene Datenbank-Tabellen definiert und in seine Erweiterung integriert.
1. Als erstes müssen wir unsere Dateistruktur anpassen
app/
etc/
modules/
- Mxperts_All.xml (Oder Ihre Firmenname IhreFirme_All.xml)
code/
local/
Mxperts/ (Oder Ihre Firmenname IhreFirme_All.xml)
Tutorial/ (Bezeichnung Ihrer Erweiterung)
Block/
- Index.php
controllers/
- AdminController.php
- IndexController.php
etc/
- config.xml
Helper/
- Data.php
sql/
tutorial_setup/
- mysql4-install-0.2.0.php
- mysql4-upgrade-0.1.0-0.2.0.php
Erklärung:
Im Verzeichnis app\code\local\Mxperts\Tutorial\sql\tutorial_setup werden die Dateien zur Defintion der SQL-statements hinterlegt.
2. Anpassen der config.xml
<?xml version="1.0"?>
<config>
<modules>
<Mxperts_Tutorial>
<version>0.2.0</version>
</Mxperts_Tutorial>
</modules>
<global>
<helpers>
<tutorial><class>Mxperts_Tutorial_Helper</class></tutorial>
</helpers>
<blocks>
<tutorial>
<class>Mxperts_Tutorial_Block</class>
</tutorial>
</blocks>
<resources>
<tutorial_setup>
<setup>
<module>Mxperts_Tutorial</module>
</setup>
<connection>
<use>core_setup</use>
</connection>
</tutorial_setup>
<tutorial_write>
<connection>
<use>core_write</use>
</connection>
</tutorial_write>
<tutorial_read>
<connection>
<use>core_read</use>
</connection>
</tutorial_read>
</resources>
</global>
<adminhtml>
<menu>
<tutorial translate="title" module="tutorial">
<title>Tutorial</title>
<sort_order>100</sort_order>
<action>tutorial/admin</action>
</tutorial>
</menu>
</adminhtml>
<frontend>
<routers>
<Mxperts_Tutorial>
<use>standard</use>
<args>
<module>Mxperts_Tutorial</module>
<frontName>tutorial</frontName>
</args>
</Mxperts_Tutorial>
</routers>
</frontend>
</config>
Erklärung:
Wir haben den Abschnitt <routers> hinzugefügt. Dier Versionsnummer wurde erhöht auf Version 0.2.0 Magento erkennt die Versionsänderung der Erweiterung und führt das Installationscript automatisch aus.
3. Defintion unserer Tabelle
Unser Installationsscript für die Datenbank erstellen wir in der Datei mysql4-upgrade-0.1.0-0.2.0.php udn in der Datei mysql4-install-0.2.0.php. Wir benötigen die Datei mysql4-upgrade-0.1.0-0.2.0.php nur für das einmalige Update. Wenn Sie später Ihre Erweiterung von Anfang an mit den Datenbank-Defintionen ausliefern müssen Sie Updatescripts nur erstellen, falls es Änderungen in den Tabellen gibt.
<?php
$installer = $this;
$installer->startSetup();
$installer->run("
CREATE TABLE {$this->getTable('tutorial')} (
`tutorial_id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(250) NOT NULL default '',
`tags` varchar(250) default NULL,
`summary` text,
PRIMARY KEY (`tutorial_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
");
$installer->endSetup();
Um die Tabelle in Magento zu integrieren gehen Sie in Ihr Magento Backend. Gehen Sie auf System->Konfiguration->Erweitert und klicken Sie auf speichern. Aktualisieren Sie zur Sicherheit noch den Cache.
Prüfen Sie nun mit einem SQL-Client oder phpMyAdmin nach, ob Ihre Tabelle vorhanden ist. Wenn ja, dann können Sie die Datei mysql4-upgrade-0.1.0-0.2.0.php nun löschen.
Extensions Tutorial: Teil2 – “Admin-Controler”
Extensions Tutorial: Teil 4 – Model
Hallo,
danke für dein gutesTutorial. Leider stellen sich bei mir ein parr Fragen.
1. Wo soll sich das Verzeichniss sql/mxperts/setup befinden?
2. Ist die folgende Ordnerstruktur richtig? Und kommt hierrein auch die Datei mysql4-upgrade-0.1.0-0.2.0.php?
sql/
tutorial_setup/
– mysql4-install-0.2.0.php
– mysql4-install-0.1.0-0.2.0.php
3. Weist du zufällig wie ich eine eigene Datenstruktur für dieses Modul erzeugen kann und wie ich auf diese zugreife?
Danke im vorraus Andreas
War diese Antwort hilfreich?
LikeDislikeZu 1. Sorry, das ist das Verzeichnis app\code\local\Mxperts\Tutorial\sql\tutorial_setup. Habe ich bereits korrigiert.
Zu 2. Du hast recht das ist mir ein Fehler unterlaufen. Ersetze mysql4-install-0.1.0-0.2.0.php mit mysql4-upgrade-0.1.0-0.2.0.php
Zu 3. Eine eigene Datenstruktur kannst Du erstellen, indem Du den SQL-Installer anpasst. Ändere einfach den Tabellennamen und die Tabellenstruktur. Aber warte lieber bis ich diese Tutorials-Serie fertig habe, denn dann ist auch der Zugriff auf die Datenbank ersichtlich. Ich versuche die Tutorials schnellst möglich zu erstellen.
Viele Dank für Dein Feedback
Johannes Teitge
War diese Antwort hilfreich?
LikeDislikeHallo Johannes,
super Tutorial. Ich war schon am verzweifeln, aber das hier gibt mir wieder Auftrieb. Danke.
Eine kleine Anmerkung: in der Config.xml hast du in der Zeile 22 Tutorial klein geschreiben, was zumindest bei mir dazu geführt hat, dass die Tabelle nicht erzeugt wurde.
Grüße, und nochmals danke,
Tom
War diese Antwort hilfreich?
LikeDislikeHallo Tom,
danke für den Hinweis – du hast recht, lokal auf in meinen Sources ist auch ok. Sobald ich im groben mit der Serie an Tutorials durch bin, werde ich noch Downloadfiles der einzelnen Schritte integrieren.
War diese Antwort hilfreich?
LikeDislikeKlasse, da kommt ja wirklich was an in der Datenbank.
Finde es aber generell schön an wie vielen verschiedenen Stellen man innerhalb von nur 3 kurzen Lektionen schon war & trotzdem gut erklärt wird wo wer was macht.
Auf zu Lektion 4!
War diese Antwort hilfreich?
LikeDislikeHallo Leute,
was soll ich sagen, bei mir wills keine Tabellen erzeugen. Bin schon auf der Suche nach den üblichen groß/klein Fehlern. Kann aber nichts entdecken. Hat das beu euch auf Anhieb geklappt? Ich benutze Magento 1.2.1 da meine v1.3.1 verdammt langsam im Backend ist. Kann es sein das da in 1.2. der installler anders läuft?
Ansonsten sehr feine Tuts, hilft ungemein Magento und Zend zu verstehen.
War diese Antwort hilfreich?
LikeDislikeHallo,
0.2.0 .
frag micht nicht wie lange ich gebraucht habe diese Tutorial zu erstellen. Teilweise wollte ich es schon hinschmeißen. Schau mal ob die Versionierung deiner Erweiterung stimmt. Das hatte ich vergessen und es hat mich fast in den Wahnsinn getrieben
Ich glaube nicht dass es mit der neuen Version von Magento etwas zu tun hat.
Viele Grüße
Johannes Teitge
War diese Antwort hilfreich?
LikeDislikeEs scheint zum allgemeinen Wahnsinn von Magento dazu zu gehören;). Ich hab daweile meine Tabelle per Hand erzeugt. Läuft soweit.
Muss ich die Version in der config selbst ändern oder macht das magento für mich wenn ich das upgrade setup starte?
Grüße, Micha
War diese Antwort hilfreich?
LikeDislikedanke….
)))
Ich schließe mich Tom an….
Nach viel Suchen ist da Licht am ende des Tunnels
nochmal Danke für diesen Blog
War diese Antwort hilfreich?
LikeDislikeBei der Erklärung hast du geschrieben, dass du hinzugefügt hast. Du meinst doch sicherlich ?
War diese Antwort hilfreich?
LikeDislikeNaja hatte ich mir fast gedacht, dass die Tags gefiltert werden
.
Once again:
Bei der Erklärung hast du geschrieben, dass du – routers – hinzugefügt hast. Du meinst doch sicherlich – resources – ?
War diese Antwort hilfreich?
LikeDislikeich hatte ebenfalls Probleme beim Anlegen der Tabelle (mit mysql 5.1.44):
die Lösung bestand darin die Feldnamen von ihren Quotes zu befreien.
CREATE TABLE {$this->getTable(‘tutorial’)} (
tutorial_id int(10) unsigned NOT NULL auto_increment,
name varchar(250) NOT NULL default ”,
tags varchar(250) default NULL,
summary text,
PRIMARY KEY (tutorial_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
“);
War diese Antwort hilfreich?
LikeDislike… nöö, da kommt nix an
ich gebe auf …
War diese Antwort hilfreich?
LikeDislikeErstmal auch von mir vielen Dank für das Tutorial. Damit kann man sehr gut arbeiten. Nun habe ich aber das selbe Problem wie manch anderer. Egal was ich mache die Tabelle erzeugt sich nicht. Auch kein Fehler ist zu sehen. Ich komme da nicht mehr weiter.
Hat jemand eine Idee womit es zusammen hängen kann?
Ich benutze die Magento Version 1.4.1.0
Vielen Dank
War diese Antwort hilfreich?
LikeDislikeDa sich die Linkstrukur geändert hat, hier der aktuelle Link zum nächsten Abschnitt:
http://www.mxperts.de/blog/extensions-tutorial-teil-4-model/
War diese Antwort hilfreich?
LikeDislike