Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Allgemeines zu Drupal ›

verschiedene rollen, verschiedene Anmeldungen

Eingetragen von Piet (500)
am 21.05.2008 - 22:21 Uhr in
  • Allgemeines zu Drupal

Hallo,

mich beschäftigt sehr intensiv eine Lösung um 2 verschiedene Regestrierungformulare zu kreieren.

Folgend soll demonstrieren was gemeint ist:

es gibt Benutzerolle: A und Benutzerolle: B

beide sollen sich durch den Regestrieren-Button automatisch regestrieren können, jedoch
soll Benutzer A nur 4 Felder der Regestrierungseingaben eingeben und sehen, Benutzer B dafür aber 7.

Im Klartext, es sollen 2 verschiedene Formulare für die Regestrierung erstellt werden, diese mit jeweils einer zugewiesenen Rolle.

Ich habe bisher über das profile-Modul ein Gesamtfeld zur Regestrierung ( Name, telefon, Unternehmen) angelegt, hierbei kannn der neue User eine Rolle durch das "Apply for role Modul" sprich: a oder b auswählen. Das ist aber nicht die wirkliche Lösung.

Wie erwähnt es soll möglich sein zu sagen, ich möchte mich für Rolle A oder B regestrieren, wenn A gewählt kommt ein Formular, dass direkt in diese rolle abspeichert mit 4 feldern. Bei B speichert es den User für die Rolle B ab, hier sind dann 7 Felder zu befüllen.

Hoffe das war nicht zu unverständlich..

‹ Drupal-Geschwindigkeit Bild Upload Verzeichnis ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Wie ist dieser Ansatz: Du

Eingetragen von netzkoop (1820)
am 22.05.2008 - 01:08 Uhr

Wie ist dieser Ansatz:
Du erstellst ein Profil-Feld zum auswählen der Rolle bei Registrierung.
Mit einem eigenen Modul fragst du dieses Feld ab und änderst das Formular entsprechend, blendest die zusätzlichen Felder ein...

  • Anmelden oder Registrieren um Kommentare zu schreiben

der ansatz ist gut, leider

Eingetragen von Piet (500)
am 22.05.2008 - 12:25 Uhr

der ansatz ist gut, leider weiss ich nicht wie ich das angehen soll.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hier ein wenig Code ..

Eingetragen von UwBach (310)
am 22.05.2008 - 13:57 Uhr

.. für eine eigene Registrierung. Hierbei war die Schwierigkeit das die Daten auf einer externen Datenbank liegen die entsprechend eingebunden werden musste. Es gibt zwei Rollen "Standard" und "Premium". Schau einfach mal in die Funktion abc_registrierung_form(), hier habe ich ein Beispiel mit '#access' => ($premium == 3)? TRUE : FALSE, eingebunden.

Der Code ist natürlich verfremdet, sollte dir aber weiter helfen.

<?php
// $ID$

/**
* @file
* In diesem Script werden die Anpassungen gemacht
*/

/**
* Das Menüsystem
*/
function abc_menu($may_chache)
{
// Holen des User-Objektes
global $user;
$items = array();

// nur für angemeldete User
if(!$may_chache && ($user -> uid > 0))
{
// Zugriff auf das Registrierungsformular für Standard-Mitgliedschaft für NichtMitglieder
$items[] = array(
'path' => 'abc/registerstandard',
'title' => t('Antrag auf kostenlose Registrierung'),
'callback' => 'abc_registerablehnung',
'access' => TRUE,
'type' => MENU_CALLBACK
);
// Zugriff auf das Registrierungsformular für Premium-Mitgliedschaft für Nichtmitglieder
$items[] = array(
'path' => 'abc/registerpremium',
'title' => t('Antrag auf Premium Registrierung'),
'callback' => 'abc_registerablehnung',
'access' => TRUE,
'type' => MENU_CALLBACK
);
}
// nur für nicht angemeldete User
else
{
// Zugriff auf das Registrierungsformular für Standard-Mitgliedschaft für NichtMitglieder
$items[] = array(
'path' => 'abc/registerstandard',
'title' => t('Antrag auf kostenlose Registrierung'),
'callback' => 'abc_registerstandard',
'access' => TRUE,
'type' => MENU_CALLBACK
);
// Zugriff auf das Registrierungsformular für Premium-Mitgliedschaft für Nichtmitglieder
$items[] = array(
'path' => 'abc/registerpremium',
'title' => t('Antrag auf Premium Registrierung'),
'callback' => 'abc_registerpremium',
'access' => TRUE,
'type' => MENU_CALLBACK
);
}
// Nur für angemeldete User die abc-Mitglieder sind und sich auf der Seite registriert haben
if (($uid = $user -> uid) && is_numeric($uid))
{
    if ($user->uid and $user -> abc_member_id > 0)
{
      $access = true;
      $acc = $user;
    }
   
    if ($access)
{
      $items[] = array('path' => 'user/'.$uid.'/abc_profil',
        'title' => t('Mein Profil'),
        'access' => TRUE,
        'callback' => 'abc_user_page',
        'callback arguments' => array($acc),
        'type' => MENU_LOCAL_TASK,
        'weight' => 0,
      );
         
    }
  }

return $items;
} // END abc_menu()


/**
* Registrierung einer Standard-Mitgliedschaft
*/
function abc_registerstandard()
{

$uebergabe = '';

$uebergabe .= drupal_get_form('abc_registrierung_form');
return $uebergabe;
} // END abc_registerstandard()

/**
* Registrierung einer Premium-Mitgliedschaft
*/
function abc_registerpremium()
{
$uebergabe = '';

//$values = array('abc_registrierung_form' => 2);

$uebergabe .= drupal_get_form('abc_registrierung_form', $uid, $values, 3);

return $uebergabe;
} // END abc_registerpremium()

/**
* Ablehnung für registrierte Mitglieder
*/
function abc_registerablehnung()
{
$uebergabe = 'Sie sind schon Mitglied der abc<br />Zur &Auml;nderung der Mitgliedschaft senden Sie uns eine Mail oder benutzen Sie das Mitgliedsprofil.<br /><br />Ihr abc-Team';

return $uebergabe;
} // END abc_registerablehnung()

/**
* Funktion zur Registrierung der Daten einer Registrierung
*
* @param $uid - Integer :: Die System-UID der abc-Datenbank
* @param $values - Array :: Kann alle Werte zur Übergabe enthalten
* @param $premium - Integer :: steht auf 2 wenn eine Premium-Mitgliedschaft angefordert wird
*
* @return $form - Array :: enthält alle benötigten Formularelement nach Drupal-Syntax
*/
function abc_registrierung_form($uid = 0, $values = array(), $premium = 0)
{
// Div-Container für CSS-Layout
$form = array(
'#prefix' => '<div class="reg_form">',
'#suffix' => '</div>'
);

// Setzen des Multipart um das hochladen eine Photos zu ermöglichen
$form['#attributes']['enctype'] = 'multipart/form-data';

// Das erste Fieldset mit den Basisdaten
$form['basisdaten'] = array(
'#title' => t('Die Basisdaten'),
'#type' => 'fieldset',
'#description' => t('Alle Daten die mit einem * gekennzeichnet sind, sind Pflichtangaben. Wir gehen mit Ihren Daten selbstverst&auml;ndlich vertraulich um.'),
'#prefix' => '<div class="reg_form_basisdaten">',
'#suffix' => '</div>'
);

$form['basisdaten']['benutzername'] = array(
'#title' => t('Benutzername'),
'#type' => 'textfield',
'#description' => t('mindestens vier Buchstaben'),
'#maxlength' => 50,
'#size' => 50,
'#required' => true,
'#default_value' => ((array_key_exists('benutzername', $values))?$values['benutzername']:''),
'#disabled' => ((array_key_exists('benutzername', $values) and $values['benutzername'] != '')?true:false),
); //


$form['basisdaten']['f_name'] = array(
'#title' => t('Vorname'),
'#type' => 'textfield',
'#maxlength' => 50,
'#size' => 50,
'#required' => true,
'#default_value' => ((array_key_exists('f_name', $values))?$values['f_name']:''),
'#access' => ($premium == 3)? TRUE : FALSE,
);

$form['basisdaten']['l_name'] = array(
'#title' => t('Nachname'),
'#type' => 'textfield',
'#maxlength' => 50,
'#size' => 50,
'#required' => true,
'#default_value' => ((array_key_exists('l_name', $values))?$values['l_name']:''),
'#access' => ($premium == 3)? TRUE : FALSE,
);

$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Senden'),
'#prefix' => '<div class="reg_form_submit">',
'#suffix' => '</div>'
);

return $form;
} // END abc_registrierung_form

/**
* Validierung der Formulareingaben aus der Registrierung
*/
function abc_registrierung_form_validate($form_id, $form_values)
{

// benutzername - Benutzername
// Prüfen auf Mindestlänge
if(strlen($form_values['benutzername']) < 4)
{
form_set_error('benutzername', t('Der Benutzername ist zu kurz'));
}

// Prüfen ob der Benutzername oder die Email schon vorhanden ist
else
{
// prüfen ob der Benutzername schon im Drupalsystem ist
// Abfrage auf die Tabelle {users}, ggf. Ermitteln des Status und des Anlegedatums
$query_drupal = 'SELECT created, status, name, mail, init FROM {users} WHERE name = LOWER("%s") OR mail = LOWER("%s") OR init = LOWER("%s")';

$ergDB_drupal = db_query($query_drupal, $form_values['benutzername'], $form_values['email'],$form_values['email']);

// prüfen ob Ergebnisse gefunden wurden
if(db_num_rows($ergDB_drupal) > 0)
{
// holen der Benutzer-Daten
while($erg_drupal = db_fetch_array($ergDB_drupal))
$benutzer_drupal[] = $erg_drupal;

// das darf nie passieren - sonst ist etwas schief gelaufen
if(count($benutzer_drupal) > 1)
{
drupal_set_message('Es ist zu einem scherwiegenden Fehler gekommen. Bitte wenden Sie sich an den Administrator; Fehler k78lv.');
drupal_goto('./');
}
// es ist nur ein Nutzer gefunden
elseif(count($benutzer_drupal) == 1)
{
// Der benutzer wurde gesperrt - aus dem Formular schießen
if(!$benutzer_drupal[0]['status'])
{
drupal_set_message('Sie wurden gesperrt, bitte wenden Sie sich an den Administrator; Fehler k78ls.');
drupal_goto('./');
}
// prüfen ob der Benutzername übereinstimmt
elseif(strcasecmp($form_values['benutzername'], $benutzer_drupal[0]['name']) == 0)
{
// prüfen ob die Email-Adressen übereinstimmen
if(strcasecmp($form_values['email'], $benutzer_drupal[0]['mail']) == 0 OR strcasecmp($form_values['email'], $benutzer_drupal[0]['init']) == 0)
form_set_error('benutzername', t('Der Benutzername %benutzername und die Email-Adresse %email sind schon vergeben. Sie k&ouml;nnen sich an die Mitgliederbetreuung wenden - <a href="@link">zur Mitgliederbetreuung</a> ',
array(
'%benutzername' => $form_values['benutzername'],
'%email' => $form_values['email'],
'@link' => url('contact')
)));
// es stimmt nur der Benutzername überein
else
form_set_error('benutzername', t('Der Benutzername %benutzername ist schon vergeben.', array('%benutzername' => $form_values['benutzername'])));
}
// nur die Email-Adresse ist schon registriert
else
form_set_error('email', t('Die Email-Adresse %email ist schon vergeben.', array('%email' => $form_values['email'])));

}
}
// Wenn in den Drupal-Usern kein Ergebnis vorlag - schauen wir in der abc-Datenbank nach
elseif($form_values['abc_uid'] == 0)
{
// Drupal db auf die abc-Datenbank umstellen
db_set_active('abc_db_member');

// Prüfen ob ein Mitglied schon mit dem Benutzernamen oder der Email existiert
$query_abc = 'SELECT m.idabc_member, m.benutzername AS name, a.email FROM abc_member AS m, abc_member_adress AS a WHERE (m.benutzername = LOWER("%s") OR a.email = LOWER("%s")) AND m.idabc_member = a.abc_member_id';

$ergDB_abc = db_query($query_abc, $form_values['benutzername'], $form_values['email']);

// Wenn Ergebniss auf der abc-Datenbank gefunden werden
if(db_num_rows($ergDB_abc) > 0)
{
// holen der Benutzer-Daten
while($erg_abc = db_fetch_array($ergDB_abc))
$benutzer_abc[] = $erg_abc;

// Die Datenbank wieder auf Default-Wert setzen
db_set_active('default');

// das darf nie passieren - sonst ist etwas schief gelaufen
if(count($benutzer_abc) > 1)
{
drupal_set_message('Es ist zu einem scherwiegenden Fehler gekommen. Bitte wenden Sie sich an den Administrator; Fehler g78lv.');

// Auf Startseite leiten
drupal_goto('./');
}
// es ist nur ein Nutzer gefunden
elseif(count($benutzer_abc) == 1)
{

// prüfen ob der Benutzername übereinstimmt
if(strcasecmp($form_values['benutzername'], $benutzer_abc[0]['name']) == 0)
{
// prüfen ob die Email-Adressen übereinstimmen
if(strcasecmp($form_values['email'], $benutzer_abc[0]['email']) == 0)
form_set_error('benutzername', t('Der Benutzername %benutzername und die Email-Adresse %email sind schon vergeben. Sie k&ouml;nnen sich an die Mitgliederbetreuung wenden - <a href="@link">zur Mitgliederbetreuung</a> ',
array(
'%benutzername' => $form_values['benutzername'],
'%email' => $form_values['email'],
'@link' => url('contact')
)));
// es stimmt nur der Benutzername überein
else
form_set_error('benutzername', t('Der Benutzername %benutzername ist schon vergeben.', array('%benutzername' => $form_values['benutzername'])));
}
// nur die Email-Adresse ist schon registriert
else
form_set_error('email', t('Die Email-Adresse %email ist schon vergeben.', array('%email' => $form_values['email'])));
}


}// END if - abc Datenbank

// Die Datenbank wieder auf Default-Wert setzen
db_set_active('default');

} // END else abc-DB überprüfen
} // END else Benutzernamen überprüfen

} // END abc_registrierung_validate()

