Přeskočit přímo na text


Problém s funkcí form_validate() a theme()

Kategorie: Jak na to?
Týká se verze: Drupal 7.x

Dobrý den, potřeboval bych poradit s tímto:

jde o to, že draggable tabulka se mi z formuláře rendruje správně, ale za žádnou cenu to nechce brát funkci eprihlaseni_akce_items_validate() a když funkci theme_eprihlaseni_akce_items() odstranim, tak mi to validaci bezproblémově vezme, napadlo mě, jestli není nutno ji tam někde do výstupu taky nějak zaregistorvat, fakt nevím. A ještě by mě zajímalo, jestli mohu k proměnným ve formuláři přistupovat obvykle přes $form_state[‚values‘]

Kód:

<?php
function eprihlaseni_akce_items(){
  $id_akce = $_SESSION['eprihlaseni']['id_akce_items'];
    $form['signed'] = array(
      '#title' => t('Účastníci'),
      '#type' => 'fieldset',
      '#collapsible' => TRUE,
      '#collapsed' => FALSE
    );

  $pojist = array(
    '111'=>'Všeobecná ZP',
    '201'=>'Vojenská ZP',
    '205'=>'Česká prrůmyslová ZP',
    '207'=>'Odborová ZP zaměstnanců bank, pojišťoven a stavebnictví',
    '209'=>'Zaměstnanecká pojišťovna ŠKODA',
    '211'=>'ZP ministerstva vnitra ČR',
    '213'=>'Revírní bratrská pokladna',
    '217'=>'ZP METAL-ALIANCE',
    '222'=>'Česká národní ZP',
    '227'=>'ZP AGEL',
    '228'=>'ZP Média'
  );
  $sql = db_query("SELECT * FROM {eprihlaseni_signed} WHERE tabor = :id", array(':id' => $id_akce));
  foreach($sql as $value){
    $form['signed'][$value->id]['order_signed'] = array(
      '#type' => 'hidden',
      '#value' => $value->order_signed,
      '#attributes' => array('class' => 'order_signed_class')
    );
    $form['signed'][$value->id]['jmeno'] = array(
      '#type' => 'textfield',
      '#value' => $value->jmeno
    );
    $form['signed'][$value->id]['adress']= array(
      '#type' => 'textfield',
      '#value' => $value->adress
    );
    $form['signed'][$value->id]['email'] = array(
      '#type' => 'textfield',
      '#value' => $value->email
    );
    $form['signed'][$value->id]['year'] = array(
      '#type' => 'textfield',
      '#size' => '20',
      '#value' => $value->year
    );
    $form['signed'][$value->id]['rodc'] = array(
      '#type' => 'textfield',
      '#size' => '20',
      '#value' => $value->rodc
    );
    $form['signed'][$value->id]['pojistovna'] = array(
      '#type' => 'select',
      '#options'=> $pojist,
      '#value' => $value->pojistovna
    );
    $form['signed'][$value->id]['status'] = array(
      '#type' => 'hidden',
      '#size' => '20',
      '#value' => $value->status
    );
  }
  $form['add']['order_signed'] = array(
      '#type' => 'hidden',
      '#required' => 1,
      '#attributes' => array('class' => 'order_signed_class')
    );
  $form['add']['jmeno'] = array(
    '#type' => 'textfield',
    '#required' => 1,
  );
  $form['add']['adress']= array(
    '#type' => 'textfield',
    '#required' => 1,
  );
  $form['add']['email'] = array(
    '#type' => 'textfield',
    '#required' => 1,
  );
  $form['add']['year'] = array(
    '#type' => 'textfield',
    '#required' => 1,
  );
  $form['add']['rodc'] = array(
    '#type' => 'textfield',
    '#required' => 1,
  );
  $form['add']['pojistovna'] = array(
    '#type' => 'select',
    '#options'=> $pojist,
    '#required' => 1,
  );
  $form['add']['status'] = array(
    '#type' => 'hidden',
  );
  $form['tlacitka']['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Ulož',
  );
  $form['tlacitka']['printpdf'] = array(
    '#type' => 'button',
    '#attributes' => array('onclick' => 'alert(\'alert\')'),
    '#value' => 'Tiskni v PDF',
  );
  return $form;
}
*****************************************************************

