textfield default_value nem jelenik meg

krampi képe

Egy textfield mezőt az alábbiak szerint szeretnék megjeleniteni, de a default_value nem jelenik meg. Miért?

$ertek="ide ird a nevet";
$form['nev'] = array(
    '#type' => 'textfield', 
    '#default_value' => $ertek, 
    '#size' => 50,  
    '#maxlengh' => 255 );			
$neve=drupal_render($form['nev']);
 
$out=$neve;	
$out.= drupal_render($form);
$form['pager'] = array('#value' => $out);
 
return $form;

köszi

Drupal verzió: 
krampi képe

Lehet hogy bug?

0
0
pp képe

Amíg nem jön válasz böngészd már át a kvikstartot lécci. Az eredeti kérdésedre is csak ezt tudtam volna írni, meg egy "ezmiez"-t.
Azért mert a dolgok nem úgy működnek ahogy mi elképzeljük, hogy működniük kéne még nem feltétlenül a dolgok a hibásak.
Valamit nagyon rosszul csinálsz, vagy én nem értem.

pp

0
0
krampi képe

De ha a dolgok nem úgy mennek, ahogy elképzeljük azt valahova csak feljegyzi valaki mert próbálunk logikus dolgokat létrehozni, használni. Ha nincs feljegyezve, akkor vagy még nem vette senki észre hogy nem úgy működik ahogy szeretnénk vagy hibás a dolog. De az is lehet hogy direkt ilyen valamilyen okból, és másképp kell megoldani a problémát.

De ez tökmindegy :-)

Röviden:
A form elem megjelenik rendesen, de a #default_value nem ha a pager-en keresztül akarom kiiratni.

Itt már néztem:
- drupal.org
- google
- Apress - Pro Drupal Development Apr 2007
- Developing for Drupal
- Nagy Gusztáv - Webes Tartalomkezelő rendszerek

0
0
Bálint képe

Szia! Ha átnézted a pp által adott linket, akkor nem értem, mi nem megy ezen.
Amit te akarsz, azt így kell:

Készítesz egy függvényt, ami összepakolja a formodat:

<?php
function valamilyen_form()
{
    $ertek='Írd ide a nevedet!';
    $form['nev'] = array (
        '#type' => 'textfield',
        '#default_value' => $ertek,
        '#size' => 50, 
        '#maxlengh' => 255,
    );
 
    $form['submit'] = array(
        '#type' => 'submit',
        '#value' => t('OK'),
    );
 
    return $form;
}
?>

Megjegyzem, szerintem az nem valami szép, ha így kéred meg a usert, hogy írja be a nevét. Én inkább megadnám #title paraméternek, és akkor nem a textfield-ben, hanem felette lesz látható.
Szükség van még egy submit gombra, ezt is láthatod.

Aztán ezt még ugye szeretnénk megjeleníteni egy oldalon:

<?php
function valamilyen_oldal()
{
    $output=drupal_get_form(valamilyen_form);
    return $output;
}
?>

Ennyi az egész. Tulajdonképpen az történik, hogy a form függvényedben elkészítesz egy paraméterlistát egy asszociatív tömbben, és ezekkel a paraméterekkel a megfelelő helyen meghívod a drupal_get_form függvényt, ami elkészíti az űrlapodat.

Aztán még kell egy valamilyen_form_submit nevű függvény, ami akkor hajtódik végre, amikor a felhasználó az OK-re kattint. Ha szeretnéd ellenőrizni a beírt adatokat, akkor azt egy valamilyen_form_validate nevű függvénnyel teheted meg.

Amit te idekevertél, a drupal_render függvény akkor lehet érdekes az űrlapok szempontjából, amikor felül szeretnéd írni az alapértelmezett drupal-os form sminket.
A $form['pager'] = array('#value' => $out); sort meg nem tudom, honnan szedted! :)

0
0
krampi képe

Erről van szó, nem bonyolítanám ha nem muszáj:

