How to Modulentwicklung [Teil 4]

Wie definiere ich eine eigene Datenbanktabelle, designe die Admin Templates und hinterlege die Funktionalität?

Eigene Datenbanktabellen

Für unser Modul haben wir bereits ein eigenes Datenbanktabellenfeld in der Artikeltabelle angelegt.

Wir benötigen nun noch eine eigene Datenbanktabelle für die Speicherung der Fragen und Antworten und eine Verknüpfungstabelle für die Zuordnung.

 

Unsere eigenen Datenbanktabellen

  • bisquestionanswer
  • oxobject2bisquestionanswer

Damit diese Datenbankanpassungen bei Modulaktivierung vorgenommen werden – überarbeiten wir unsere Eventklasse bisQuestionAnswerEvents des Moduls.

Um sicherzustellen, dass bei Reaktivierung des Moduls keine Fehler auftreten ergänzen wir eine Prüfung ob unser Datenbanktabellenfeld bisinneedofexplanation bereits existiert und erzeugen unsere eigenen Datenbanktabellen nur wenn diese nicht bereits existieren.

Admin Templates

Ein Admin Template im Detail zu verstehen ist nicht einfach. Bei der Entwicklung orientiere ich mich an einen bestehenden Template und passe dieses an.

Es folgen die überarbeiteten Admin Views.

  • View für OXID Admin Listenansicht
    list_of_questions_list.tpl
  • View für OXID Admin Detailansicht
    list_of_questions_main.tpl

Ich habe 4 neue Sprachkonstanten in den Templates definiert. Die 4 Sprachkonstanten müssen in der Sprachdatei ergänzt werden.

Eine Detailaufschlüsselung der Template Dateien würde diesen Artikel sprengen. Zum besseren Verständnis der Admin Templates plane ich kleinere Vorlagen und Hilfestellungen zu veröffentlichen.

Funktionalität

Für die Funktionalität müssen wir ein Model anlegen – da wir eigene Datenbanktabellen verwenden.

Wir legen ein eigenes neues Model an. Im Model machen wir den Klassennamen und Datenbanktabellennamen bekannt.

Nachdem wir unser Model angelegt haben, müssen wir dieses in der metadata.php bekannt machen.

Im Admin Controller der Liste bisQuestionAnswer_ListofQuestions_List machen wir unser neues Model bekannt und legen eine eigene Select Abfrage an.

Die eigene Select Abfrage ist notwendig da wir gerne die Artikelnummer in unserer Listenansicht mit anzeigen möchten.

Damit in unserem Stamm Tab die Daten des ausgewählten Listeneintrages erscheinen und bearbeitbar sind müssen wir unser Controller für OXID Admin Detailansicht anpassen.

Fortsetzung

Im 5. und letzten Teil der Modulentwicklung geht es weiter mit:
Wie integriere ich meinen neuen Tab “Fragen & Antworten” auf der Produktdetailseite im Frontend?

Key Learnings

  • Eigene Datenbanktabellen angelegt
    • Fragen und Antworten Tabelle
    • Verknüpfungstabelle
  • Groben Aufbau der Admin Listen- und Detailansicht kennen gelernt
  • Zusammenspiel der Admin Listen- und Detailansicht
  • Eigenes Model definieren
  • Model Verwendung innerhalb der Listen- und Detailcontroller

Der Beitrag How to Modulentwicklung [Teil 4] erschien zuerst auf Bischoff Webentwicklung.


2 Antworten
  1. KristianH says:

    In dem Template list_of_questions_list.tpl ist folgender Code:

    if (parent.parent)
    { parent.parent.sShopTitle = "[{$actshopobj->oxshops__oxname->getRawValue()|oxaddslashes}]";
    parent.parent.sMenuItem = "[{ oxmultilang ident="GENERAL_MENUITEM" }]";
    parent.parent.sMenuSubItem = "[{ oxmultilang ident="BIS_LIST_OF_QUESTION_LIST_MENUSUBITEM" }]";
    parent.parent.sWorkArea = "[{$_act}]";
    parent.parent.setTitle();
    }


    Dies ist eine Oxid Kopie und sollte nicht verwendet werden, eher so:

    [{capture name="emptyCapture"}]

    [{capture name="d3JavaScript"}]
    if (parent.parent) {
    parent.parent.sShopTitle = "[{$actshopobj->oxshops__oxname->getRawValue()|oxaddslashes}]";
    parent.parent.sMenuItem = "[{ oxmultilang ident="GENERAL_MENUITEM" }]";
    parent.parent.sMenuSubItem = "[{ oxmultilang ident="BIS_LIST_OF_QUESTION_LIST_MENUSUBITEM" }]";
    parent.parent.sWorkArea = "[{$_act}]";
    parent.parent.setTitle()
    }
    [{/capture}]

    [{/capture}]
    [{oxscript add=$smarty.capture.d3JavaScript}]
    [{include file="bottomitem.tpl"}]

    In der Klasse bisQuestionAnswer_ListofQuestions_Main Methode render() Bitte immer das parent::render() zurück geben.
    bspw:

    $sReturn = parent::render();
    // do some stuff
    return $sReturn

    Antworten
  2. indianer3c says:

    Hallo Kristian,

    vielen Dank für dein Feebback. Dies freut mich sehr!

    Kannst du bitte deine 2 Verbesserungsvorschläge auch begründen?

    Mich würde dies sehr interessieren. Weil damit die Softwarequalität von OXID Modulen im Allgemeinen erhöht wird, wenn man sich über Best Practices austauscht 🙂

    Antworten

Hinterlassen Sie einen Kommentar

Wollen Sie an der Diskussion teilnehmen?
Feel free to contribute!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *