Benutzerdefinierte Profilfelder per migration anlegen

In diesem Forum gibt es Starthilfe zum neuen Extension-System von phpBB 3.1/3.2. Fragen zur Entwicklung von Extensions und zur Konvertierung von phpBB 3.0.x MODs sind ebenfalls willkommen.
Benutzeravatar
Kirk
Supporter
Supporter
Beiträge: 5493
Registriert: 24.05.2010 08:31
Kontaktdaten:

Benutzerdefinierte Profilfelder per migration anlegen

Beitragvon Kirk » 27.03.2016 19:51

Hallo
Ich habe für das Board3 Portal ein Wettermodul erstellt, dazu benötige ich 2 Benutzerdefinierte Profilfelder die ich per migration anlege.
Bei der Installation dieser EXT werden zwar diese beiden Felder angelegt, aber bei einem Feld möchte ich bei "Spezifische Optionen der Feldart" unter "Zulässige Werte:" die Option Nur Alphanumerische Zeichen haben.
In der migrationsdatei habe ich u.a. folgendes eingetragen:

Code: Alles auswählen

'field_validation'        => '[\w]+'

Dies gibt mir aber das hier aus: Nur Alphanumerische und Unterstriche _ unter root/phpbb/db/migration/data/v310/profilefield_googleplus.php ist der selbe Wert eingetragen und gibt auch Nur Alphanumerische Zeichen aus, was ist an meiner migrationsdatei falsch?
Noch eine Frage, wie kann man die Feld Beschreibung in der migrationsdatei mit Sprachvariablen anlegen?
Ich habe zwar auf .com dieses Thema gefunden, blicke da aber noch nicht ganz durch.
Hier die beiden Datein:
https://www.phpbb.de/support/pastebin.p ... iew&s=1568
https://www.phpbb.de/support/pastebin.p ... iew&s=1569

Benutzeravatar
gn#36
Administrator
Administrator
Beiträge: 9175
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: Benutzerdefinierte Profilfelder per migration anlegen

Beitragvon gn#36 » 27.03.2016 23:53

\w steht für ein beliebiges alphanumerisches Zeichen oder einen Unterstrich (wenn man mal von Umlauten und ähnlichem absieht ist das also sowas ähnliches wie A-Za-z0-9_), von daher ist diese Bezeichnung dafür eigentlich schon richtig.

Ich weiß nicht was phpBB sonst standardmäßig verwendet, aber du könntest statt [\w]+ mal [^\W_]+ probieren (Achtung: Hier ist das W groß!), das sollte von der Validierung her auf jeden Fall das Ergebnis liefern was du suchst, egal wie es nun bezeichnet wird: Das ^ ist eine Negation, der die Selektion umkehrt, das \W für sich gesehen passt auf alles außer alphanumerischen Zeichen und Unterstrichen, der Unterstrich passt auf den Unterstrich. Hierdurch dürfen nur Zeichen enthalten sein, die alphanumerisch sind.

EDIT: In der Datenbank bei mir steht für das Google+ Profilfeld aber als Validierung [a-zA-Z0-9]+ drin. Möglicherweise gibt's irgendwo noch ein Update in einer anderen Migration, die das nachträglich ändert. Das erlaubt auch keine Umlaute sondern nur A-Z und 0-9.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.

Benutzeravatar
Kirk
Supporter
Supporter
Beiträge: 5493
Registriert: 24.05.2010 08:31
Kontaktdaten:

Re: Benutzerdefinierte Profilfelder per migration anlegen

Beitragvon Kirk » 28.03.2016 09:43

Dieses hier [^\W_]+ liefert den Wert Alle Zeichen, bei mir in der Datenbank steht für das Google+ Profilfeld [a-zA-Z0-9]+ drin, dies habe in die Datei eingetragen nun passt der Wert.
Weder auf .com noch bei wiki.phpbb.com hatte ich was gefunden wo steht welcher Wert was erzeugt.
Jetzt muss ich noch das mit Sprachvariablen rausfinden.

Benutzeravatar
gn#36
Administrator
Administrator
Beiträge: 9175
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: Benutzerdefinierte Profilfelder per migration anlegen

Beitragvon gn#36 » 28.03.2016 18:19