/**
* Ergebnisse nach der Validierung erfassen
*/
function abc_registrierung_form_submit($form_id, $form_values)
{
// Wenn keine abc_id gesetzt ist = Neuregistrierung
if($form_values['abc_uid'] == 0)
{
// mach was mit den Daten

} // END if($form_values['abc_id'] == 0)
// ab hier werden updates gemacht
else
{
global $user;


if($aenderungen_gemacht)
drupal_set_message(t('Ihre Daten wurden ge&auml;ndert.'));

return 'user/'.$user -> uid.'/abc_profil';
}

// Die Registrierung ist abgeschlossen und der User muss über weiteres Vorgehen informiert werden
return 'dankeregister';
} // END abc_registrierung_fom_validaten()

Ich hoffe das hilft ein wenig. Denk daran die User auch im Drupal-System anzumelden (userr_save()), falls du das über eine eigene Datenbank machst.

Gruß

UwBach

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 1 Woche 4 Tagen
  • Hey danke
    vor 1 Woche 5 Tagen
  • Update: jetzt gibt's ein
    vor 1 Woche 6 Tagen
  • Hallo, im Prinzip habe ich
    vor 2 Wochen 3 Tagen
  • Da scheint die Terminologie
    vor 2 Wochen 3 Tagen
  • Kannst doch auch alles direkt
    vor 3 Wochen 1 Tag
  • In der entsprechenden View
    vor 3 Wochen 1 Tag
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 1 Tag
  • gelöst
    vor 5 Wochen 4 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 5 Wochen 5 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20451

Neue User:

  • ByteScrapers
  • Mroppoofpaync
  • 4aficiona2

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 8 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association