checkbox csak olvashatóvá (d6)

aruna képe

Sziasztok!

Már nézegetem egy ideje a neten, de nincs több időm próbálgatni, hátha tudja valaki kapásból.

Ezen cikk alapján indultam el:

http://www.silviogutierrez.com/blog/making-cck-fields-read-only-drupal-6/

function setReadonly(&$form, &$form_state, $fieldname) {    
  $form[$fieldname][0]['value']['#attributes']['readonly'] = 'readonly';
  $form_state['values'][$fieldname][0]['value'] = $form[$fieldname]['#default_value']['value'];
}

Ezzel a módszerrel a 'field_*' -al kezdődő cck mezőket (textfield, texarea sikerült csak olvashatóvá tenni.

Itt kérdés?
"$form_state['values'][$fieldname][0]['value'] = $form[$fieldname]['#default_value']['value'];"
Ez a sor ^^^ minek?

--------------

Itt jön a fő kérdés.

Van egy státusz mezőm (field_status):
created|Created
approved|Approved
finished|Finished

Ezek checkbox-ok.

Egy olyan függvényt szeretnék, aminek megadom paraméterként a readonly-vá állítandó checkbox-ok kulcsát, így ezek csak olvashatóvá válnak, de a többi checkbox-ot még lehet ki/be pipálni a user-nek.

pl. így hívnám (egy 'after_build' függvényben):

setStatusReadonly("approved,finished")

ezután csak a 'created' lenne pipálható, a többi meg csak olvasható.

Elvesztem a $form tömbben. Nem világos.
Köszönöm előre is az ötleteket.

Drupal verzió: 
aruna képe

function setStatusReadonly(&$form, &$form_state, $status) {
  $status_arr = explode(",", $status);
  $fieldname = "field_status";
  foreach (array_keys($form[$fieldname]['value']['#options']) as $status_item) {
    if (in_array($status_item, $status_arr)) {
      // Ide mit írjak?
    }
  }
}
0
0
aruna képe

Kicsit el lehet
kavarni ebben a
$form tömbben.

function setStatusReadonly(&$form, &$form_state, $status) {
  $status_arr = explode(",", $status);
  $fieldname = "field_status";
  foreach (array_keys($form[$fieldname]['value']['#options']) as $status_item) {
    if (in_array($status_item, $status_arr)) {
      // Ez a sor a lényeg:
      $form[$fieldname]['value'][$status_item]['#attributes']['disabled'] = 'disabled';      
    }
  }
}
0
0
Sk8erPeter képe

Azt néztem, hogy mihez kell neked itt az explode(), és most látom, hogy ezt írod:

„pl. így hívnám (egy 'after_build' függvényben):
setStatusReadonly("approved,finished")”

ujjujj, ez nagyon ronda. Miért akarod így hívni?
Miért nem egy tisztességesen bejárható tömböt adsz át?
Pl. (igazodva az elnevezésedhez, ami mondjuk Drupal-konvenciókkal teljesen szembemegy):

setStatusReadonly(array('approved','finished'));
Szebb és kezelhetőbb lenne..

0
0
Sk8erPeter képe

A checkboxnál a readonly="readonly" nem működik, ott a disabled="disabled" működik.

Így:

http://jsbin.com/uponey/2/edit

  1. <input type="checkbox" disabled="disabled" checked="checked" value="yes" />This checkbox will be disabled

A $form és $form_state tömbök átlátható kiíratására (a fejlesztés idejéig) pedig használd a Devel modul dsm() függvényét.

1
0