Regisztráció kóddal

makgab képe

Üdv!

Egyedi modulhoz szeretnék egy saját regisztrációs formot. Pontosabban csak azt szeretném, hogy ha a user egy kóddal bővített linkkel regisztrál, akkor azt a kódot szeretném a modul egy táblájának egy mezőjébe eltárolni.
Pl.:
http://onedomain.hu/user/register?rid=1123345464

Tehát a user regisztrál a szokásos módon, de a regisztrációkor a "1123345464" értéket el szeretném tárolni pl. a mymodule_mytable.rid mezőbe.

Ezt hogyan lehetne megoldani? A hook_form_FORM_ID_alter() fv-t nézgettem, de nem biztos, hogy ez kell.

Drupal verzió: 
makgab képe

A neten talált infók alapján ezt találtam ki:

function mymodule_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id === 'user_register_form') {
    // $form['account']['name']['#title'] = t('Full name');
    $form['rid'] = array(
        '#type' => 'hidden',
        '#markup' => isset($_GET['rid'])? $_GET['rid'] : '',
        );
    // validate and submit
    // $form['#validate'][] = 'mymodule_user_register_validate';
    $form['#submit'][] = 'mymodule_user_register_submit';
  }
}

A rejtett mezőbe tenné a rid értékét.

Az eredeti user_register_submit() lefutása után ez is lefut(?):

function mymodule_user_register_submit(&$form, &$form_state) {
  global $user;
 
  $rid = $form_state['values']['rid'];
  // SQL INSERT with variable $rid
  $res = db_query( "INSERT INTO {mymodule_mytable} (rid,uid) VALUES(:rid,:uid)", array(':rid' => $rid, ':uid' => $user->uid ) );
  if ( $res ) {
  //...
}

Jó irányba keresgélek? Vagy h@@@@ség?

0
0
aboros képe

én is így próbálnám. bár ez talán semmit nem jelent, mert nem vagyok programozó. :) talán a sima hook_form_alter helyett használd akkor már a hook_form_FORM_ID_alter -t, mert az csak arra formra fut akkor amire neked kell, nem az összesre.

ilyen hurok, hogy hook_user_register_submit nincsen, úgyhogy a mymodule_user_register_submit sose fog lefutni szerintem, kivéve, ha meghívod valahol. van viszont hook_user_insert, ami pont olyan esetekre való, amit most te is szeretnél.

0
0

-
clear: both;

pp képe

Le kéne, hogy fusson, mert a formalterben hozzáadja a submit-hoz.

pp

0
0
makgab képe

Akkor erre gondoltok a hook_form_FORM_ID_alter() alapján:

function mymodule_form_user_register_form_alter(&$form, &$form_state) {
    $form['rid'] = array(
        '#type' => 'hidden',
        '#markup' => isset($_GET['rid'])? $_GET['rid'] : '',
        );
    // validate and submit
    // $form['#validate'][] = 'mymodule_user_register_validate';
    $form['#submit'][] = 'mymodule_user_register_submit';
  }
}
 
 
function mymodule_user_register_submit(&$form, &$form_state) {
  global $user;
 
  $rid = $form_state['values']['rid'];
  // SQL INSERT with variable $rid
  $res = db_query( "INSERT INTO {mymodule_mytable} (rid,uid) VALUES(:rid,:uid)", array(':rid' => $rid, ':uid' => $user->uid ) );
  if ( $res ) {
  //...
}

Most nincs előttem a tesztgép, de este kipróbálom.
Elvileg a $user változó már létezni fog a mymodule_user_register_submit() futásakor?

0
0
szantog képe

Igen, létezni fog, de lehet, hogy 0 uid-vel.
Ritka unsafe ezt a mutatványt form submitban végezi, ott van az aboros által emlegetett hook_user_insert.
1001 lehetőség van arra, hogy a global $usered még ne az legyen, amit akarsz, ellenben a hook_user_insertben minden megvan, és csak akkor fut le, amikor kell (ráadásul egy db_transaction kellős közepén)

Szóval simán lehet, hogy amit megcsinálsz, az épp most működik, aztán később jön valami modul, átrendezi a submitek sorrendjét, és már lőttek is az egésznek.

1
0

----
Rájöttem, miért kérdezek olyan ritkán a drupal.hu-n. Amíg szedem össze az infokat a kérdéshez, mindig rájövök a megoldásra.

makgab képe

Köszönöm az útmutatást!
Szépen működik:

# mymodule.module

function mymodule_form_user_register_form_alter(&$form, &$form_state) {
    $form['rid'] = array(
            '#type' => 'hidden',
            '#value' => isset($_GET['rid'])? $_GET['rid'] : '0',
    );
}
 
 
function mymodule_user_insert( &$edit, $account, $category ) {
  db_insert('mymodule_mytable')->fields(array(
       'rid' => $edit['rid'],
       'uid' => $account->uid,
  ))->execute();
}
2
0
aboros képe

azt nem is figyeltem hogy hozzáadja azt a submithoz.

0
0

-
clear: both;