Public bookings modul csinosítás

Wathfea képe

Hello!

Mostanában kezdek ismerkedni moduláris szinten jobban a Drupal rendszerével és kaptam egy feladatot. Kicsit alakítgatni kéne a bookings modul foglaló részét. Jelenleg úgy működik, hogy a foglalás kitöltésénél bekér a felhasználótól személyes adatokat. Ezen kéne változtatnom, mert csak regisztráltaknak lesz elérhető a foglalás. Így feleslegesnek érzem ismételten kitölteni velük egy adatlapot. Név, telefon stb stb. Csak az e-mailre van szükség, hogy a konfirmációs levelet tudjam hova kiküldeni. Megkerestem a fileok között az amelyik a formot készíti el: publicbookings.views_default.inc
Ezen belül a részt ami hivatott ezt a formot elkészíteni
function publicbookings_clientinfo_form($values, &$form_state=array()) {
Itt ami nem kellett mint telefon szám stb azt kiszedtem, így csak maradt ez a rész:

$form['client']['email'] = array(
    '#title' => t('Email'),
    '#type' => 'textfield',
    '#description' => t('Your booking will be confirmed by email.'),
    '#default_value' => $values['email'],
    '#required' => TRUE,
  );

Ez eddig működik is, viszont gondoltam egy olyat, hogy minden felhasználó regeléskor megadott egy mail címet. Hogyan érem azt el és tudnám automatikusan betenni ebbe a textfieldbe default értékként?
Tudnátok ebben nekem segíteni?
Előre is köszönöm.

Perlusz Dávid

Drupal verzió: 
pp képe

Kismacska gyilkos lettél.

Ilyet nem csinálunk.

Írunk egy modult és ott a hook_form_alter hook-al operálunk. Egyébként amit keresel az a #default_velue érték, bővebben a vonatkozó dokumentációban.

pp

0
0
Wathfea képe

Hi!

Sajnos mint említettem nem vagyok még túl jártas a drupal modulok kódolásában, így amit segítségként adtál nem volt túl sok segítség ám...
Továbbra is úgy tudtam megcsinálni, hogy kikommenteltem a form bizonyos részeit amire nem volt szükségem és megoldottam az aktív user emailt is $user->email, ment a default_value ba.
Majd igyekszem utánajárni szebb megoldásoknak.

Dávid

0
0
pp képe

Igazad van, csak annyit kellett volna írnom, hogy használd a google-t. Nálam az első találat az a blogbejegyzésem, ami pont erről szól. LOL.

pp

0
0
Wathfea képe

Nah ha tudom, hogy keressek már is jobb a dolog. :) Az írásod jó nagyon így már érthető nekem is mi is ez a hook_form_alter dolog.
Csináltam hát egy külön modult, viszont nem akarja csak azért se kiszedni azokat a mezőket amiket nem akarok:

/* A publicbookings_adatok form elemeinek eltűntetése */
function nodisplay_form_alter(&$form, $form_state, $form_id) {
  if ($form_id == 'publicbookings_clientinfo_form') {
    $form['client']['title']['#access'] = FALSE;
     $form['client']['first_name']['#access'] = FALSE;
     $form['client']['last_name']['#access'] = FALSE;
     $form['client']['phone']['#access'] = FALSE;
     $form['client']['comments']['#access'] = FALSE;
  }
}

Azon filózom, hogy lehet nem ez a clientinfo_form a form_id?
A publicbookings.public.ini fileban pedig így kezdi el a formot:

function publicbookings_clientinfo_form($values, &$form_state=array()) {
  $form = array();
  if ( isset($form_state['values']) ) {
    $values = $form_state['values'] + $values;
  }
  $form['client'] = array(
    '#title' => t('Adataid'),
    '#type' => 'fieldset',
  );
 
  $form['client']['client_id'] = array(
    '#type' => 'value',
    '#value' => $values['client_id'],
   );
  $form['client']['title'] = array(
    '#title' => t('Title'),
    '#type'  => 'select',
    '#options' => publicbookings_title(),
    '#default_value' => 0,
  );
...stb.

Hogy tudom megkapni a helyes form_id?
Próbáltam print_r-e kiiratni a form tömböt de abban id hivatkozás nem volt.
Más?

Egyébként nem szeretnél írni egy olyan szösszenetet, hogy miként lenne megoldható az, hogy magának a modulnak az admin oldali beállítások között választhassam hogy egy olyan formot rakjon ki ahol minden adatot kér pl vonatkozzon ez a nem regisztrált emberekre ha meg regelt akkor csak az emailt?

Tehát példa esetben mikor fel akarok tölteni valamit alaphelyzetben megjelenik egy form ami mindent kér de ha admin menüben bejelölök egy választót akkor csak e-mailt...

0
0
pp képe

javaslom tedd fel a devel modult, kapcsold be, majd a form_alter függvényed elején írd be azt, hogy:

dpm($form);
dpm($form_state);
dpm($form_id);

vagy, ha ez nem tetszik, akkor:

  drupal_set_message(print_r($form, TRUE));

pp
0
0
Wathfea képe

Ohh zsír tökéletes, köszönöm meg is van :)

0
0