[gelöst] Ausblenden von Nicht-Pflichtfeldern mit Hilfe von hook_form_BASE_FORM_ID_alter
am 22.10.2013 - 15:29 Uhr in
Hallo Community,
da ihr immer total tolle Hilfestellungen habt und ich gerade echt am Verzweifeln bin, hoffe ich sehr, dass ihr mir weiterhelfen könnt. Also entweder bin ich komplett auf dem falschen Weg oder mir fehlt dann doch die notwendige Kenntnisse, dann werde ich wohl das ganze Projekt an einen Fachmann geben müssen - aber noch habe ich nicht aufgegeben.
Ich habe schon einige Zeit nichts mehr mit PHP gemacht und meine Lösung ist wahrscheinlich sehr umständlich oder einfach nur total falsch.
Mein Ziel:
Ziel meiner Bemühungen ist es, in einer Form die Nicht-Pflichtfelder mit Hilfe der hook_form_BASE_FORM_ID_alter auszublenden.
Hintergründe:
Momentan ist es so, dass der Benutzer beim Anlegen eines Inhaltstyps A festlegen kann, welche Felder andere Benutzer im Inhaltstyp B als Pflichtfelder ausfüllen müssen, Daher kann ich die Felder nicht einfach im Inhaltstypen entfernen: deswegen das Nutzen der Hook-Funktion. (Die bisherigen Funktionen wurden alle von einem anderen Menschen programmatisch gelöst, den ich jetzt aber leider nicht mehr fragen kann).
Mein Ansatz:
Zuerst wollte ich einfach das Feld mit $form['feld_name']['#required']
auf ungleich 1 bzw. ungleich TRUE prüfen und dann ggf. ausblenden. Dann ist mir aufgefallen, dass da mehrere Arrays so tief ineinander verschachtelt sind, dass ich vorher gar nicht weiß, wie tief ich da rein muss (Da ist dann ein Feld in einer Field group bspw.). Also hab ich eine rekursive Funktion geschrieben, die sich selbst wieder aufruft, wenn das Feld ein "container" ist. Anschließend habe ich ein #access = 0 gesetzt und das ganze per "return" zurückgegeben. Aber irgendwie funktioniert das nicht so recht, weil die Daten dann nicht mehr zu den "richtigen" Eltern-Elementen zugewiesen werden sondern immer zum zuletzt Aufgerufenen.
Mein zweiter Ansatz:
Um es nicht ganz so kompliziert zu machen, war jetzt mein zweiter Ansatz ein Array von allen Feld-Namen auszulesen, die verwendet werden und dieses dann in einer Schleife auf "#required" zu prüfen. Aber hier scheitere ich schon am richtigen Auslesen der vorhandenen Form-Felder (wieder wegen diesen verschachtelten Arrays).
Hat eventuell einer einen hilfreichen Link oder Ansatz für mich? Ich suche seit Stunden bei Google nach Lösungsansätzen sowohl im Drupal- als auch PHP-Bereich, aber irgendwie will sich mir nichts richtig erschließen. Gibt's da eventuell irgendwelche Funktionen, auf die ich noch nicht gestoßen bin (beispielsweise eine in Drupal bereits vorhandene Funktion für das Array an vorhandenen Form-Feldern) oder suche ich eventuell nach den falschen Begriffen/Keywords?
Falls ich mit meiner Hilfesuche hier falsch bin, tut es mir Leid. Aber ich wusste gerade einfach nicht weiter :(.
Klingt jetzt auch in der Beschreibung viel komplizierter, als ich mir das vorgestellt hatte ...
Vielen Dank im Voraus!
Jacqueline
- Anmelden oder Registrieren um Kommentare zu schreiben
Wenn Du wirklich in einer
am 22.10.2013 - 15:53 Uhr
Wenn Du wirklich in einer solch komplexen Struktur navigieren mußt, erscheint mir die Rekursion schon als sinnvoller Ansatz. Trotzdem würde ich vermutlich eine Liste von Feldern abarbeiten. Die wurde ich allerdings nicht aus der Form holen, sondern aus dem Datentyp, das ist deutlich übersichtlicher. Du mußt allerdings auf ein paar Kleinigkeiten Acht geben. Da werden offensichtlich Field-Groups verwendet. Die dienen als Struktur Elemente und die darfst Du nicht ausblenden. Du kannst also nicht nur auf #required abfragen, sondern mußt nach dem Typ differenzieren.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Dankeschön!
am 05.11.2013 - 15:20 Uhr
Hallo Werner,
super, vielen Dank für deine Lösungsansätze - haben mir sehr weitergeholfen! Ich übergebe jetzt immer ein Array mit allen Feldern des Dateityps, die geprüft werden sollen und prüfe diese dann auf #required ab. Sind sie nicht benötigt, werden sie mit "hide()" ausgeblendet. Ich hatte dann noch einige Probleme mit anderen Funktionen, die dann nachträglich noch auf die Felder zugreifen wollten, aber jetzt klappt alles. Vielen Dank!!
Viele Grüße,
Jacqueline