Vierter Schritt - Das Model I
Die Übernahme der geplanten Datenstruktur ins Modul geschieht zunächst durch die Erstellung der Datenstruktur als XML Datei im Pfad
Das eben erstellte Datenmodell:
Anm: Die komplette XML-Struktur befindet sich in kommentierter Form im Kickstart Modul.
Die Datenfelder sollten als eigene Gruppe in die XML Struktur übernommen werden:
Texte und Feldtypen
/<myapp>/RsModule/<MyModule>/Model/Xml/<MyModule>.xml
Das eben erstellte Datenmodell:
- Frage
- Antwort
- Schlagwörter
- Anzahl Abrufe
Einfach XML-Struktur
Wird zunächst in eine einfache XML Struktur übernommen:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE formfields SYSTEM "http://www.redsparkframework.com/dtd/form_fields.dtd">
<formfields>
<page>
<id>1</id> <!-- Möglichkeit, mehrseitiger Formulare bie einseitgen Fomularen immer = 1 -->
<!-- Datenfelder des Formulars -->
<group>
<subgroup>
<!-- Frage -->
<field>
<db_field>question</db_field>
</field>
<!-- Antwort -->
<field>
<db_field>answer</db_field>
</field>
<!-- Schlagwörter -->
<field>
<db_field>tags</db_field>
</field>
<!-- Anzahl Abrufe -->
<field>
<db_field>viewcnt</db_field>
</field>
</subgroup>
</page>
</formfields>
<!DOCTYPE formfields SYSTEM "http://www.redsparkframework.com/dtd/form_fields.dtd">
<formfields>
<page>
<id>1</id> <!-- Möglichkeit, mehrseitiger Formulare bie einseitgen Fomularen immer = 1 -->
<!-- Datenfelder des Formulars -->
<group>
<subgroup>
<!-- Frage -->
<field>
<db_field>question</db_field>
</field>
<!-- Antwort -->
<field>
<db_field>answer</db_field>
</field>
<!-- Schlagwörter -->
<field>
<db_field>tags</db_field>
</field>
<!-- Anzahl Abrufe -->
<field>
<db_field>viewcnt</db_field>
</field>
</subgroup>
</page>
</formfields>
Anm: Die komplette XML-Struktur befindet sich in kommentierter Form im Kickstart Modul.
Erweiterung um Datenbankinformationen
Zur Speicherung und Darstellung der Datenfelder in der Datenbank bieten sich einige weitere Felder zur besseren Verwaltung der Daten an:- id -> Eindeutiger Bezeichner, zwingend erforderlich
- enabled -> Standardfeld zur Aktivierung und Deaktivierung eines Datensatzes
- fk_account -> RedSpark bietet das Konzept des Multi-Accountings (auch wenn in RedSparkCore nicht zur Bearbeitung implementiert). Durch anlegen dieses Feldes funktioniert das Modul auch in Apps mit einer Accountverwaltung
- insertDate -> Automatische Speicherung des Erstellzeitpunktes des Datensatzes
- changeDate -> Automatische Speicherung des letzten Bearbeitungszeitpunktes des Datensatzes
Die Datenfelder sollten als eigene Gruppe in die XML Struktur übernommen werden:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE formfields SYSTEM "http://www.redsparkframework.com/dtd/form_fields.dtd">
<formfields>
<page>
<id>1</id> <!-- Möglichkeit, mehrseitiger Formulare bie einseitgen Fomularen immer = 1 -->
<!-- Datenfelder zur Verwaltung der Datenbank -->
<group>
<subgroup>
<field>
<db_field>id</db_field>
</field>
<field>
<db_field>enabled</db_field>
</field>
<field>
<db_field>fk_account</db_field>
</field>
<field>
<db_field>insertDate</db_field>
</field>
<field>
<db_field>changeDate</db_field>
</field>
</subgroup>
</group>
<!-- Datenfelder des Formulars -->
<group>
<subgroup>
<!-- Frage -->
<field>
<db_field>question</db_field>
</field>
<!-- Antwort -->
<field>
<db_field>answer</db_field>
</field>
<!-- Schlagwörter -->
<field>
<db_field>tags</db_field>
</field>
<!-- Anzahl Abrufe -->
<field>
<db_field>viewcnt</db_field>
</field>
</subgroup>
</group>
</page>
</formfields>
<!DOCTYPE formfields SYSTEM "http://www.redsparkframework.com/dtd/form_fields.dtd">
<formfields>
<page>
<id>1</id> <!-- Möglichkeit, mehrseitiger Formulare bie einseitgen Fomularen immer = 1 -->
<!-- Datenfelder zur Verwaltung der Datenbank -->
<group>
<subgroup>
<field>
<db_field>id</db_field>
</field>
<field>
<db_field>enabled</db_field>
</field>
<field>
<db_field>fk_account</db_field>
</field>
<field>
<db_field>insertDate</db_field>
</field>
<field>
<db_field>changeDate</db_field>
</field>
</subgroup>
</group>
<!-- Datenfelder des Formulars -->
<group>
<subgroup>
<!-- Frage -->
<field>
<db_field>question</db_field>
</field>
<!-- Antwort -->
<field>
<db_field>answer</db_field>
</field>
<!-- Schlagwörter -->
<field>
<db_field>tags</db_field>
</field>
<!-- Anzahl Abrufe -->
<field>
<db_field>viewcnt</db_field>
</field>
</subgroup>
</group>
</page>
</formfields>
DDL - Data Definition Language
Im nächsten Schritt fügen wir der XML-Struktur die
Datenbankstruktur der einzelnen Felder hinzu. Zusätzlich können für
Felder, die nur in der Datenbank und nicht im Formular angezeigt werden
sollen, das Flag "database_only" vergeben werden:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE formfields SYSTEM "http://www.redsparkframework.com/dtd/form_fields.dtd">
<formfields>
<page>
<id>1</id> <!-- Möglichkeit, mehrseitiger Formulare bie einseitgen Fomularen immer = 1 -->
<!-- Datenfelder zur Verwaltung der Datenbank -->
<group>
<subgroup>
<field>
<db_field>id</db_field>
<db_definition>int(12) NOT NULL auto_increment</db_definition>
<database_only>TRUE</database_only>
</field>
<field>
<db_field>enabled</db_field>
<db_definition>enum('Y','N') default 'N'</db_definition>
<database_only>TRUE</database_only>
</field>
<field>
<db_field>fk_account</db_field>
<db_definition>int(12) default '0'</db_definition>
<database_only>TRUE</database_only>
</field>
<field>
<db_field>insertDate</db_field>
<db_definition>datetime NOT NULL default '0000-00-00 00:00:00'</db_definition>
<database_only>TRUE</database_only>
</field>
<field>
<db_field>changeDate</db_field>
<db_definition>datetime NOT NULL default '0000-00-00 00:00:00'</db_definition>
<database_only>TRUE</database_only>
</field>
</subgroup>
</group>
<!-- Datenfelder des Formulars -->
<group>
<subgroup>
<!-- Frage -->
<field>
<db_field>question</db_field>
<db_definition>varchar(255) default NULL</db_definition>
</field>
<!-- Antwort -->
<field>
<db_field>answer</db_field>
<db_definition>text</db_definition>
</field>
<!-- Schlagwörter -->
<field>
<db_field>tags</db_field>
<db_definition>varchar(255) default NULL</db_definition>
</field>
<!-- Anzahl Abrufe -->
<field>
<db_field>viewcnt</db_field>
<db_definition>int(12) default '0'</db_definition>
</field>
</subgroup>
</group>
</page>
</formfields>
<!DOCTYPE formfields SYSTEM "http://www.redsparkframework.com/dtd/form_fields.dtd">
<formfields>
<page>
<id>1</id> <!-- Möglichkeit, mehrseitiger Formulare bie einseitgen Fomularen immer = 1 -->
<!-- Datenfelder zur Verwaltung der Datenbank -->
<group>
<subgroup>
<field>
<db_field>id</db_field>
<db_definition>int(12) NOT NULL auto_increment</db_definition>
<database_only>TRUE</database_only>
</field>
<field>
<db_field>enabled</db_field>
<db_definition>enum('Y','N') default 'N'</db_definition>
<database_only>TRUE</database_only>
</field>
<field>
<db_field>fk_account</db_field>
<db_definition>int(12) default '0'</db_definition>
<database_only>TRUE</database_only>
</field>
<field>
<db_field>insertDate</db_field>
<db_definition>datetime NOT NULL default '0000-00-00 00:00:00'</db_definition>
<database_only>TRUE</database_only>
</field>
<field>
<db_field>changeDate</db_field>
<db_definition>datetime NOT NULL default '0000-00-00 00:00:00'</db_definition>
<database_only>TRUE</database_only>
</field>
</subgroup>
</group>
<!-- Datenfelder des Formulars -->
<group>
<subgroup>
<!-- Frage -->
<field>
<db_field>question</db_field>
<db_definition>varchar(255) default NULL</db_definition>
</field>
<!-- Antwort -->
<field>
<db_field>answer</db_field>
<db_definition>text</db_definition>
</field>
<!-- Schlagwörter -->
<field>
<db_field>tags</db_field>
<db_definition>varchar(255) default NULL</db_definition>
</field>
<!-- Anzahl Abrufe -->
<field>
<db_field>viewcnt</db_field>
<db_definition>int(12) default '0'</db_definition>
</field>
</subgroup>
</group>
</page>
</formfields>
Texte und Feldtypen
Das Einzige was für eine erste Basisversion des Model-XML noch fehlt sind die Feldbezeichner und optinal die Feldtypen. Diese werden über das Tag <eingabe_name> bzw. <form_type> unterhalb von <field> eingefügt:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE formfields SYSTEM "http://www.redsparkframework.com/dtd/form_fields.dtd">
<formfields>
<page>
<id>1</id> <!-- Möglichkeit, mehrseitiger Formulare bie einseitgen Fomularen immer = 1 -->
<!-- Bilder und Texte, die bei der Ein- und Ausgabe angezeigt werden -->
<headline_image>faq.gif</headline_image>
<!-- Headline und Subheadline für die Neues-Element Ansicht im Backend -->
<headline_insert><![CDATA[Create headline]]></headline_insert>
<headline_text_insert><![CDATA[Create text]]></headline_text_insert>
<!-- Headline und Subheadline für die Bearbeitungsansicht im Backend -->
<headline_update><![CDATA[Edit headline]]></headline_update>
<headline_text_update><![CDATA[Edit text]]></headline_text_update>
<!-- Headline und Subheadline für die Detailansicht im Backend -->
<headline_show><![CDATA[List headline]]></headline_show>
<headline_text_show><![CDATA[List text]]></headline_text_show>
<!-- Datenfelder zur Verwaltung der Datenbank -->
<group>
<subgroup>
<field>
<db_field>id</db_field>
<db_definition>int(12) NOT NULL auto_increment</db_definition>
<database_only>TRUE</database_only>
</field>
<field>
<db_field>enabled</db_field>
<db_definition>enum('Y','N') default 'N'</db_definition>
<database_only>TRUE</database_only>
</field>
<field>
<db_field>fk_account</db_field>
<db_definition>int(12) default '0'</db_definition>
<database_only>TRUE</database_only>
</field>
<field>
<db_field>insertDate</db_field>
<db_definition>datetime NOT NULL default '0000-00-00 00:00:00'</db_definition>
<database_only>TRUE</database_only>
</field>
<field>
<db_field>changeDate</db_field>
<db_definition>datetime NOT NULL default '0000-00-00 00:00:00'</db_definition>
<database_only>TRUE</database_only>
</field>
</subgroup>
</group>
<!-- Datenfelder des Formulars -->
<group>
<subgroup>
<!-- Frage -->
<field>
<eingabe_name>M_FAQ_FIELD_QUESTION</eingabe_name>
<db_field>question</db_field>
<db_definition>varchar(255) default NULL</db_definition>
</field>
<!-- Antwort -->
<field>
<eingabe_name>M_FAQ_FIELD_ANSWER</eingabe_name>
<db_field>answer</db_field>
<db_definition>text</db_definition>
<form_type>textarea</form_type>
</field>
<!-- Schlagwörter -->
<field>
<eingabe_name>M_FAQ_FIELD_TAGS</eingabe_name>
<db_field>tags</db_field>
<db_definition>varchar(255) default NULL</db_definition>
</field>
<!-- Anzahl Abrufe -->
<field>
<eingabe_name>M_FAQ_FIELD_VIEWCNT</eingabe_name>
<db_field>viewcnt</db_field>
<db_definition>int(12) default '0'</db_definition>
</field>
</subgroup>
</group>
</page>
</formfields>
<!DOCTYPE formfields SYSTEM "http://www.redsparkframework.com/dtd/form_fields.dtd">
<formfields>
<page>
<id>1</id> <!-- Möglichkeit, mehrseitiger Formulare bie einseitgen Fomularen immer = 1 -->
<!-- Bilder und Texte, die bei der Ein- und Ausgabe angezeigt werden -->
<headline_image>faq.gif</headline_image>
<!-- Headline und Subheadline für die Neues-Element Ansicht im Backend -->
<headline_insert><![CDATA[Create headline]]></headline_insert>
<headline_text_insert><![CDATA[Create text]]></headline_text_insert>
<!-- Headline und Subheadline für die Bearbeitungsansicht im Backend -->
<headline_update><![CDATA[Edit headline]]></headline_update>
<headline_text_update><![CDATA[Edit text]]></headline_text_update>
<!-- Headline und Subheadline für die Detailansicht im Backend -->
<headline_show><![CDATA[List headline]]></headline_show>
<headline_text_show><![CDATA[List text]]></headline_text_show>
<!-- Datenfelder zur Verwaltung der Datenbank -->
<group>
<subgroup>
<field>
<db_field>id</db_field>
<db_definition>int(12) NOT NULL auto_increment</db_definition>
<database_only>TRUE</database_only>
</field>
<field>
<db_field>enabled</db_field>
<db_definition>enum('Y','N') default 'N'</db_definition>
<database_only>TRUE</database_only>
</field>
<field>
<db_field>fk_account</db_field>
<db_definition>int(12) default '0'</db_definition>
<database_only>TRUE</database_only>
</field>
<field>
<db_field>insertDate</db_field>
<db_definition>datetime NOT NULL default '0000-00-00 00:00:00'</db_definition>
<database_only>TRUE</database_only>
</field>
<field>
<db_field>changeDate</db_field>
<db_definition>datetime NOT NULL default '0000-00-00 00:00:00'</db_definition>
<database_only>TRUE</database_only>
</field>
</subgroup>
</group>
<!-- Datenfelder des Formulars -->
<group>
<subgroup>
<!-- Frage -->
<field>
<eingabe_name>M_FAQ_FIELD_QUESTION</eingabe_name>
<db_field>question</db_field>
<db_definition>varchar(255) default NULL</db_definition>
</field>
<!-- Antwort -->
<field>
<eingabe_name>M_FAQ_FIELD_ANSWER</eingabe_name>
<db_field>answer</db_field>
<db_definition>text</db_definition>
<form_type>textarea</form_type>
</field>
<!-- Schlagwörter -->
<field>
<eingabe_name>M_FAQ_FIELD_TAGS</eingabe_name>
<db_field>tags</db_field>
<db_definition>varchar(255) default NULL</db_definition>
</field>
<!-- Anzahl Abrufe -->
<field>
<eingabe_name>M_FAQ_FIELD_VIEWCNT</eingabe_name>
<db_field>viewcnt</db_field>
<db_definition>int(12) default '0'</db_definition>
</field>
</subgroup>
</group>
</page>
</formfields>