hova tűnnek a formon beadott értékek?

gülüke képe

Sziasztok!
Van egy elég nagy formom, amiben lépésről lépésre jönnek elő (lesznek választhatók kb) egy-egy fieldset elemei (button-ök). Mindegyiket egy-egy ajaxos callback függvény állítja elő, úgy néz ki, hogy rendben működik. Egészen addig, míg be nem akarom küldeni a lap alján a teljes ajánlatkérést, mert ekkor (és egyébként közben sem!) sehol nem találom a $form_state tömbömben a bevitt adatokat. Hol kéne keresnem őket? :S Elvileg a _submit($form, &$form_state) függvényben a $form_state['values']-ban lenne a helyük, de még ha az egész tömböt is nézem, sehol nincs benne egyik textfieldemnek sem az értéke :(
Itt érhető el az említett űrlap, hogy világos legyen: http://lemezfaktory.hu/ajanlatkeres
Szívesen szúrok be kódot vagy küldök ímélben, az egészet csak azért nem vágom be, mert jelenleg 2913 sornál járok és picit nehéz amúgy is átlátni, meg sok benne a "redundancia" (a teljes formot mindig újratöltöm ajax-szal a nagy div-embe, hogy minden a helyén legyen a folyamat közben.)
Esetleg láttatok már hasonló hibát? Vagy bármi ötlet erre?
Üdv, gülüke.

Drupal verzió: 
Bálint képe

Ilyen esetekben célszerű mutatnod egy kódrészletet, ami a releváns részeket áttekinthetően tartalmazza. Anélkül senki nem tud segíteni, az email pedig öncélú, így senki nem akar. :)

0
0
gülüke képe

szia, most délután sikeresen újraépítettem a teljes formot és kiderült, hogy az a baj - talán form api bug? -, hogy ha beviteli mezők vannak (textfield, textarea, checkbox), akkor az #ajax callback hatására ezek eldobják magukat és nem adják át a bennük található adatokat a callbackben létrehozott új form ($element) elemeknek. Kiszedtem ezt a részt (fieldsetet) az újra generálós részből, most már legalább tudok submitolni és elmennek az adatok.
szívesen beposztolnám d.o-n, ha nem volna olyan gyatra az angol fogalmazási készségem :) hátha valaki megteszi, ha mégis bugról van szó :)
üdv, gülüke.

0
0
pp képe

Szerintem itt felesleges az ajax.

Sima checkboxok + egy kis css/minimál js/
Százszor gyorsabb is lenne és még működne is. A kódot pedig látni kéne, hogy tudjuk hol van a bug, mert lehet nem megfelelően tolod azokat az ajax kéréseket.

pp

0
0
gülüke képe

