Ergebnis 1 bis 6 von 6

Thema: Mitglieder Registrierung - Mitgliedergruppe abhängig vom ausgewählten Land

  1. #1
    Contao-Nutzer
    Registriert seit
    27.03.2012.
    Beiträge
    7

    Standard Mitglieder Registrierung - Mitgliedergruppe abhängig vom ausgewählten Land

    Hallo zusammen

    Ich habe folgendes Problem bei der Mitglieder Registrierung: ich möchte, dass abhängig vom ausgewähltem Land, das Mitglied in einer bestimmten Gruppe landet. Konkret sollen alle die als Land "Schweiz" gewählt haben, in der Gruppe "Kunden Schweiz" landen, alle anderen Länder sollen in der Gruppe "Kunden Ausland" landen.

    hat jemand einen Lösungsansatz. Dies sollte mit einer einfach if else abfrage machbar sein, jedoch bin ich noch nicht ganz schlau geworden, welches das zugehörige PHP-File ist.

    Danke für eure Hilfe.

  2. #2
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Hi sagi5,

    das funktioniert natürlich. Dazu musst du einen HOOK von Contao nutzen. Geeignet ist dafür der $GLOBALS['TL_HOOKS']['createNewUser']

    Ich hab dir mal ein kleines Modul geschrieben, dass genau deine Funktionalität erledigt:

    Verzeichnisstruktur bitte erstellen und Inhalte der Dateien übernehmen:

    /modules/register_countryToGroup/countryToGroup.php
    /modules/register_countryToGroup/config/config.php


    countryToGroup.php
    PHP-Code:
    <?php

    // countryToGroup.php
    class countryToGroup extends Frontend
    {

        public function 
    __construct()
        {
            
    $this->import("Database");
        }

        public function 
    addToGroup($intId$arrData)
        {
            
    // Zu Gruppen hinzufügen
            
    $arrGroups = array();
            
    $intGroup_CH 1;   // GruppenID für Schweiz
            
    $intGroup_AL 2;   // GruppenID für Ausland


            
    switch($arrData['country'])
            {
                case 
    'ch':
                    
    $arrGroups[] = $intGroup_CH;
                break;

                default:
                    
    $arrGroups[] = $intGroup_AL;
            }
            
    $this->Database->prepare("UPDATE tl_member SET groups = ? WHERE id = ?")->execute(serialize($arrGroups),$intId);
        }

    }
    Ins config-Verzeichnis die Datei config.php mit folgendem Inhalt:

    PHP-Code:
    <?php

    // config.php
    $GLOBALS['TL_HOOKS']['createNewUser'][] = array('countryToGroup''addToGroup');
    Du musst nun lediglich die korrekten IDs zuordnen. Müsste klappen.

    Gruß
    Michael
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  3. #3
    Contao-Nutzer
    Registriert seit
    27.03.2012.
    Beiträge
    7

    Standard

    Hallo Michael

    Wow, besten Dank!!!!
    Funktioniert einwandfrei, genau das, was ich gesucht habe!

    Liebe Grüsse aus der Schweiz
    Andreas

  4. #4
    Contao-Nutzer
    Registriert seit
    17.09.2011.
    Beiträge
    57

    Standard

    hey,

    ich hab so ziemlich das gleiche Problem. nur möchte ich es abhängig von der email Adresse machen, bzw. dem ende der email Adresse. Also z.B. alle von @xyz.de in eine Gruppe schieben.

    Habe das nun wie folgt versucht:

    PHP-Code:
    <?php

    // studentToGroup.php
    class studentToGroup extends Frontend
    {

        public function 
    __construct()
        {
            
    $this->import("Database");
        }

        public function 
    addToGroup($intId$arrData)
        {
            
    // Zu Gruppen hinzufügen
            
    $arrGroups = array();
            
    $intGroup_student 2;   // GruppenID für Studenten
            
    $intGroup_others 3;   // GruppenID für alle anderen

            
    foreach($arrData) {
                if(
    strpos($string,"@xyz.de")!==false) {
                    
    $arrGroups[] = $intGroup_student;
                } else {
                    
    $arrGroups[] = $intGroup_others;
                }
            } 
            
        
            
    $this->Database->prepare("UPDATE tl_member SET groups = ? WHERE id = ?")->execute(serialize($arrGroups),$intId);
        }

    }
    ?>
    Und die config:
    PHP-Code:
    <?php

    // config.php
    $GLOBALS['TL_HOOKS']['createNewUser'][] = array('studentToGroup''addToGroup');

    ?>
    So und nun dacht ich, soll das vllt funktionieren..tut es aber leider nicht. Is was falsch am Programm oder hab ich es nur falsch eingebunden?
    Habe mir einfach einen Ordner register_studentToGroup gemacht und dort die beiden Dateien reingeladen. Im Anschluss dann hochgeladen in den modules Ordner..

    Grüße Stefan

  5. #5
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Hi Stefan,

    der Ordnername ist ziemlich egal, heißt deine Datei auch studentToGroup.php?

    Auch frage ich mich wo der $string herkommt? In deinem Quellcode steht da ja nix drin.
    Code:
    if(strpos($string,"@xyz.de")!==false) {


    Und für was die foreach? Du kennst doch das Feld... email

    Probiers doch mal so, habs nicht getestet, aber so macht das wesentlich mehr sinn, vorallem kannst du beliebig erweitern mit den case:
    PHP-Code:
    // studentToGroup.php 
    class studentToGroup extends Frontend 


        public function 
    __construct() 
        { 
            
    $this->import("Database"); 
        } 

        public function 
    addToGroup($intId$arrData
        { 
            
    // Zu Gruppen hinzufügen 
            
    $arrGroups = array(); 
            
    $intGroup_student 2;   // GruppenID für Studenten 
            
    $intGroup_others 3;   // GruppenID für alle anderen 

            
            
    $strEmailProvider substr($arrData['email'],strpos("@",$arrData['email']));

            switch(
    $strEmailProvider)
            {
              case 
    '@gmx.de'$arrGroups[] = $intGroup_student
              break;
              default: 
    $arrGroups[] = $intGroup_others;        
            }

            
    $this->Database->prepare("UPDATE tl_member SET groups = ? WHERE id = ?")->execute(serialize($arrGroups),$intId); 
        } 


    ?> 
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  6. #6
    Contao-Nutzer
    Registriert seit
    17.09.2011.
    Beiträge
    57

    Standard

    hi,

    bin in php überhaupt nicht fit und habs mir daher ein bisschen zusammengeschustert...
    habe es zwischenzeitlich über einen Datenbanktrigger gelöst.. Werd das aber nachher auch gleich noch wie von dir beschrieben testen, da es schöner ist als mit nem Trigger

    EDIT:
    ok mein Trigger funktioniert nicht und ich find den Fehler nicht...
    Code:
    DELIMITER |
    
    CREATE TRIGGER updateUniUser
    AFTER INSERT
    ON tl_member REFERENCING OLD_TABLE
    FOR EACH ROW BEGIN
    	UPDATE tl_member
    	SET groups = (SELECT groups FROM (SELECT * FROM tl_member) AS t2 WHERE id = 11)
    	WHERE email LIKE '%@uni-ulm.de';
    	END;
    |
    
    DELIMITER;
    hat jemand ne Idee?

    Mit dem Modul klappts leider auch nicht... Muss ich die php Dateien selbst auch nochmal in so Unterordner wie config packen? So ist das bei den anderen Modulen

    Grüße Stefan


    EDIT:
    so habe mein Problem nun endlich gefixt. Hab es mit der Erweiterung [formcheck] gelöst in dem ich den regulären Ausdruck so abgeändert hab, dass er nur noch eine bestimmte endung, also ....@xyz.de zulässt.
    Geändert von holzfaeller (28.11.2012 um 09:45 Uhr)

Aktive Benutzer

Aktive Benutzer

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

Lesezeichen

Lesezeichen

Berechtigungen

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