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

[gelöst] Ausblenden von Nicht-Pflichtfeldern mit Hilfe von hook_form_BASE_FORM_ID_alter

Eingetragen von jshoffmann (82)
am 22.10.2013 - 15:29 Uhr in
  • Module
  • Drupal 7.x

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

‹ Privatemsg / Antwortformular ändern [gelöst] Ausblenden von Nicht-Pflichtfeldern mit Hilfe von hook_form_BASE_FORM_ID_alter ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Wenn Du wirklich in einer

Eingetragen von wla (9461)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Dankeschön!

Eingetragen von jshoffmann (82)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • 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
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 2 Tagen 21 Stunden
  • Hey danke
    vor 3 Tagen 16 Stunden
  • Update: jetzt gibt's ein
    vor 4 Tagen 10 Stunden
  • Hallo, im Prinzip habe ich
    vor 1 Woche 1 Tag
  • Da scheint die Terminologie
    vor 1 Woche 1 Tag
  • Kannst doch auch alles direkt
    vor 1 Woche 6 Tagen
  • In der entsprechenden View
    vor 1 Woche 6 Tagen
  • Dazu müsstest Du vermutlich
    vor 1 Woche 6 Tagen
  • gelöst
    vor 4 Wochen 2 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 4 Wochen 3 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20449

Neue User:

  • Mroppoofpaync
  • 4aficiona2
  • AppBuilder

» 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 8 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