Folgende Schritte/Anpassungen sind notwendig um einen neuen Feldtyp in einer Artikel-Tabellen zu definieren:
Feldtyp definieren (Datenbank)
Bearbeiten Sie die MySQL Tabelle field_def und fügen Sie den Ident ihres Feldtyps zur Enum-Liste des Felds F_TYP hinzu. Beispiel-SQL:
ALTER TABLE ´field_def´
CHANGE COLUMN ´F_TYP´ ´F_TYP´ ENUM('TEXT','FLOAT','INT','CHECKBOX','MULTICHECKBOX','MULTICHECKBOX_AND','LIST','LONGTEXT','DATE','VARIANT','MEINFELDTYP') NOT NULL DEFAULT 'TEXT' AFTER ´IS_SPECIAL´;
(Hier wurde der Typ "MEINFELDTYP" hinzugefügt)
Feldtyp definieren (PHP-Seitig)
Öffnen Sie die Datei /admin/sys/tabledef.php und fügen Sie ihrem Feldtyp zur Variable $ar_field_types hinzu. Diese sieht etwa wie folgt aus:
public $ar_field_types = array( // fieldtypes 'TEXT' => array ( 'DESC' => 'Textfeld (255 Zeichen)', 'SQL' => "ALTER TABLE ´#TABLE#´ ADD ´#FIELD#´ ´#FIELD2#´ VARCHAR(255) NULL ;", 'FK' => NULL, ), 'LONGTEXT' => array ( 'DESC' => 'Textfeld unbegrenzte Länge', 'SQL' => "ALTER TABLE ´#TABLE#´ ADD ´#FIELD#´ ´#FIELD2#´ LONGTEXT NULL ;", 'FK' => NULL, ), 'INT' => array ( 'DESC' => 'Zahlenfeld (Ganzzahlen)', 'SQL' => 'ALTER TABLE ´#TABLE#´ ADD ´#FIELD#´ ´#FIELD2#´ BIGINT UNSIGNED NOT NULL', 'FK' => NULL, ), // ... weitere Definitionen von Feldtypen );
Am einfachsten duplizieren Sie einen vorhandenen Feldtyp (der dem hinzuzufügenden ähnlich ist) und modifizieren diesen entsprechend ihrer Bedürfnisse. Das Feld DESC ist die im Admin-Bereich dargestellte Beschreibung des Feldtyps. Unter SQL steht ein mit Platzhaltern versehener SQL-Befehl um ein Feld dieses Typs zu einer Artikel-Tabelle hinzuzufügen. Stellen Sie sicher auch den Ident des Feldtyps zu ändern, denn dieser darf niemals doppelt vorkommen. (Die Bezeichnung vor dem "=> array" wie z.B. 'LONGTEXT')
Templates anpassen
Bearbeiten Sie das Template /design/user/default/tpl/my-marktplatz-neu.fields.row.htm (falls nicht vorhanden Kopieren von /design/default/default/tpl) und fügen Sie einen If-Block für ihren neuen Feldtyp hinzu. Standardmäßig sieht ein solcher Block wie folgt aus:
{if field_type==2} <!-- Text --> <input type="hidden" name="tmp_type[{field_field}]" value="text" /> {if field_unit}<div class="input-group">{endif} {if field_unit} <span class="input-group-addon">{htm(field_unit)}</span> {endif} <input type="text" {if field_needed==1} required="required"{endif} onchange="validateInput(this);" onkeyup="validateInputLive(this);" class="form-control" id="{field_field}" name="{field_field}" placeholder="{htm(field_desc)}" title="{htm(field_desc)}" value="^{field_field}°" /> {if field_unit}</div>{endif} {endif}
Um unnötige PHP-Änderungen zu vermeiden können Sie anstelle einer Nummer (wie in diesem Fall 2) mit dem Ident ihres Feldtyps vergleichen. Dies sieht dann z.B. wie folgt aus:
{if field_type_MEINFELDTYP} <input type="hidden" name="tmp_type[{field_field}]" value="multicheckbox_and" /> <input type="text" {if field_needed==1} required="required"{endif} onchange="validateInput(this);" onkeyup="validateInputLive(this);" class="form-control" id="{field_field}" name="{field_field}" placeholder="{htm(field_desc)}" title="{htm(field_desc)}" value="^{field_field}°" /> {endif}