cck field - ne legyen kötelező

aruna képe

Próbálom leszedni a
teaser mezőről
a kis piros csillagot,
hogy ne legyen
kötelező a kitöltése.

// Leszedi az cck mezőkről (most textarea-val próbálom csak) a * -ot.
function removeRequired(&$form, &$form_state, $fieldnames) {
  foreach ($fieldnames as $fieldname) {
    $form[$fieldname]['#required'] = '0';
    $form[$fieldname][0]['#required'] = '0';  
    $form['#field_info'][$fieldname]['required'] = '0'; 
    $form_state['values'][$fieldname][0]['value'] = $form[$fieldname]['#default_value']['value'];
  }
}
 
// A hívás
removeRequired($form, $form_state, array(
  'field_article_teaser',
));

De nem megy.

A dpm() függvénnyel nézegetem a függvény futása után a $form tartalmát.
Valóban minden helyen (amit találtam és állítok a függvényben a required értéke 0 lesz. De ez még nem elég. Mi lehet a hiba?

Azért kell ez, mert alapvetően kötelező kitölteni a mezőt, de nem mindig.

Drupal verzió: 
Sk8erPeter képe

Nekem az nem világos, hogy ahogy észrevettem a postolt kódjaidban, mindenre általános jellegű függvényt szeretnél írni, pedig ez nem mindig indokolt: itt is látszik, hogy csak bonyolítja az egészet, és most ebből számunkra (legalábbis számomra) sem derül ki, hogy konkrétan melyikre vonatkozóan szeretnéd leszedni a required kulcsot.
Ráadásul le sem ellenőrzöd isset()-tel, létezik-e egyáltalán az adott tömbelem, és minden lehetséges kombinációra végigpróbálgatod a required 0-ra állítását, még ha az nem is létezik. Így csak BELERAKSZ manuálisan a tömbbe olyan plusz elemeket, amik nem szükségesek, ráadásul a Drupal saját formösszeállító, renderelő függvényeit totál összezavarhatod vele.
Konkrétan egy mező egy LÉTEZŐ kulcsát próbáld meg manipulálni valami form alterben, és ne feltétlenül akarj létrehozni mindenre általánosító függvényt. Remélem, ezt nem veszed rosszindulatnak, mert nem szemétségből mondom, hanem jótanácsként.

0
0
Sk8erPeter képe

na, most miután kiírattam a $form-ot egy after build függvényben a Devel modul dsm() függvényével, meg kipróbálgattam, egyből meglett a megoldás, csak úgy sikerült, hogy 3 helyen is 0-ra állítottam a required kulcsot, konkrétan így:

  1. /**
  2.  * Implementation of hook_form_FORM_ID_alter()
  3.  */
  4. function testModule_form_another_test_ct_node_form_alter(&$form, &$form_state) {
  5. // dsm($form, '$form in '.__FUNCTION__.'()');
  6. // dsm($form_state, '$form_state in '.__FUNCTION__.'()');
  7. $form['#after_build'][] = 'testModule_form_another_test_ct_node_form_alter_after_build';
  8. }
  9.  
  10. /**
  11.  * form alter after build blabla
  12.  */
  13. function testModule_form_another_test_ct_node_form_alter_after_build(&$form, &$form_state) {
  14. // dsm($form, '$form in '.__FUNCTION__.'()');
  15. // dsm($form_state, '$form_state in '.__FUNCTION__.'()');
  16.  
  17. $form['field_test_text']['#required'] = '0';
  18. $form['field_test_text'][0]['#required'] = '0';
  19. $form['field_test_text'][0]['value']['#required'] = '0';
  20.  
  21. return $form;
  22. }
1
0
aruna képe

a gyors segítséget.

Ez maradt ki a kódomból:

$form[$fieldname][0]['value']['#required'] = '0';

Ezt nem vettem észre.

0
0