,,Amit te idekevertél, a drupal_render függvény akkor lehet érdekes az űrlapok szempontjából, amikor felül szeretnéd írni az alapértelmezett drupal-os form sminket."
-------------------
Táblázatba szeretném tenni a form elemeket, vagyis:
első sor első mező egy string, második egy textfield (title nélkül, és ne kérdezd miért nem teszem elé inkább a #title-t #prefix és #suffixal.)és így tovább.
-------------------
az ,,$output .= theme('table', ..." táblázat készítésnél is kell a pager, úgy se jelenik meg a #default_value.
-------------------
,,Megjegyzem, szerintem az nem valami szép, ha így kéred meg a usert, hogy írja be a nevét."

Egy példaprogramban mindegy mit írok.

köszi.

0
0
Bálint képe

Ne haragudj, de nem értem. Szóval, van egy táblázatod, ami két sorból és egy oszlopból áll, ugye? Az első sorban egy tetszőleges string, a másodikban a textfield. Eddig stimmel?
Szóval, ha így szeretnéd, akkor egy két soros táblázathoz minek neked pager? Egyáltalán, miért jó ez neked? Leírnád lécci a konkrét feladatot, és akkor hátha tudunk segíteni!

0
0
Paal képe

0
0

--
Palócz Paal Pál, a drupal.hu admin csoportjának tagja
Ajánlott olvasmány: Eric Steven Raymond - Hogyan kérdezzünk okosan

krampi képe

A lényeg az, hogy a form elemeket egymás mellé is tudjam tenni úgy ahogy akarom, mindegy hány sor, hány oszlop, lényeg hogy tetszés szerint helyezzem el őket. Nem ragaszkodom a pager-hez, de más tippet még nem kaptam.

Vegyél példának egy ,,file megnyitás" dialógus ablakot, vagy ilyesmit. Ehhez kell egy táblázat hogy mindent a megfelelő sorba és oszlopba tegyek.

Ennél jobban nem tudom elmagyarázni, esetleg rajzolhatok.

köszi

0
0
Bálint képe

Jó, akkor nézd meg a pp által belinkelt oldalon a Theming Forms című részt.
Készítened kell egy theme_valamilyen_form nevű függvényt, amivel felülírod az alapértelmezett drupal-os űrlapmegjelenést. Itt mindent úgy pakolsz össze, ahogy te akarod, és igen, ide kell a drupal_render függvény.

Táblázatba is rendezheted a form elemeket, ha mindenképpen azt szeretnéd, csak nézz utána, hogy hogyan készítesz táblázatot.

Itt elég jól le van írva:
http://www.group42.ca/theming_101_%E2%80%93_theme_table_function

Sok sikert! ;)

0
0
krampi képe

nem tudtam hogy igy is elfogadja.
ki is próbálom hamarosan

print '<pre>' . htmlentities($tableHTML) . '</pre>';
print $tableHTML;

köszi
0
0
krampi képe

Ezzel az egész drupal lap felett jelenik meg a táblázat, ilyent már sikerült réggebben is produkálnom. :-)

Mellesleg a #default_value így se jelenik meg. Ha simán jelentetem meg a form elemeket, akkor ott a #default_value rendesen megjelenik, szóval a szintaktikája biztos jó.

A theme_valami_form funkció nekem nem akar működni, nem változtat semmin.
miért?

Igy csinálom

function valami_form($form_state);{
$form['nev']  = array(  
   '#type' => 'textfield',
   '#default_value' =>'valami' ,
   '#size' => 50,
   '#maxlengh' => 255,);
 
$form['varos'] = array(  
  '#type' => 'textfield', 
  '#size' => 50,  
  '#maxlengh' => 255,);
return $form;
}
 
function theme_valami_form($form) {
  $header = array( 'valami', 'valami2');
  $row[]  = array( 'nev:', drupal_render($form['nev']);
  $row[]  = array( 'varos:', drupal_render($form['varos'] );
  $tableHTML = theme('table', $header, $row);
  return $tableHTML;
}
0
0
pp képe

Ne reload-dal töltsd újra az oldalt, hanem menj a címsorba és ott nyomj egy entert. Az előbbinél ugyanis megőrzi a böngésződ, hogy semmi nincs a beviteli mezőben és ezért nem látszik.

a return elé még tedd be ezt!

  $tableHTML = drupal_render($form);

pp

0
0
krampi képe

Az a baj, hogy semmi nem változott. Tök nem értem, mindenhol ezt a példát látom.

Egyszerűen egymás alá teszi a 2 form elemet.

0
0
pp képe

Már miért ne tenné egymás alá, amikor két külön sorba rakod?
Rakd egy sorba.

 $row[]  = array( drupal_render($form['nev'], drupal_render($form['varos'] );

pp

0
0
krampi képe

Igaz, rosszul irtam.

De a tábla első oszlopában ott kellene lenni a két stringnek.

0
0
Pasqualle képe

// $Id$
 
/**
 * @file Drupal.hu test.
 */
 
/**
 * Implementation of hook_menu().
 */
function dhu_menu() {
  $items['dhu'] = array(
    'title' => 'Test',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('dhu_test_form'),
    'access callback' => 'user_access',
    'access arguments' => array('access content'),
    'weight' => '-40',
    'type' => MENU_NORMAL_ITEM,
  );
 
  return $items;
}
 
/**
 * Implementation of hook_theme().
 */
function dhu_theme() {
  $items['test_form'] = array(
    'arguments' => array('form' => NULL),
  );
  return $items;
}
 
/**
 * The test form.
 */
function dhu_test_form(&$form_state) {
  $header = array(
    array('data' => t('Name')),
    array('data' => t('City')),
  );
 
  $form['header'] = array(
   '#type' => 'value',
   '#value' => $header,
  );
 
  $form['test']['#tree'] = TRUE;
 
  $form['test'][1]['name'] = array(
    '#type' => 'textfield',
    '#default_value' =>'Pasqualle',
    '#size' => 50,
    '#maxlengh' => 255,
  );
 
  $form['test'][1]['city'] = array(
    '#type' => 'textfield',
    '#default_value' =>'Budapest',
    '#size' => 50, 
    '#maxlengh' => 255,
  );
 
  $form['#theme'] = 'test_form';
  return $form;
}
 
/**
 * Theme the test form. 
 *
 * @ingroup themeable
 */
function theme_test_form($form) {
  $header = $form['header']['#value'];
  $rows = array();
 
  foreach (element_children($form['test']) as $key) {
    // Build the table row.
    $rows[] = array(
      array('data' => drupal_render($form['test'][$key]['name'])),
      array('data' => drupal_render($form['test'][$key]['city'])),
    );
  }
 
  $output = theme('table', $header, $rows);
  $output .= drupal_render($form);
 
  return $output;
}
0
0
krampi képe

átrágom.

0
0