Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Modul-Entwicklung ›

Felder deaktivieren UND automatisch füllen lassen.

Eingetragen von Scentyoo (60)
am 13.07.2009 - 12:57 Uhr in
  • Modul-Entwicklung
  • Drupal 6.x

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?

‹ Menüpunkt inaktiv ("Klick ohne Funktion") machen? Views Filter der mehrere Felder durchsucht ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

hook_form_alter + hook_nodeapi

Eingetragen von traxer (1009)
am 13.07.2009 - 20:16 Uhr
  1. In hook_form_alter die Formularelemente entfernen (oder durch entsprechende Elemente des Typs value ersetzen).
  2. In hook_nodeapi($op = 'presave') die Werte des Nodes setzen.

--
XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

hook_form_alter

Eingetragen von hnv (28)
am 14.07.2009 - 11: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, ...

  • Anmelden oder Registrieren um Kommentare zu schreiben

Re: hook_form_alter

Eingetragen von traxer (1009)
am 14.07.2009 - 13:35 Uhr
hnv schrieb

$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.

--
XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich habe das nun

Eingetragen von Scentyoo (60)
am 14.07.2009 - 21: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.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Scentyoo schrieb Gibt es

Eingetragen von traxer (1009)
am 14.07.2009 - 19:16 Uhr
Scentyoo schrieb

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.

Scentyoo schrieb

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
 
}
?>

--
XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Was spricht gegen die

Eingetragen von rokr (593)
am 15.07.2009 - 02: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

XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Neuinstallation: vermutlich ein rewrite-Problem
  • Drupal CMS installieren
  • [erledigt]MP3 in Drupal 10 einbinden
  • (gelöst)Drupal 11 installieren
  • Titel ausblenden
  • Ich brauche dringen Hilfe zu Updates oder ggf. wwie geht Composer?
  • Dynamische Ansicht von Seiteninhalt (als Tabelle?)
  • Vergabe von Berechtigungen für bestimmte Rollen; mir fehlt der Haken bzw. das „Veröffentlicht“
  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • Rolle erstellen nicht zu finden
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
Weiter

Neue Kommentare

  • Was für einen Server benutzt
    vor 3 Tagen 14 Stunden
  • Wenn die Subdomain auf
    vor 5 Tagen 12 Stunden
  • ordnerstruktur
    vor 5 Tagen 23 Stunden
  • Die Subdomain muß auf den
    vor 1 Woche 1 Tag
  • Verwende doch das Tag dafür,
    vor 4 Wochen 3 Tagen
  • Guckst du hier: step by step
    vor 4 Wochen 2 Tagen
  • Guckst du hier: step by step
    vor 4 Wochen 2 Tagen
  • Ich habe ja keine Angst vor
    vor 5 Wochen 5 Tagen
  • Ist grundsätzlichmachbar – aber nichts für „einfach mal schnell“
    vor 6 Wochen 10 Stunden
  • Vielen Dank erst einmal, aber
    vor 6 Wochen 2 Tagen

Statistik

Beiträge im Forum: 250289
Registrierte User: 20513

Neue User:

  • Scottteday
  • MichaelPeeno
  • Pavlotog

» Alle User anzeigen

User nach Punkten sortiert:
wla9466
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 59 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association