Formularelemente zu CCK-Fields sollen nur bei Neu-Anlegen eines Nodes angezeigt werden.
Eingetragen von jehoho (19)
am 11.06.2008 - 12:22 Uhr in
am 11.06.2008 - 12:22 Uhr in
Hallo.
Ich möchte, dass bestimmte Formularelemente nur angezeigt werden, wenn der Node neu angelegt wird.
Es geht um denk klassischen Fall: der Inhaltstype "Kundendaten" mit Adresse u.s.w. und:
Eingabe von Kundendaten mit Checkbox für die Zustimmung zu AGB und Radioboxen für Zahlungsweise (Rechnung/Bankeinzug).
Die letzten beiden brauche ich nur, wenn der Kunde die Daten neu eingibt.
Die übrigen Kundendaten (Adresse u.s.w.) soll der Kunde auch im Nachhinein bearbeiten können.
Wie kann man das lösen?
Danke.
- Anmelden oder Registrieren um Kommentare zu schreiben
Ich denke die ganze Sache
am 11.06.2008 - 13:11 Uhr
Ich denke die ganze Sache per Nodetype Template zu steuern ist am Einfachsten.
Im Template werden zunaechst ALLE CCK Felder einzeln ausgegeben. Also nicht ueber die $content Variable.
Vor der Ausgabe der einzelnen Felder findet eine entsprechende Pruefung statt.
Sollten die Kundendaten Bestandteil des Userprofiles sein kommst Du mit dem normalen Drupal Userprofil nicht weit und voran gesagtes kannst Du NICHT anwenden.
Edit:
Ist ja Bullshit was ich gerade gesagt habe. Das betrifft ja nur die Anzeige der Node. Du willst ja im Editmodus Feldanzeigen einschraenken.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
Ein moeglicher
am 11.06.2008 - 13:20 Uhr
Ein moeglicher Loesungsansatz waeren CCK "Conditional Fields".
Damit koennen CCK Felder/Feldgruppen bei Bedarf angezeigt werden. Sprich:
Klickt der Kunde im Editmodus auf "mehr Daten anzeigen" dann werden die zunaechst nicht sichtbaren Felder angezeigt.
Das sollte auch per PHP zu steuern sein in dem das fuer die Auswahl zustaendige CCK Selekt-Feld "weniger Daten/mehr Daten" dynamisch generiert wird.
Auch hierbei gilt.
Sollten die Kundendaten Bestandteil des Userprofiles sein kommst Du mit dem normalen Drupal Userprofil nicht weit und voran gesagtes kannst Du NICHT anwenden.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
Man kann sich auch ein
am 11.06.2008 - 13:56 Uhr
Man kann sich auch ein eigenes Modul schreiben, dass sich in hook_form_alter() einklinkt , wenn das Formular des Nodetyps generiert wird und kann dann anhand z.B. des URL-Path-Parameters (das Wort habe ich eben erfunden ;) ) "edit" entscheiden die gewünschten Felder aus dem Formular zu entfernen.
<?php
MEINMODUL_form_alter($form_id, &$form) {
if ($form_id == 'MEINTYP_node_form' && $node->type == 'MEINTYP' && arg(2) == 'edit') {
unset($form['MEINFELD']);
}
}
?>
--
"Look, Ma, I'm dead!"
Cell, Stephen King
Suchmaschinenoptimierung (SEO) & Drupal
@Alexander, mit der
am 11.06.2008 - 14:03 Uhr
@Alexander,
mit der hook_form_alter() Variante ist dies nicht mehr moeglich:
Die übrigen Kundendaten (Adresse u.s.w.) soll der Kunde auch im Nachhinein bearbeiten können
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
Dafür, dass es nicht geht,
am 11.06.2008 - 14:07 Uhr
Dafür, dass es nicht geht, funktionierts bei mir aber ganz gut. ;)
--
"Look, Ma, I'm dead!"
Cell, Stephen King
Suchmaschinenoptimierung (SEO) & Drupal
Wenn Du im Edit Modus
am 11.06.2008 - 14:29 Uhr
Wenn Du im Edit Modus Formularelemente nicht anzeigst wie sollen ihre Inhalte dann nachtraeglich zu editieren sein?
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
Ah!!! Da habe ich wohl ein
am 11.06.2008 - 14:39 Uhr
Ah!!! Da habe ich wohl ein fieses Detail kurzum überlesen :D Sorry, quip!
Aber auch dann kann man sich was modulmäßiges stricken. Statt das Feld zu entfernen, fügt man ein neues collapsible Fiield ein und verschiebt die gewünschten Felder im Form-Array in eben dieses.
Denkanstoß:
<?php
$form['MEIN_NEUES_FELD'] = array(
'#title' => t('More information'),
'#type' => 'fieldset',
'#collapsible' => true,
'#collapsed' => true,
'#weight' => -3,
);
?>
--
"Look, Ma, I'm dead!"
Cell, Stephen King
Suchmaschinenoptimierung (SEO) & Drupal
Womit wir wieder beim CCK
am 11.06.2008 - 14:53 Uhr
Womit wir wieder beim CCK Modul "Conditional Fields" angelangt waeren.
Vorteil von "Conditional Fields" gegenueber einem eigenen Modul waeren die sofort verfuegbaren Funtionalitaeten im CCK Umfeld. Diese muesste man im eigenen Modul durch weiteren Code kreieren.
Ausserdem ist ein Modul erst mal "eher statisch". Bei nachtraglichen Aenderungen im Profil kann man mit "Conditional Fields" einfacher reagieren.
Bei D6 allerdings ist momentan das eigene Modul die Loesung.
PS
Will nix gegen eigene Module sagen.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
Ich setze CF selbst hier und
am 11.06.2008 - 18:19 Uhr
Ich setze CF selbst hier und da ein. Aber für D6, wie du schon anmerkst, gibt es das nicht und es gibt auch diverse Berichte zu Problemen im Einsatz. Ich hatte noch keine, das mag aber Glück sein ;)
--
"Look, Ma, I'm dead!"
Cell, Stephen King
Suchmaschinenoptimierung (SEO) & Drupal
Ich habe neulich auf 'ner
am 11.06.2008 - 18:49 Uhr
Ich habe neulich auf 'ner Website exessiv CF eingesetzt. Da hatte ich Probleme. Konnte sie aber klaeren. Mein Eindruck ist, CF ist irgendwie ein klein wenig im Beta haengengeblieben.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.