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

  • Twitter
  • Webnews
  • Mister-Wong
  • Facebook
  • Digg
  • BlogMarks
  • Share/Save/Bookmark

14 Kommentare to “Extensions Tutorial: Teil 3 - Datenbank”

  1. Andreas Andreas sagt:

    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

    • Zu 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

  2. Tom Tom sagt:

    Hallo 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

  3.  ds_1984 sagt:

    Klasse, 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! :-)

  4. fenta23 fenta23 sagt:

    Hallo 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.

    • Hallo,
      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 :-) 0.2.0 .
      Ich glaube nicht dass es mit der neuen Version von Magento etwas zu tun hat.

      Viele Grüße
      Johannes Teitge

  5. fenta23 fenta23 sagt:

    Es 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

  6. ralf ralf sagt:

    danke….
    Ich schließe mich Tom an….
    Nach viel Suchen ist da Licht am ende des Tunnels :-))))
    nochmal Danke für diesen Blog

  7.  tobiasb sagt:

    Bei der Erklärung hast du geschrieben, dass du hinzugefügt hast. Du meinst doch sicherlich ?

  8.  tobiasb sagt:

    Naja hatte ich mir fast gedacht, dass die Tags gefiltert werden :D.

    Once again:

    Bei der Erklärung hast du geschrieben, dass du - routers - hinzugefügt hast. Du meinst doch sicherlich - resources - ?

  9.  ilker sagt:

    ich 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
    “);

  10.  joniponi sagt:

    … nöö, da kommt nix an :(

    ich gebe auf …

  11.  burnymc sagt:

    Erstmal 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

Kommentar erstellen

You must be logged in to post a comment.

Bitte beachten: Mxperts.de ist kein Supportforum sondern eine Informationsplattform, deshalb benutzt für Diskussionen das deutsche Forum von Magento. (Fragen/Kommentare zu den Tutorials ausgeschlossen). Außerdem gebe ich keinen kostenlosen Support zu Magento. Leider haben das einige Leser in letzter Zeit falsch Verstanden und ich bitte um Euer Verständnis. Ich denke diese Plattform ist von unserer Seite aus schon genügend Gratis-Leistung.