Contao-Camp 2024
Ergebnis 1 bis 10 von 10

Thema: Zuordnung Mitglieder zu Benutzer (Vertreter)

  1. #1
    Contao-Nutzer Avatar von wdm
    Registriert seit
    11.04.2011.
    Beiträge
    230

    Standard Zuordnung Mitglieder zu Benutzer (Vertreter)

    Hallo,
    ich stehe gerade vor einem Problem mit der Zuordnung von Mitgliedern zu einem Vertreter.

    Die Rahmenbedingungen:
    Es soll eine Vorbestellseite für B2B-Kunden erstellt werden.
    Die Kunden werden vorab als Mitglieder im Backend angelegt und sollen jeweils einem Vertreter zugeordnet werden.
    Nach dem Login im Frontend sollen diese Artikel aus einer Kollektion vorbestellen können.
    Nach Abschluss der Bestellung soll sowohl der Kunde als auch der zugeordnete Vertreter per E-Mail (Notification Center) eine Liste der georderten Artikel erhalten.
    Es werden keine Zahlungen abgewickelt und auch ein Versand erfolgt auf dieser Basis nicht.
    Quasi nur eine Wunschliste mit Login und E-Mail-Versand.

    Aktueller Stand:
    Mittels Isotope habe ich die Katalog- und Bestellseiten (durch Templateanpassung) soweit umgebogen, das die Anforderungen passen.

    Problem:
    Wie bekomme ich nun die Vertreter den Mitgliedern zugeordnet?
    Ich habe mir vorgestellt, als "Vertreter-Verwaltung" die Backend-Benutzer zu verwenden. Es würde auch eine Zuordnung innerhalb der Mitglieder (separate Mitgliedergruppe) funktionieren, aber aus Übersichtlichkeitsgründen würde ich eher zu den Benutzern tendieren. Alles was ich dazu benötige ist der Vertretername und dessen E-Mail.
    Nun brauche ich nur eine Verknüpfung (Select-Menü) in der Mitgliederverwaltung dazu.
    Ich nehme an, dass das mit einer DCA-Anpassung machbar sein sollte. Habe aber damit bisher keine Erfahrung.

    Für Contao 3 gab es mal die Erweiterung xtmembers_fieldeditor, mit der ich ein ähnliches Problem gelöst habe. Leider ist diese Erweiterung nicht mehr (für Contao 4) verfügbar.
    Eine ähnliche Erweiterung habe ich nicht gefunden.

    Kann mir einer der Experten einen Tip zur DCA-Konfiguration geben bzw. ein evtl. passendes Plugin empfehlen?

  2. #2
    Contao-Urgestein Avatar von cliffparnitzky
    Registriert seit
    08.10.2010.
    Ort
    Lüneburg
    Beiträge
    2.446
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Also, da die Benutzer ja für den Backend Zugriff benötigt werden, würde ich dir empfehlen, die Vertreter auch in den Mitgliedern zu pflegen. So kann im Zweifel auch mal ein Vertreter relativ einfach aufsteigen.

    Für die Zuordnung der Vertreter wäre die DCA Anpassung notwendig ... das ganze als Select abzubilden ist wahrscheinlich das schnellste und einfachste.

    Für die Einbindung ins Notification Center wäre dann ein z.B. ein Inserttag möglich, der die E-Mail Adresse des Vertreters ermittelt.

  3. #3
    Contao-Nutzer Avatar von wdm
    Registriert seit
    11.04.2011.
    Beiträge
    230

    Standard

    Da war ich ja mit meinem Ansatz gar nicht so weit weg. Nur habe ich, wie gesagt, mit DCA-Anpassungen null Erfahrung.
    Kannst Du mir da einen Ansatzpunkt (Codebeispiel) geben?

  4. #4
    Contao-Urgestein Avatar von cliffparnitzky
    Registriert seit
    08.10.2010.
    Ort
    Lüneburg
    Beiträge
    2.446
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Die DCA Änderung könnte so aussehen:

    https://github.com/contao/contao/blo....php#L187-L195

  5. #5
    Contao-Nutzer Avatar von wdm
    Registriert seit
    11.04.2011.
    Beiträge
    230

    Standard

    Nach einer Weile try and error habe ich nun die zusätzlich benötigten Felder im Backend in die Mitgliederverwaltung bekommen.
    Wie gebe ich nun aber die Felder in einem Frontend Template aus bzw. greife darauf zu?

    Im konkreten Fall habe ich die beiden Felder Vertreter (vertretername) und E-Mail (vertreteremail) hinzugefügt.
    Diese benötige ich nun im Isotope Checkout / Bestellübersicht zur Anzeige.

    Zusätzlich soll eine Kopie der Bestellbestätigungs-E-Mail an den beim Mitglied hinterlegten Vertreter geschickt werden.
    Eine separate Nachricht dafür habe ich angelegt.
    Alle Versuche darauf im Notification Center zuzugreifen schlugen bisher aber fehl.

    Ist sicher keine große Sache, aber für jemand der kein Programmierer ist und sich damit bisher nicht beschäftigt hat, die Suche nach der Nadel im Heuhaufen bzw. weiß ich gar nicht wo ich überhaupt ansetzen soll?

  6. #6
    Contao-Nutzer Avatar von wdm
    Registriert seit
    11.04.2011.
    Beiträge
    230

    Standard

    Folgende DCA-Anpassung habe ich nun vorgenommen, die auch im Backend funktioniert:

    PHP-Code:
    <?php

    /* Vertretername dem Mitglied zuordnen */
    $GLOBALS['TL_DCA']['tl_member']['fields']['vertretername'] = [
        
    'label'     => ['Vertretername''Hier kann der zugehörige Vertretername hinterlegt werden.'],
        
    'inputType'               => 'select',
        
    'foreignKey'              => 'tl_user.CONCAT(name)',
        
    'eval'                    => array('chosen'=>true'doNotCopy'=>true'includeBlankOption'=>true'tl_class'=>'w50'),
        
    'sql'                     => "varchar(255) NOT NULL default ''",
        
    'relation'                => array('type'=>'belongsTo''load'=>'lazy')
    ];

    /* Vertreter E-Mail dem Mitglied zuordnen */
    $GLOBALS['TL_DCA']['tl_member']['fields']['vertreteremail'] = [
        
    'label'     => ['Vertreter E-Mail''Hier kann die zugehörige Vertreter E-Mail Adresse hinterlegt werden.'],
        
    'inputType'               => 'select',
        
    'foreignKey'              => 'tl_user.CONCAT(email)',
        
    'eval'                    => array('chosen'=>true'doNotCopy'=>true'includeBlankOption'=>true'tl_class'=>'w50'),
        
    'sql'                     => "varchar(255) NOT NULL default ''",
        
    'relation'                => array('type'=>'belongsTo''load'=>'lazy')
    ];

    use 
    Contao\CoreBundle\DataContainer\PaletteManipulator;

    PaletteManipulator::create()
        
    // add a new Legend after the "address_legend"
        
    ->addLegend('Vertreter Einstellungen''contact_legend'PaletteManipulator::POSITION_AFTER)

        
    // directly add new field(s)s to the new legend
        
    ->addField('vertretername''Vertreter Einstellungen'PaletteManipulator::POSITION_APPEND)
        ->
    addField('vertreteremail''Vertreter Einstellungen'PaletteManipulator::POSITION_APPEND)

        
    // then apply it to the palette as usual
        
    ->applyToPalette('default''tl_member')
    ;
    Zusätzlich habe ich im Isotope Checkout Modul ein Formular eingebunden.
    In diesem Formular habe ich nun eine Textarea (für Bemerkungen) und jeweils ein Textfeld für den Vertreternamen (vorbelegt mit {{user::vertretername}}) und die Vertreter E-Mail (vorbelegt mit {{user::vertreteremail}}.
    Im Frontend sind diese Felder aber nun jeweils mit der zugewiesenen User-ID aus der tl_user Tabelle belegt. Ich benötige aber die referenzierten Werte aus der tl_user Tabelle (name, email).

    Wie komme ich an diese Werte ran bzw. kann diese dort ausgeben?

  7. #7
    Contao-Nutzer Avatar von Black Pirate
    Registriert seit
    10.02.2015.
    Beiträge
    224

    Standard

    Ich denke dein Problem ist, das der foreignKey die ID speichert, und nicht was du im Backend siehst.

    Was du machen könntest:
    Ein Text-Feld oder -Area erstellen, mit SaveCallback, darin speicherst du den Wert aus deiner Vertreter-Auswahl.


    Zum Beispiel so:

    Code:
    'vertreterDaten'    => [
                'label'       => &$GLOBALS['TL_LANG']['tl_member']['vertreterDaten'],
                'exclude'     => true,
                'inputType'   => 'text',
                'eval'        => ['rte' => 'tinyMCE', 'tl_class' => 'clr'],
    	    'save_callback' => array(array('classVertreterDaten', 'generateVertreterDaten')),
                'sql'         => 'mediumtext NULL',
    ],
    Dann die function dazu:

    Code:
    class classVertreterDaten extends Backend
    {
        public function generateVertreterDaten($varrValue, DataContainer $dc)
        {
    		
    		return '<p><b>'.$dc->activeRecord->vertretername.'</b><br>'.$dc->activeRecord->vertreteremail.'</p>';
        }
    }
    und zu guter letzt...

    im Formular anzeigen als HTML-Feld mit Inhalt: {{user::vertreterDaten}}



    (Habs nicht getestet, aber müsste funzen)

  8. #8
    Contao-Nutzer Avatar von wdm
    Registriert seit
    11.04.2011.
    Beiträge
    230

    Standard

    Leider nein.

    Ich habe die zusätzlichen Anpassungen in der tl_member.php vorgenommen.
    Diese sieht nun so aus:

    PHP-Code:
    <?php

    /* Vertretername dem Mitglied zuordnen */
    $GLOBALS['TL_DCA']['tl_member']['fields']['vertretername'] = [
        
    'label'     => ['Vertretername''Hier kann der zugehörige Vertretername hinterlegt werden.'],
        
    'inputType'               => 'select',
        
    'foreignKey'              => 'tl_user.CONCAT(name)',
        
    'eval'                    => array('chosen'=>true'doNotCopy'=>true'includeBlankOption'=>true'tl_class'=>'w50'),
        
    'sql'                     => "varchar(255) NOT NULL default ''",
        
    'relation'                => array('type'=>'belongsTo''load'=>'lazy')
    ];

    /* Vertreter E-Mail dem Mitglied zuordnen */
    $GLOBALS['TL_DCA']['tl_member']['fields']['vertreteremail'] = [
        
    'label'     => ['Vertreter E-Mail''Hier kann die zugehörige Vertreter E-Mail Adresse hinterlegt werden.'],
        
    'inputType'               => 'select',
        
    'foreignKey'              => 'tl_user.CONCAT(email)',
        
    'eval'                    => array('chosen'=>true'doNotCopy'=>true'includeBlankOption'=>true'tl_class'=>'w50'),
        
    'sql'                     => "varchar(255) NOT NULL default ''",
        
    'relation'                => array('type'=>'belongsTo''load'=>'lazy')
    ];

    $GLOBALS['TL_DCA']['tl_member']['fields']['vertreterDaten'] = [
        
    'label'       => &$GLOBALS['TL_LANG']['tl_member']['vertreterDaten'],
        
    'exclude'     => true,
        
    'inputType'   => 'text',
        
    'eval'        => ['rte' => 'tinyMCE''tl_class' => 'clr'],
        
    'save_callback' => array(array('classVertreterDaten''generateVertreterDaten')),
        
    'sql'         => 'mediumtext NULL',
    ];

    class 
    classVertreterDaten extends Backend
    {
        public function 
    generateVertreterDaten($varrValueDataContainer $dc)
        {
            
            return 
    '<p><b>'.$dc->activeRecord->vertretername.'</b><br>'.$dc->activeRecord->vertreteremail.'</p>';
        }
    }

    use 
    Contao\CoreBundle\DataContainer\PaletteManipulator;

    PaletteManipulator::create()
        
    // add a new Legend after the "address_legend"
        
    ->addLegend('Vertreter Einstellungen''contact_legend'PaletteManipulator::POSITION_AFTER)

        
    // directly add new field(s)s to the new legend
        
    ->addField('vertretername''Vertreter Einstellungen'PaletteManipulator::POSITION_APPEND)
        ->
    addField('vertreteremail''Vertreter Einstellungen'PaletteManipulator::POSITION_APPEND)
        ->
    addField('vertreterDaten''Vertreter Einstellungen'PaletteManipulator::POSITION_APPEND)

        
    // then apply it to the palette as usual
        
    ->applyToPalette('default''tl_member')
    ;
    Das zusätzliche Textfeld wird mir zwar im Backend und der Inhalt über den Inserttag auch im Frontend-Formular angezeigt. Nach dem Speichern der Vertreter-Zuordnung (Name, E-Mail) tauchen in dem Feld aber auch nur die ID's auf und nicht die zugehörigen Werte.

    Gibt es denn keine Möglichkeit anstatt der ID (foreignKey) direkt den Wert aus der referenzierten Tabelle in dem neuen Feld zu speichern?
    Geändert von wdm (05.05.2021 um 12:50 Uhr)

  9. #9
    Contao-Nutzer Avatar von Black Pirate
    Registriert seit
    10.02.2015.
    Beiträge
    224

    Standard

    Aktuell fällt mir nur dieser Weg ein:

    - HTML-Feld ins Formular mit {{file::xyz.php}}
    - Template erstellen mit SQL Abfrage, zB. mit MemberModel

  10. #10
    Contao-Urgestein Avatar von cliffparnitzky
    Registriert seit
    08.10.2010.
    Ort
    Lüneburg
    Beiträge
    2.446
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ansonsten, wenn das Rumgestocher nicht zu einem Ergebnis führt: Kleinstauftrag -> https://community.contao.org/de/foru...Auftr%C3%A4ge)

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
  •