//funkce pro validaci

function eprihlaseni_akce_items_validate($form, $form_state){
  drupal_set_message('Testovací hláška');
}
******************************************************************

function theme_eprihlaseni_akce_items($variables) {
  $header = array('','Jméno','Adresa','E-mail', 'Datum narození', 'Rodné číslo', 'Pojišťovna', 'Status');


  $rows = array();

    drupal_add_tabledrag('table_signed_people', 'order', 'sibling', 'order_signed_class', NULL, NULL, FALSE);

    $form = $variables['form'];
    $row = array();
   foreach(element_children($form['signed']) as $i){
     $row = array();
    foreach(element_children($form['signed'][$i]) as $key){

        $row[] = array('data' => drupal_render($form['signed'][$i][$key]));
    }

      $row = array_merge(array('data' => $row), array('class' => array('draggable')));
      $rows[] = $row;
   }
     $row = array();
    foreach(element_children($form['add']) as $key){

        $row[] = array('data' => drupal_render($form['add'][$key]));
    }

      $row = array_merge(array('data' => $row), array('class' => array('draggable')));
      $rows[] = $row;

  $element = array(
    '#empty' => t('Zatím se nikdo nepřihlásil'),
    '#attributes' => array(
      'id' => 'table_signed_people',
    )
  );

  $output .= theme('table', array('header' => $header, 'rows' => $rows, 'empty' => $element['#empty'], 'attributes' => $element['#attributes']));
  $output .= drupal_render_children($form['tlacitka']);
  return $output;
}
?>

==================================================================================================================================================

 

Myslim ze ti tam chyba

Myslim ze ti tam chyba $form['signed']['#tree'] = TRUE;

Máte pravdu,

Máte pravdu, $form[‚signed‘][‚#tree‘] = TRUE mi tam chybělo, ale pořád to nevyřešilo problém s tím, že to nechce vzít funkci pro validaci, jakoby to na ni vůbec neodkazovalo. Tak prosím, jestli by Vás ještě něco nenapadlo…Díky

Ja by som to testoval cez

Ja by som to testoval cez die('hlaska'); – myslim ze Drupal robi presmerovanie a podobne tak je mozne ze sa set message nezobrazi.

do formy si dopln argumeny

  1. do formy si dopln argumeny $form, &$form_state, to iste do valdiacnej funkcie.
  2. class je v d7 array, takze ‚#attributes‘ ⇒ array(‚class‘ ⇒ array(‚order_signed_class‘))
  3. ako pise havran, skus die, lebo ak sa stranka vygenerruje na dva krat, tak obsah $messages sa strati(co by nemal byt tento pripad)
  4. zmaz cache(kedze robis s theme funkciami), ak ani vtedy nie je valdiacna funkcia spustena, skus ju priamo deklarovat vo forme ako $form[‚#valdiate‘][] = ‚eprihlaseni_akce_items_validate‘;
  5. ten foreach radsej ries tak ze si naraz vytiahnes polozky do pola a az potom to prejdes

Poslat nový komentář

Obsah tohoto pole je soukromý a nebude veřejně zobrazen.
  • You can use Texy! to format and alter entered content.
  • Povolené HTML značky: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <p> <br> <b> <i> <h2> <img> <pre> <sup> <sub> <pre class="php"> <span class="php-keyword1"> <span class="php-var"> <span class="php-num"> <img class="screenshot"> <p class="beginner"> <a class="greybox"> <h3> <h4>

Více informací o možnostech formátování

Type the characters you see in this picture. (verify using audio)
Type the characters you see in the picture above; if you can't read them, submit the form and a new image will be generated. Not case sensitive.

Hledat

Přihlášení

Bezpečnost Drupalu

Z hlediska bezpečnosti je Drupal na velmi vysoké úrovni, díky propracovanému systému hlášení, prověřování a řešení možných problémů.

Čtěte více a odebírejte bezpečnostní aktuality

Poslední komentáře

Kdo je online

Momentálně je online 3 uživatelé a 0 hostů.

Online uživatelé