Приветствую,
Есть форма, в ней несколько кнопок:
Как видите вызывается функция upload_csv_.$type - если $type = tvsets , то должна выполниться функция:
upload_csv_tvsets
Как бы ей еще из формы передать несколько аргументов?
Что посоветуете?
С ув., Алексей
Комментарии
Функция-то аргументы принимает — в $form_state можно передать что угодно.
Опс... Привет.
Можно кинуть ссылкой?
Не представляю как это реализовать?
Как вызвать аргументы (куда их писать то)?
Зараннее спасибо!
С ув., Алексей
<?php
$form
['my_arg'] = array('#type' => 'value', '#value' => 'my_arg'); ?>Значение ловите в $form_state['values']['my_arg'];
прописываем функцию
<?php
function upload_csv_tvsets($form, &$form_state) { //код }
?>
Внутри функции смотрим в $form_state['values'] - там все, что пришло из формы
Спасибо! Но задача немного усложнилась.
Так как у меня есть код, который генерирует поле и выдает кнопки для каждого продукта commerce:
$form['dc_product_upload_'.$type.'_name'] = array (
'#title' => commerce_product_type_get_name($type),
'#description' => $product_type['name'].t(' - product type for upload.'),
'#type' => 'fieldset',
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
$form['dc_product_upload_'.$type.'_name']['dc_product_upload_'.$type.'_filename'] = array (
'#title' => t('Filename'),
'#description' => t('Input file url in local or remote server.'),
'#type' => 'textfield',
'#default_value' => variable_get('dc_product_upload_'.$type.'_filename',''),
'#required' => FALSE,
'#size' => 100,
);
$form['dc_product_upload_'.$type.'_name']['upload_csv_'.$type] = array(
'#name' => 'upload_csv_'.$type,
'#type' => 'submit',
'#value' => t('Upload'),
'#weight' => 15,
'#submit' => array('upload_csv_'.$type),
);
}
таким образом хочется чтобы при вызове функции 'dc_product_upload_'.$type.'_filename' не плодить лишнего кода и чтобы она была универсально, т.е. чтобы функция осталась одна, например, dc_product_upload_porduct1_filename. Но вызывались разные параметры в зависимости от нажатой кнопки.
С ув., Алексей
передаем еще одним параметром $type
что-то вроде
<?php
$form['product_type'] = array {
'#type' => 'value',
'#value' => $type,
}?>
делаем #submit единым для всех форм
а внутри него, в зависимости от $form_state['values']['product_type'] делаем, что нужно
UPD: не обратил внимания, что это у Вас одна большая форма, а не по отдельной форме на каждый продукт, тогда мой способ не совсем подходит, см. комменты ниже от ser_house.
Ничего не понял. Какие параметры, например? Ваши функции знают, для какого типа их вызывают. Им нужно что-то ещё?
В предположении, что Вы хотите использовать одну функцию submit:
уберите '#submit' для кнопок. Добавьте к кнопкам нужный параметр:
'#name' => 'upload_csv_'.$type,
'#type' => 'submit',
'#value' => t('Upload'),
'#weight' => 15,
'#my_value' => $data,
'#product_type' => $type,
);
Будет вызвана обычная form_submit, там ловите:
$button = $form_state['triggering_element'];
...
}
В $button будут '#name', '#my_value', '#product_type' и так далее.
Спасибо! Буду разбираться!
С ув., Алексей