form módosítása

scoundrel képe

jó estét!

egy kis segítséget szeretnék.

azt akarom megcsinálni, h a user-login-form -ban
az "Elfelejtett jelszó" ne listában legyen.
olvasok ezerrel a hook_alter_form-ról, de még soha
nem használtam. unset-el gondolom ki lehet
venni, de hogy adok hozzá mást?

vagy rosszul állok hozzá a kérdéshez?

előre is köszi!
Zsolt

Melyik modulhoz, modulokhoz kapcsolódik a téma?: 
Drupal verzió: 
hosszu.kalman képe

Szerintem két irányból közelítheted meg a dolgot:

  1. a hook_form_alter()-t használod
  2. a template.php-t használod

A user.module-ban meg lehet nézni mi is állítja elő azt a form-ot:

function user_login_block() {
  $form = array(
    '#action' => url($_GET['q'], array('query' => drupal_get_destination())),
    '#id' => 'user-login-form',
    '#validate' => user_login_default_validators(),
    '#submit' => array('user_login_submit'),
  );
  $form['name'] = array('#type' => 'textfield',
    '#title' => t('Username'),
    '#maxlength' => USERNAME_MAX_LENGTH,
    '#size' => 15,
    '#required' => TRUE,
  );
  $form['pass'] = array('#type' => 'password',
    '#title' => t('Password'),
    '#maxlength' => 60,
    '#size' => 15,
    '#required' => TRUE,
  );
  $form['submit'] = array('#type' => 'submit',
    '#value' => t('Log in'),
  );
  $items = array();
  if (variable_get('user_register', 1)) {
    $items[] = l(t('Create new account'), 'user/register', array('attributes' => array('title' => t('Create a new user account.'))));
  }
  $items[] = l(t('Request new password'), 'user/password', array('attributes' => array('title' => t('Request new password via e-mail.'))));
  $form['links'] = array('#value' => theme('item_list', $items));
  return $form;
}

Ha a hook_form_alter-t használod, akkor $form['links']-t kell felülírnod a megfelelőre.

Ha a template.php-t használod akkor valami ilyesmit kell majd csinálni

function SMINKEMNEVE_theme() {
  return array(
    'user_login_block' => array(
      'arguments' => array('form' => NULL),
    ),
  );
}
 
function SMINKEMNEVE_user_login_block($form) {
  //meg tudod nézni mi minden van benne: print_r($form);
 
  $out  = '';
  // Módosítod a dolgokat a megfelelőre
  // A végén hozzáfűzöd ezt a sort, hogy benne legyenek a rejtett input mezők is
  $out .= drupal_render($form);
 
  return $out;
}

Ugye az egyik modul, a másik smink kérdés. Ha valami funkcionális módosítás akkor azt inkább modullal szokás megcsinálni, ha pedig kinézet akkor sminkkel.

A baj az, hogy nem értem pontosan mit szeretnél:

  1. Azt akarod hogy ne listában legyen hanem más megjelenítésben
  2. Azt akarod hogy ne is látszódjon, ne jelenjen meg

Az első esetben szerintem inkább smink kérdés, a másodikban én már modult írnék rá.

0
0
scoundrel képe

köszi a korrekt választ.

Azt akarom, h ne listában legyen hanem simán egy div-ben.

a template.php-s megoldást próbáltam tegnap. a submit gombot
le is bírtam cserélni képre, de h az out-ba mit írjak, nem jöttem rá.

de még küzdök...

mégegyszer köszi.

0
0
hosszu.kalman képe

Okés.

Szerintem kb ennyi a template.php-ba:

function SMINKEMNEVE_theme() {
  return array(
    'user_login_block' => array(
      'arguments' => array('form' => NULL),
    ),
  );
}
 
function SMINKEMNEVE_user_login_block($form) {
 
  // Módosítod a links-t
  $items = array();
  if (variable_get('user_register', 1)) {
    $items[] = l(t('Create new account'), 'user/register', array('attributes' => array('title' => t('Create a new user account.'))));
  }
  $form['links']['#value'] = theme('item_list', $items);
 
  $out .= drupal_render($form);
 
  // Hozzáadod a div-et
  $out .= '<div>' . l(t('Request new password'), 'user/password',
    array('attributes' => array('title' =>  t('Request new password via e-mail.')))) . '</div>';
 
  return $out;
}
0
0
scoundrel képe

de akkor miért kell az items?

nem is lennének item-ek...
/csak div-ek/

0
0
scoundrel képe

pontosan így képzeltem el.

de erről hol tudnék többet olvasni?

nem igazán értem, h mikor kell phptemplate_
ill. sminkneve_ előtag-et használni.

vagy rossz a kérdés?

üdv!
sco

0
0
pp képe

Az egész kérdéskör akkor érdekes igazán, ha olyan sminket készítesz aminek lehetnek leszármaztatott sminkjei. A phptemplate_ előtag akkor használandó, ha azt szeretnéd, hogy a változtatásaid az alsminkekben is megjelenjenek. A sminkneve_ előtagot pedig akkor, ha nem akarod, hogy a leszármaztatott sminkben ezek a változtatások megjelenjenek.

A lényeg a tárgy mezőben olvasható, jelen esetben számodra mindegy. :D

pp

0
0
scoundrel képe

2x jelenik meg az 'Elfelejtett jelszó' ráadásul az első listában :(

function SMINKNEVE_user_login_block($form) {
 
  $form['submit']['#type'] = 'image_button';
  $form['submit']['#attributes']['src'] = base_path() . '/sites/all/files/belepes-ikon.gif';
  $out .= drupal_render($form);
 
  if (variable_get('user_register', 1)) {
  // Hozzáadod a div-et #1
  $out .= '<div>' . l(t('Create new account'), 'user/register',
    array('attributes' => array('title' => t('Create a new user account.')))) . '</div>';
  }
  // Hozzáadod a div-et #2
  $out .= '<div>' . l(t('Request new password'), 'user/password',
    array('attributes' => array('title' =>  t('Request new password via e-mail.')))) . '</div>';
 
  return $out;
}

mit bénázok el?

0
0
scoundrel képe

  $form['links']['#value'] = theme('item_list', '');
  $out .= drupal_render($form);

erre szebb megoldás?

0
0
hosszu.kalman képe

Azért mert a div-ek hozzáadása előtt meghívod a drupal_render() függvényt. A $form változóban pedig benne van $form['links'] ami tartalmazza a felsorolást mert a user_login_block() fgv állítja össze:

$items = array();
  if (variable_get('user_register', 1)) {
    $items[] = l(t('Create new account'), 'user/register', array('attributes' => array('title' => t('Create a new user account.'))));
  }
  $items[] = l(t('Request new password'), 'user/password', array('attributes' => array('title' => t('Request new password via e-mail.'))));
  $form['links'] = array('#value' => theme('item_list', $items));

Ha azt akarod, hogy ne jelenjen meg csak div-ekben, akkor először el kell távolítani a $form['links'] rész elemet. Legegyszerűbben kb:

unset($form['links']);
0
0
aboros képe

miért akarod ezt, azt kéne tudni, mi lenne a végcél. mi az amit egy li -vel nem tudsz megtenni, de egy div -el igen?

0
0

-
clear: both;

scoundrel képe

mert Te mondtad a múltkor, h a keresőbotok nem
szeretik a 'display: none', 'visibility: hidden'-t meg hasonlókat.
ezért inkább php-vel kezdtem el módosítani
dolgaim, minél kevesebb css-el.

félreértettelek?

/meg amúgy se ártana ha ezt a részét is érteném :) /

üdv!

0
0