Solange [^\W_]+ in der Datenbank steht sind die Werte richtig, egal was phpBB da nun für einen Text zu anzeigt.

Für die Sprachdaten bei Dropdownlisten o.ä. musst du dieses Array befüllen:

Code: Alles auswählen

      /**
      * Language data should be in array -> each language_data in separate key
      * array(
      *    array(
      *        'option_id'     => value,
      *        'field_type'    => value,
      *        'lang_value'    => value,
      *    ),
      *    array(
      *        'option_id'     => value,
      *        'field_type'    => value,
      *        'lang_value'    => value,
      *    ),
      * )
      */
      protected $profilefield_language_data


Den Aufbau verstehst du vermutlich am besten, indem du mal einen Blick in die Daten der Datenbank wirfst. Es muss pro Eintrag in der Liste ein array in dem Array geben, aber nicht einen pro Sprache. lang_value ist die Übersetzung des Eintrags (da gehört dann eine Sprachvariable rein). Das ganze ist gedacht für Profilfelder mit vorgegebenen Auswahlmöglichkeiten. field_type ist der Typ des Eintrags (z.B. profilefields.type.dropdown) option_id ist die ID der Auswahl und sorgt für die Sortierung der Liste. Also wenn du z.B. eine Liste mit 2 Einträgen anlegen willst:

Code: Alles auswählen

protected $profilefield_language_data = array(
    array(
        'option_id'  => 0, //Oberer Eintrag
        'field_type' => 'profilefields.type.dropdown', //Dropdownlistenelement
        'lang_value' => 'KIRK_PF_OPTION_OBERER_EINTRAG',
    ),
    array(
        'option_id'  => 1, // 2. Eintrag
        'field_type' => 'profilefields.type.dropdown', 
        
'lang_value' => 'KIRK_PF_OPTION_UNTERER_EINTRAG',
    ),
); 


Wenn es dir nur um die Bezeichnung des Profilfelds geht, dann brauchst du lediglich eine Sprachvariable die den selben Namen trägt wie das Profilfeld (es sei denn, der Name beginnt mit phpbb_, in dem Fall musst du den Teil weglassen bei der Bezeichnung der Sprachvariablen). Also sprich: Wenn dein Profilfeld den Namen kirk_meinprofilfeld trägt, dann brauchst du eine Sprachvariable namens KIRK_MEINPROFILFELD für die Übersetzung der Bezeichnung.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.

Benutzeravatar
Kirk
Supporter
Supporter
Beiträge: 5493
Registriert: 24.05.2010 08:31
Kontaktdaten:

Re: Benutzerdefinierte Profilfelder per migration anlegen

Beitragvon Kirk » 28.03.2016 19:37

Im Persöhnlichen Bereich wird einem je nach Sprache das Profilfeld (jeweils ein Einzeiliges Textfeld) korrekt angezeigt.
Es geht mir um die Feld-Beschreibung also die dem Benutzer angezeigte Beschreibung für das Feld.

Benutzeravatar
gn#36
Administrator
Administrator
Beiträge: 9175
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: Benutzerdefinierte Profilfelder per migration anlegen

Beitragvon gn#36 » 28.03.2016 23:32

So wie es aussieht lässt die Migration die von sich aus leer. Siehe https://www.phpbb.de/infos/3.1/xref/php ... e.html#l85

Code: Alles auswählen

                  'lang_name'                => $lang_name,
                  'lang_explain'            => '',
                  'lang_default_value'    => '',

Du musst beim Insert das lang_explain Feld füllen, denke ich. Du kannst dir also deine eigene Funktion create_custom_field erstellen, die die vorhandene ersetzt, oder du ergänzt die Daten nachträglich mit einer eigenen custom function in der DB.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.

Benutzeravatar
Kirk
Supporter
Supporter
Beiträge: 5493
Registriert: 24.05.2010 08:31
Kontaktdaten:

Re: Benutzerdefinierte Profilfelder per migration anlegen

Beitragvon Kirk » 29.03.2016 19:06

Ich habe in meiner migrations Datei dieses public function create_custom_field() mit eingefügt und 'lang_explain' gefüllt, jetzt wird die Feld-Beschreibung in der jeweiligen Sprache angezeigt.
Danke für deine Hilfe! :)


Zurück zu „Extension Bastelstube“