szia.
az a baj, hogy a "beviteli" mezők az első 5 fieldsetben mindenféleképpen buttonök (image_button) kell legyen, mert a grafikus kicsit elszállt... szóval ott nem nagyon tudok behozni checkboxokat. tovább megyek: az ajax kihagyásával próbálkoztam és a #states-cel kínlódtam, háááát... nem volt az igazi.
egyébként css-sel kevés vagyok a dologhoz, mert ténylegesen "nem működőnek" kell bizonyos választások esetén néhány elemet kitennem (ilyenkor a #type=>'markup' lett a barátom)
De hogy lássatok néhány kódot is:

// a formból az eleje
function bidding_form($form, &$form_state){
 
    $form = array();
    $form['first'] = array(
        '#type' => 'markup',
        '#prefix' => '<div id="box">',
    );
 
    $form['adathordozo'] = array(
        '#type' => 'fieldset',
        '#title' => '1. Válasszon adathordozót:',
        '#collapsible' => FALSE,
        '#collapsed' => TRUE,
        '#attributes' => array('id' => 'edit-adathordozo', 'class' => array("not-selected")),
    );
    $form['felulettipus'] = array(
        '#type' => 'fieldset',
        '#title' => '2. Adathordozó felülettípusának kiválasztása:',
        '#collapsible' => FALSE,
        '#collapsed' => TRUE,
        '#attributes' => array('class' => array("not-selected"), 'id' => 'edit-felulettipus'),
    );
//...
// így töltöm bele az első fieldsetbe a tartalmat
$query = db_query('SELECT nid FROM {node} n WHERE n.type = :type', array(':type' => "adathordozo"));
 
    foreach($query as $adathordozo){
        $node = node_load($adathordozo->nid);
 
        $form['adathordozo']['submit'.$adathordozo->nid] = array(
            '#type' => 'submit',
            '#ajax' => array(
                'callback' => 'bidding_ajax_callback',
                'wrapper' => 'box',
            ),
            '#prefix' => '<div class="adathordozo item">',
            '#value' => 'submit'.$adathordozo->nid,
        );
 
        $form['adathordozo']['hidden'.$adathordozo->nid] = array(
            '#type' => 'markup',
            '#prefix' => '<div id="hidden-'.$adathordozo->nid.'">',
            '#suffix' => '</div>',
            '#markup' => '',
        );
        $form['adathordozo']['hidden2'.$adathordozo->nid] = array(
            '#type' => 'markup',
            '#prefix' => '<div id="hidden2-'.$adathordozo->nid.'">',
            '#suffix' => '</div>',
            '#markup' => '',
        );
        $filename = substr($node->field_selected['und'][0]['uri'], 9);
        drupal_add_css('#hidden2-'.$adathordozo->nid.' {background-image:url("/sites/default/files/'.$filename.'"); height: 1px; width: 1px; color: transparent;}', $option['type'] = 'inline');
        drupal_add_css('#selected-edit-submit'.$adathordozo->nid.' {background-image:url("/sites/default/files/'.$filename.'"); border: 0 none; height: '.$node->field_selected["und"][0]["height"].'px; width: '.$node->field_selected["und"][0]["width"].'px; color: transparent;}', $option['type'] = 'inline');
        $filename = substr($node->field_aktive['und'][0]['uri'], 9);
        drupal_add_css('#edit-submit'.$adathordozo->nid.' {background-image:url("/sites/default/files/'.$filename.'"); border: 0 none; height: '.$node->field_aktive["und"][0]["height"].'px; width: '.$node->field_aktive["und"][0]["width"].'px; color: transparent;}', $option['type'] = 'inline');
        $filename = substr($node->field_hover['und'][0]['uri'], 9);
        drupal_add_css('#hidden-'.$adathordozo->nid.' {background-image:url("/sites/default/files/'.$filename.'"); height: 1px; width: 1px; color: transparent;}', $option['type'] = 'inline');
        drupal_add_css('#edit-submit'.$adathordozo->nid.':hover {background-image:url("/sites/default/files/'.$filename.'"); border: 0 none; height: '.$node->field_hover["und"][0]["height"].'px; width: '.$node->field_hover["und"][0]["width"].'px; color: transparent;}', $option['type'] = 'inline');
        $form['adathordozo']['name'.$adathordozo->nid] = array(
            '#type' => 'item',
            '#title' => $node->title,
 
        );
        if (isset($node->field_buborek['und'][0]['value'])){
            $form['adathordozo']['buborek'.$adathordozo->nid] = array(
                '#type' => 'markup',
                '#prefix' => '<div class="buborek_wrapper"><div class="buborek">',
                '#suffix' => '</div><div class="nyulvany"></div></div></div>',
                '#markup' => $node->field_buborek['und'][0]['value'],
            );
        }
    }
// ...
// kirajzolok mindent (az első 5 fieldsetet) és utána lezárom a #box-ot
$form['last'] = array(
        '#type' => 'markup',
        '#suffix' => '</div>',    
    );
// sajnos nem jó ötlet volt itt a form #prefix, #suffix-e, mert az ugye az egészet csomagolja, max még a container type működhetett volna, de kb tök mindegy.
// és akkor a kapcsolat nevű fieldsetben itt a submit-om, ami nem működött, míg együtt renderelődött újra a teljes #box tartalmával.
    $form['kapcsolat']['ksubmit'] = array(
        '#value' => 'Ajánlatkérés elküldése',
        '#type' => 'submit',
        '#submit' => array('bidding_submit'),
        '#validate' => array('bidding_validate'),
        '#attributes' => array('id' => 'edit-ksubmit'),
    );
    return $form;
}
// ilyen callback függvényből van öt darab, mindegyikben valami "minimális" (de ugyanakkor fontos...) dolog változik, nem tudtam refaktorálni :'(
// egyébként ez hívódik meg és tölti újra a box tartalmát.
function bidding_ajax_callback($form, &$form_state) {
    $element['first'] = array(
        '#type' => 'markup',
        '#prefix' => '<div id="box">',
    );
    $element['adathordozo'] = array(
        '#type' => 'fieldset',
        '#title' => '1. Válasszon adathordozót:',
        '#collapsible' => FALSE,
        '#collapsed' => TRUE,
        '#attributes' => array('id' => 'edit-adathordozo', 'class' => array("ok-selected")),
    );
    $element['felulettipus'] = array(
        '#type' => 'fieldset',
        '#title' => '2. Adathordozó felülettípusának kiválasztása:',
        '#collapsible' => FALSE,
        '#collapsed' => TRUE,
        '#attributes' => array('class' => array("ok-selected", "just-now"), 'id' => 'edit-felulettipus'),
    );
//...
    return $element;
}

Szóval összességében elég szívás volt ez a cucc, az ajaxot meg nem tudtam hogy megkerülni :(
Amit írsz még PP, hogy gyorsabb lenne és működne is: a hostgatornál van a shared hoszting, ami este úgy 10 körül kb lehal egészen reggel 8-9ig. a normális 0.8-1.2 sec-kes generálási idők helyett nyom ilyen 5.6-14.2 (firebug konzol alapján) - egyébként pedig működik, csak győzd kivárni (meg néha megmagyarázhatatlan okokból - tök random - elszáll a system/ajax, csak pörög és semmi...)
Köszi a foglalkozást velem :)
Sziasztok, gülüke.
0
0