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 - 11: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 - 19: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 - 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, ...

  • Anmelden oder Registrieren um Kommentare zu schreiben

Re: hook_form_alter

Eingetragen von traxer (1009)
am 14.07.2009 - 12: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 - 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.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Scentyoo schrieb Gibt es

Eingetragen von traxer (1009)
am 14.07.2009 - 18: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 - 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

XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • wmtbpo361x
  • Rolle erstellen nicht zu finden
  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
Weiter

Neue Kommentare

  • Rollen
    vor 4 Tagen 20 Stunden
  • Inzwischen sind wir bei
    vor 2 Wochen 1 Tag
  • Migrieren von D7 auf D8/ D10/ D11
    vor 2 Wochen 2 Tagen
  • melde mich mal wieder, da ich
    vor 9 Wochen 6 Tagen
  • Hey danke
    vor 10 Wochen 4 Stunden
  • Update: jetzt gibt's ein
    vor 10 Wochen 22 Stunden
  • Hallo, im Prinzip habe ich
    vor 10 Wochen 5 Tagen
  • Da scheint die Terminologie
    vor 10 Wochen 5 Tagen
  • Kannst doch auch alles direkt
    vor 11 Wochen 2 Tagen
  • In der entsprechenden View
    vor 11 Wochen 2 Tagen

Statistik

Beiträge im Forum: 250238
Registrierte User: 20467

Neue User:

  • LorisBen
  • StevenEness
  • ocvk2810

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 33 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