Drupal 8 #states funkcióinak bővítése

szabozee képe

Hogy ne kelljen külön keresgélni, erről van szó:

https://api.drupal.org/api/drupal/core!includes!common.inc/function/drup...

A kérdés az lenne, hogy ha valami olyat szeretnék, ami nem támogatott a #states-sal alapból, azt hogy kell szépen megcsinálni és nem kókányolva.

Itt egy példakód részlet a jobb érthetőségért:

  1. $form['gombok'] = array(
  2. '#type' => 'radios',
  3. '#options' => array(
  4. 'csakegy' => 'Csak egy elem',
  5. 'mindegyik' => 'Minden elem',
  6. ),
  7. );
  8.  
  9. $form['lista'] = array(
  10. '#type' => 'select',
  11. '#options' => array(
  12. '1' => 'alma',
  13. '2' => 'barack',
  14. '3' => 'pálinka',
  15. ),
  16. '#states' => array(
  17. 'disabled' => array(
  18. 'input[name="gombok"]' => array('value' => 'csakegy' ),
  19. ),
  20.  
  21. ),
  22. );

Ez a fenti kód ugye azt csinálja, hogy tetszőlegesen választani lehet az alma, barack és pálinka között, mindaddig amíg a rádió gombok a "Minden elem" állapotban van de a választási lehetőség letiltásra kerül, ha a rádió gombot átbillentem a "Csak egy elem"-re.

Azt szeretném, hogy ha már csak egyet választhatok, akkor az minden esetben a ( értelemszerűen :-D )pálinka legyen.

Tehát hogy kell ezt szépen megoldani ?

Így egyszerű a megoldás ugye, hogy hozzácsapok egy js kódot

$form['#attached']['library'][] = 'csunyamegoldas_js';

csak akkor oda szép tiszta konzisztens kódom és ráadásul máshol nem is tudom többet felhasználni ezt a fejlesztést.

Várom a "drupal"-os megoldási javaslatokat !

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

valami hasonló kód kell hozzá:

/**
 * Implements hook_form().
 */
function MYMODULE_element_select_form($form, $form_state) {
  $form['gombok'] = array(
    '#type' => 'radios',
    '#options' => array(
      'csakegy' => 'Csak egy elem',
      'mindegyik' => 'Minden elem',
    ),
    '#ajax' => array(
      'callback' => 'MYMODULE_element_select_ajax_callback',
      'wrapper' => 'lista-wrapper',
      'method' => 'replace',
      'effect' => 'fade',
    ),
    '#default_value' => isset($form_state['values']['gombok']) ? $form_state['values']['gombok'] : '',
  );
 
  $options = array('1' => 'alma', '2' => 'barack', '3' => 'pálinka');
  if (!empty($form_state['values']['gombok']) && $form_state['values']['gombok'] == 'csakegy') {
    $options = array('3' => 'pálinka');
  }
 
  $form['lista'] = array(
    '#type' => 'select',
    '#options' => $options,
    '#prefix' => '<div id="lista-wrapper">',
    '#suffix' => '</div>',
  );
 
  return $form;
}
 
/**
 * Callback ajax element select.
 */
function MYMODULE_element_select_ajax_callback($form, $form_state) {
  return $form['lista'];
}
0
0

Üdv!
Dudás József

szabozee képe

Először is köszönöm a válaszodat. Természetesen így, ahogy írtad #ajax-szal és még számtalan egyéb módon is meg lehet oldani a példának felhozott feladatot. A kérdés viszont nem a példa megoldása, hanem az, hogy a #states funkcióit hogyan lehet szép drupálos megoldással ( például egy modullal ) úgy bővíteni, hogy alapból nem támogatott új paramétereket is lehessen használni a #states-ban. Azért fontos így, hogy más projekteknél is lehessen ugyanazt a kódot(modult) használni és hogy konzisztens maradhasson a kód. Ilyenre gondoltam nagyjából az eredeti példánál maradva:

  1. '#states' => array(
  2. 'disabled' => array(
  3. 'input[name="gombok"]' => array('value' => 'csakegy' ),
  4. ),
  5. 'updatevalue' => array(
  6. 'select[name="lista"]' => array('value' => '3' ), // 3 = pálinka
  7. ),
  8. ),
0
0

szabozee (zee zee zee kukac free mail pont hu)

nevergone képe

Szia!

Ha itt az „updatevalue” a kérdés, akkor szerintem olyan paramétereket tudsz használni, amiket a jQuery támogat. Így ha plusz dolgokat szeretnél, akkor azt kell okosítanod.

0
0