[gelöst] Feld deaktivieren, falls Node veröffentlicht ist
am 28.03.2011 - 12:55 Uhr in
Hey zusammen,
ich habe ein recht wichtiges Feld in einer Node, welches gesperrt werden soll sobald die Node published ist (status = 1). Alle anderen Felder sollen noch editierbar sein - nur das eine sollte deaktiviert sein (dargestellt aber nicht editierbar).
Schneller Lösungsansatz?
Wie bekomme ich in hook_form_alter den Status der Node?
Lg,
Kilian
- Anmelden oder Registrieren um Kommentare zu schreiben

Lass dir mal das Form-Array
am 28.03.2011 - 14:00 Uhr
Lass dir mal das Form-Array mithilfe des [do:devel] Moduls ausgeben - in diesem Array solltest du dann auch den Status deiner Node finden..
<?phpfunction mymodule_form_alter(&$form, &$form_state, $form_id) {
dsm($form);
if($form_id=='myform') {
}
}
?>
SteffenR
Okay, leider steht der Status
am 28.03.2011 - 14:03 Uhr
Okay, leider steht der Status laut print_r auch beim Add-Formular schon auf "1".
Andere Idee woran ich im form_alter erkennen kann ob es eine published node ist?
ksiebel schrieb Okay, leider
am 28.03.2011 - 14:31 Uhr
Okay, leider steht der Status laut print_r auch beim Add-Formular schon auf "1".
Andere Idee woran ich im form_alter erkennen kann ob es eine published node ist?
Wenn der Status der Node dort schon auf 1 steht - dann heisst es wohl, dass die Node schon puplished ist.. Setz sie doch mal auf unpublished und prüfe dann die Ausgabe noch einmal ..
SteffenR
Das Add-Formular und das
am 28.03.2011 - 16:32 Uhr
Das Add-Formular und das Edit-Formular könntest du übrigens ganz einfach unterscheiden, der Node im Edit-Formular hat nämlich schon eine Node-ID, im Add-Formular noch nicht.
Wenn also der Status = "1" und eine Node-ID vorhanden ist, dann hast du einen bereits gespeicherten, veröffentlichten Node.
Und hier das funktionierende
am 29.03.2011 - 08:49 Uhr
Und hier das funktionierende Ergebnis:
Im form_alter:
if ($form_id == 'stellenangebot_node_form') {
if (isset($form['nid']['#value']) && $form['#node']->status == '1') {
$form['field_stellentyp']['#pre_render'][] = 'disable_fields_function';
$form['field_ausbildungsberuf']['#pre_render'][] = 'disable_fields_function';
$form['field_beruf'][0]['#pre_render'][] = 'disable_fields_function';
}
}
Die zugehörige Funktion:
function disable_fields_function($element) {
$element['value']['#attributes'] = array('disabled' => 'disabled');
return $element;
}
Okay, dabei tut sich
am 29.03.2011 - 12:54 Uhr
Okay, dabei tut sich folgendes Problem auf:
Wenn man die Felder auf disabled setzt werden die Wete beim erneuten Speichern überschrieben und sind leer.
Hat da jemand eine Idee?
Textfelder werden beim
am 29.03.2011 - 13:11 Uhr
Textfelder werden beim erneuten Speichern geleert - bei Selects funktioniert disabled aber hervorragend.
Für Textfelder bietet sich noch das readonly-Attribut.
Hier die entsprechende Lösung:
Form Alter:
function DEINMODUL_form_alter(&$form, $form_state, $form_id) {
if ($form_id == 'DEINCONTENTTYPE_node_form') {
if (isset($form['nid']['#value']) && $form['#node']->status == '1') {
$form['field_stellentyp']['#pre_render'][] = 'disable_fields_function'; // Select-Feld kann disabled werden
$form['field_ausbildungsberuf']['#pre_render'][] = 'readonly_fields_function'; // Textfelder müssen readonly gesetzt werden
$form['field_beruf'][0]['#pre_render'][] = 'readonly_fields_function'; // Textfelder müssen readonly gesetzt werden
}
}
}
Die beiden Funktionen:
function disable_fields_function($element) {
$element['value']['#attributes'] = array('disabled' => 'disabled');
return $element;
}
function readonly_fields_function($element) {
$element['value']['#attributes'] = array('readonly' => 'readonly');
return $element;
}