Contao-Camp 2024
Ergebnis 1 bis 9 von 9

Thema: Mitglieder, eigenen Datenfeld-Bereich erstellen

  1. #1
    Contao-Fan
    Registriert seit
    31.01.2016.
    Ort
    Kaufbeuren
    Beiträge
    473

    Standard Mitglieder, eigenen Datenfeld-Bereich erstellen

    Hallo zusammen,

    ich bin dabei eine erste Vereinshomepage in Contao umzusetzen.
    Ich möchte gerne unter Mitglieder zu den bestehenden Datenfeld-Bereichen Personendaten, Adressdaten und Kontaktdaten einen weiteren Bereich Vereinsdaten hinzufügen und darin weitere Datenfelder erstellen. Denn die Daten die einzufügen sind, können keinem der bestehenden Bereiche zugeordnet werden. Eigene Datenfelder habe ich bereits angelegt, ein Beispiel siehe weiter unten. Aber wie lege ich einen neuen Datenbereich an? Meine bisherigen Versuche sind allesamt gescheitert. In der Datei ModulePersonalData.php sind die bestehenden Datenbereiche definiert. Ich möchte gern den neuen Bereich als "socialDetails" mit der Benennung "Vereinsdaten" auf der Basis von DCA und Sprachdatei erstellen. Folgende Definitionen sind in der Datei zu finden.
    Wer kann mir bei meinem Anliegen weiterhelfen?
    Danke!

    Gruß
    Thomas


    Datei liegt unter vendor\contao\core-bundle\src\Resources\contao\modules\ModulePersonal Data.php
    PHP-Code:
    // Predefine the group order (other groups will be appended automatically)
    $arrGroups = array
    (
            
    'personal' => array(),
            
    'address'  => array(),
            
    'contact'  => array(),
            
    'social'   => array(),  (soll zugefügt werden)
            
    'login'    => array(),
            
    'profile'  => array()
    );


    $this->Template->loginDetails $GLOBALS['TL_LANG']['tl_member']['loginDetails'];
    $this->Template->addressDetails $GLOBALS['TL_LANG']['tl_member']['addressDetails'];
    $this->Template->contactDetails $GLOBALS['TL_LANG']['tl_member']['contactDetails'];
    $this->Template->socialDetails $GLOBALS['TL_LANG']['tl_member']['socialDetails'];  (soll zugefügt werden)
    $this->Template->personalData $GLOBALS['TL_LANG']['tl_member']['personalData']; 


    Hier ist eins meiner erstellten Datenfelder
    DCA-Datei liegt unter app\resources\\contao\dca
    PHP-Code:
    // Palettes
    $GLOBALS['TL_DCA']['tl_member']['palettes']['default'] = str_replace
    (
        
    'lastname',
        
    'lastname,academic_title',
        
    $GLOBALS['TL_DCA']['tl_member']['palettes']['default']
    );

    // Fields
    $GLOBALS['TL_DCA']['tl_member']['fields']['academic_title'] = array
    (
        
    'label'                   => &$GLOBALS['TL_LANG']['tl_member']['academic_title'],
        
    'exclude'                 => true,
        
    'search'                  => true,
        
    'sorting'                 => true,
        
    'flag'                    => 1,
        
    'inputType'               => 'text',
        
    'eval'                    => array('maxlength'=>255'feEditable'=>true'feViewable'=>true'feGroup'=>'personal''tl_class'=>'w50'),
        
    'sql'                     => "varchar(255) NOT NULL default ''"
    ); 


    Sprachdatei liegt unter app\resources\contao\languages\de\tl_member.php
    PHP-Code:
    $GLOBALS['TL_LANG']['tl_member']['academic_title'] = array
    (
        
    'Titel akademisch',
        
    'Bitte geben Sie den akademischen Titel ein.'
    ); 

  2. #2
    Contao-Fan
    Registriert seit
    31.01.2016.
    Ort
    Kaufbeuren
    Beiträge
    473

    Standard

    Hallo,

    was ich eigentlich erreichen möchte ist folgendes: In der Datei tl_member.php gibt es nachfolgenden Code-Eintrag für die Bereiche mit Datenfeldern (Personendaten, Adressdaten und Kontaktdaten), die jeweils mit {***_legend} definiert sind. Wie kann ich nun erreichen, dass ein weiterer Bereich mit dem Namen {social_legend} per DCA hinzugefügt und dieser Bereich über die Sprachdatei "Vereinsdaten" benannt wird?

    Hier der verkürzte Code aus tl_member.php:
    PHP-Code:
    // Palettes
    'palettes' => array
    (
            
    '__selector__'                => array('login''assignDir'),
            
    'default'                     => '{personal_legend},firstname,lastname;{address_legend},company,street;{contact_legend},phone,mobile,fax,email;
    ), 

    Kann mir bitte jemand bei meinem Anliegen weiterhelfen?
    Danke!


    Gruß
    Thomas

  3. #3
    Contao-Fan Avatar von PaddySD
    Registriert seit
    26.10.2016.
    Ort
    Andechs
    Beiträge
    656

    Standard

    Zuerst solltest Du nie (ja, wirklich nie!) Dateien im vendor-Ordner selbst ändern, dass ist keine gute Idee. Da darf nur der Composer drin rumwurschteln, sonst niemand. Heisst für Dich, Deine Änderungen sollten in einem eigenen Paket landen, mit dem Du den Core erweiterst. Wenn Du das öfter verwenden willst, würde ich als Aufbau das DummyBundle von Sioweb empfehlen: https://github.com/Sioweb/Contao4DummyBundle

    Und dann müsstest Du grundsätzlich unterscheiden, zwischen BE (das sind die xxx_legend) und dem FE (das sind xxxDetails). Zuerst erweiterst Du die Felder im BE, dabei trägst Du die Gruppe in die eval-Optionen der Felder ein (die feXXX-Einträge). Eine neue FE-Gruppe wird dabei automatisch erzeugt.

  4. #4
    Contao-Fan
    Registriert seit
    31.01.2016.
    Ort
    Kaufbeuren
    Beiträge
    473

    Standard

    Zitat Zitat von PaddySD Beitrag anzeigen
    Zuerst solltest Du nie (ja, wirklich nie!) Dateien im vendor-Ordner selbst ändern, dass ist keine gute Idee. Da darf nur der Composer drin rumwurschteln, sonst niemand. Heisst für Dich, Deine Änderungen sollten in einem eigenen Paket landen, mit dem Du den Core erweiterst. Wenn Du das öfter verwenden willst, würde ich als Aufbau das DummyBundle von Sioweb empfehlen: https://github.com/Sioweb/Contao4DummyBundle

    Und dann müsstest Du grundsätzlich unterscheiden, zwischen BE (das sind die xxx_legend) und dem FE (das sind xxxDetails). Zuerst erweiterst Du die Felder im BE, dabei trägst Du die Gruppe in die eval-Optionen der Felder ein (die feXXX-Einträge). Eine neue FE-Gruppe wird dabei automatisch erzeugt.

    Unter Vendor habe ich nichts geändert, es sollte lediglich nur zur Veranschaulichung in meinem Post dienen. Was ich erreichen will ist folgendes: Zu den bestehenden Core-Gruppen (Personendaten, Adressdaten und Kontaktdaten) möchte ich noch eine weitere Gruppe mit der Bezeichnung "Vereinsdaten" anlegen und das mittels DCA und Sprachdatei. Danach unter dieser Gruppe die Felder für die Vereinsdaten anlegen, da der Inhalt dieser Felder keiner anderen Gruppe zuzuordnen ist. Ich weiß zwar wie man Datenfelder anlegt, aber nicht wie das Anlegen einer Core-Gruppe geht. Bei meinen Recherchen habe ich nur Informationen zum Anlegen von eigenen Feldern gefunden, aber nicht wie man eine eigene Core-Gruppe über DCA anlegt. Das ist genau mein Problem, weil ich hierzu noch keine Lösung gefunden habe.


    Gruß
    Thomas

  5. #5
    Contao-Fan Avatar von PaddySD
    Registriert seit
    26.10.2016.
    Ort
    Andechs
    Beiträge
    656

    Standard

    Schonmal gut, keine Änderungen in vendor *thumsup*

    Die Gruppe "erstellen" wird über den Eintrag beim Feld gemacht:
    'eval' => array('maxlength'=>255, 'feEditable'=>true, 'feViewable'=>true, 'feGroup'=>'meineSupiDupiGroup', 'tl_class'=>'w50'),
    Die Gruppe wird dann automatisch hinzugefügt/erzeugt (steht so sogar in Deinem Beispiel: // Predefine the group order (other groups will be appended automatically) ).

    Als Beispiel zum abschauen würde ich Dir empfehlen, mal einen Blick in die xtmembers Erweiterung zu werfen, die macht ja ähnliches. Ich weiss nicht, wie weit die Contao4 kompatibel ist, aber im Aufbau hat sich an der Stelle wenig zwischen 3.x und 4.x verändert, die Grundideen kann man da gut raus lesen:
    https://github.com/hschottm/xtmembers

  6. #6
    Contao-Fan
    Registriert seit
    31.01.2016.
    Ort
    Kaufbeuren
    Beiträge
    473

    Standard

    Vielen Dank für die Informationen, das Anlegen der Gruppe hat jetzt einwandfrei funktioniert. Ich bin bislang davon ausgegangen, dass Gruppen separat und nicht zusammen mit einem Datenfeld angelegt werden müssen, auch bei meinen Recherchen habe ich dazu nichts entsprechendes gefunden. Aber ich habe noch einen Punkt der mir einfach nicht gelingen will, trotz vieler Versuche. Die Gruppe wird jetzt im BE als "social_legend" angezeigt. Wie kann ich es nun erreichen, dass die Gruppe mit der Bezeichnung "Vereinsdaten" im BE dargestellt wird? Kann man diese Benennung irgendwie mit der Sprachdatei umbenennen.

    PHP-Code:
    // Palettes
    $GLOBALS['TL_DCA']['tl_member']['palettes']['default'] = str_replace
    (
        
    'language;',
        
    'language;{social_legend},start_active',
        
    $GLOBALS['TL_DCA']['tl_member']['palettes']['default']
    );

    // Fields
    $GLOBALS['TL_DCA']['tl_member']['fields']['start_active'] = array
    (
        
    'label'                   => &$GLOBALS['TL_LANG']['tl_member']['start_active'],
        
    'exclude'                 => true,
        
    'inputType'               => 'text',
        
    'eval'                    => array('rgxp'=>'date''datepicker'=>true'feEditable'=>true'feViewable'=>true'feGroup'=>'social''tl_class'=>'w50 wizard'),
        
    'sql'                     => "varchar(14) NOT NULL default ''"
    ); 
    Sprachdatei
    PHP-Code:
    $GLOBALS['TL_LANG']['tl_member']['start_active'] = array
    (
        
    'Eintritt als aktives Mitglied',
        
    'Bitte geben Sie das Datum vom Vereinseintritt als aktives Mitglied ein.'
    ); 
    Die Idee mit der Erweiterung xtmembers war im Prinzip ganz gut, aber leider gibt es keine Version für Contao 4.x. Habe es einmal unter Contao 3.5 installiert, aber das Anlegen von Gruppen ist damit nicht möglich. Um zu sehen wie man Datenfelder anlgegt ist es auf jeden Fall geeignet.
    Danke!


    Gruß
    Thomas

  7. #7
    Contao-Fan Avatar von PaddySD
    Registriert seit
    26.10.2016.
    Ort
    Andechs
    Beiträge
    656

    Standard

    Da es sich um Member-Angaben handelt, musst Du die tl_member-Sprachdatei erweitern. Wie machst Du das denn überhupt, hast Du Dir da ein Bundle angelegt? Dann wäre das /src/Ressources/contao/languages/de/tl_member.php (aus dem Gedächtnis... ).

  8. #8
    Contao-Fan
    Registriert seit
    31.01.2016.
    Ort
    Kaufbeuren
    Beiträge
    473

    Standard

    Ich habe es mit viel probieren hinbekommen. Mein Fehler war, dass ich am Ende vom Code ";" vergessen hatte bzw. mir war es nicht bewusst das es nötig ist.

    PHP-Code:
    $GLOBALS['TL_LANG']['tl_member']['social_legend'] = 'Vereinsdaten'

    Jetzt bin ich noch auf einen Punkt gestoßen, den ich im Augenblick nicht lösen kann. Ich würde gerne 5 Checkboxen in einer Reihe nebeneinander auf die Breite bringen wollen. In der Doku habe ich nichts dazu gefunden. Mit "tl_class w50" weißt man die halbe Feldbreite an und mit "tl_class long" die volle Feldbreite. Oder muss man mit "tl_class clr" die Floats zuerst aufheben und per Style die Checkboxen entsprechend anpassen. Wäre schön, wenn es etwas gäbe damit man die Checkboxen auf eine Feldbreite von 20% bringt.
    Danke!

    Gruß
    Thomas

  9. #9
    Contao-Fan Avatar von PaddySD
    Registriert seit
    26.10.2016.
    Ort
    Andechs
    Beiträge
    656

    Standard

    Da bin ich leider raus, das ist CSS...

    Wenn das hier nicht gelesen wird, mach dafür ruhig einen neuen Thread auf, ist ja mit der Originalfrage nicht mehr so verwandt.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •