Felder deaktivieren UND automatisch füllen lassen.
am 13.07.2009 - 11:57 Uhr in
Hallo,
ich habe einen Inhaltstyp 'Server' der 7 mit CCK erstellte Felder hat (IP, Port, Passwort, Nutzer,...). Als Admin habe ich insgesamt 15 Server erstellt und alles ausgefüllt.
Die Benutzer hingegen sollen nur über ein Formular die Möglichkeit haben die Daten der Server zu verändern. Jedoch nicht alle 7 Felder, sondern nur 3 davon. Die anderen 4 Felder sollen automatisch ausgefüllt werden (z.B. soll automatisch ein Passwort generiert und eingetragen werden).
Wie mache ich das am einfachsten?
- Anmelden oder Registrieren um Kommentare zu schreiben

hook_form_alter + hook_nodeapi
am 13.07.2009 - 19:16 Uhr
hook_form_alterdie Formularelemente entfernen (oder durch entsprechende Elemente des Typsvalueersetzen).hook_nodeapi($op = 'presave')die Werte des Nodes setzen.--

hook_form_alter
am 14.07.2009 - 10:59 Uhr
ja, so was habe ich auch schon mal gemacht.
Für die Felder z.B. Passwort, die man sehen aber nicht ändern kann:
$form['pwd']['#attributes']= array(
'disabled' => TRUE,
);
und danach mit Javascript Werte einschreiben, oder was sonst ...
Für die Felder z.B. IP, die man überhaupt nicht nicht sichtbar sein soll
$form['ip'] = array(
'#type' => 'hidden',
'#default_value' => $user->hostname, // global $user ist notwendig
);
ob das eine akzeptable Lösung ist, ...
Re: hook_form_alter
am 14.07.2009 - 12:35 Uhr
$form['ip'] = array(
'#type' => 'hidden',
'#default_value' => $user->hostname, // global $user ist notwendig
);
ob das eine akzeptable Lösung ist, ...
Sicherlich nicht, da der Wert trotzdem noch vom Server zum Browser und anschließend vom Browser zum Server übertragen wird. Der Entwickler muss dann selbst herausfinden, ob noch der ursprüngliche Wert vorhanden ist. Besser:
<?php
$form['ip'] = array(
'#type' => 'value',
'#value' => $value,
);
?>
Dann bleibt der Wert auf dem Server und wird erst nach dem Absenden während der Formularverarbeitung transparent in
$form_state['values']eingefügt.--

Ich habe das nun
am 14.07.2009 - 20:21 Uhr
Ich habe das nun folgendermaßen gelöst:
<?php
function server_form_alter(&$form, $form_state, $form_id) {
if($form_id == 'server_node_form') {
unset($form['field_server_config']);
unset($form['field_server_password']);
unset($form['field_server_user']);
// Hier könnten noch weitere Elemente deaktiviert werden
}
}
function server_nodeapi(&$node, $op) {
if($op == 'presave' AND $node->type == 'server') {
$node->field_server_password[0]['value'] = rand(10000, 99999);
$node->field_server_user[0]['uid'] = $user->uid; // global $user ist notwendig
}
}
?>
Ist daran alles richtig? Vielen Dank traxer für den Tip mit hook_form_alter() und hook_nodeapi() !!
Gibt es eine Möglichkeit, für das 'neue' Formular einen Menüeintrag zu erstellen? Also mit hook_menu() ?
Es wäre cool, wenn man das alte Formular über "/node/%/edit" und das neue Formular über "server/%/edit" aufrufen könnte. Dadurch wäre die Rechte-Verwaltung auch sehr simpel, sodass Admins alles bearbeiten können und die Benutzer nur ein paar Felder davon.
Scentyoo schrieb Gibt es
am 14.07.2009 - 18:16 Uhr
Gibt es eine Möglichkeit, für das 'neue' Formular einen Menüeintrag zu erstellen? Also mit hook_menu() ?
Es gibt kein neues und kein altes Formular, es gibt nur ein Formular.
Dadurch wäre die Rechte-Verwaltung auch sehr simpel, sodass Admins alles bearbeiten können und die Benutzer nur ein paar Felder davon.
Einfache rollenbasierte Rechteverwaltung:
<?php
/**
* Implementation of hook_perm().
*/
function server_perm() {
return array('set server password');
}
function server_form_alter(&$form, $form_state, $form_id) {
if($form_id == 'server_node_form' && !user_access('set server password')) {
// TODO: Deine Formularaenderungen hier einfuegen.
}
}
function server_nodeapi(&$node, $op) {
if($op == 'presave' && $node->type == 'server' && !user_access('set server password')) {
// TODO: Nicht gesetzte Felder befuellen
}
?>
--

Was spricht gegen die
am 15.07.2009 - 01:34 Uhr
Was spricht gegen die Verwendung von "Content Permissions", ist Teil von CCK?
http://www.drupalcenter.de/handbuch/5015
Edit: Sorry, hatte die Frage nur zur Hälfte gelesen.
Ronald
--
www.14m5.de