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

Form API: hook_form()

Eingetragen von quiptime (4972)
am 01.12.2007 - 03:11 Uhr in
  • Modul-Entwicklung
  • Drupal 5.x

An alle die sich wirklich mit hook_form() auskennen.

1.
Formelemente die in einem Node-Modul in hook_form() aufgenommen werden erscheinen im Bearbeiten-Formular einer Node. Was muss man tun um Formelemente zu erstellen die nicht im Bearbeiten-Formular erscheinen sonder nur bei der Nodeansicht verwendet werden?

2.
Zur Frage von 1. habe ich 2 Moeglichkeiten gefunden, in einem Node-Modul Formelemente zu definieren. Bei beiden Moeglichkeiten ist es so, das damit definierte Formelemente nicht vom Bearbeiten-Formular einer Node sondern nur bei der Nodeansicht verwendet werden.

3.
Ich wuerde gern als Ergebnis dieses Thread einen Handbuchbeitrag erstellen der alle 3 Moeglichkeiten vorstellt und beschreibt.
Dies moechte ich aber nicht allein machen. Ich suche Jemanden der den Part von hook_form() uebernimmt. Ich steuer die beiden anderen Varianten bei.

-----------------------
quiptime

‹ In page content einfügen? nodeapi? Form API Aufbau-Frage ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi quiptime

Eingetragen von mhuebl (60)
am 02.12.2007 - 21:56 Uhr

Hi quiptime

zu 1:
hook_form ist genau dafür zuständig, das Bearbeiten-Formular zu bearbeiten :-)
Um ein Formular auf der Node-Ansicht anzuzeigen, benutzt du hook_nodeapi(). Fragst dort ab, ob dein Content-Type angezeigt wird mit $op == view und $node->type == x. Ergänzt dann das $node->content[]-Array und rufst dort drupal_get_form() mit dem Funktionsnamen, in dem du dein ganz eigenes Formular definierst, auf.
Ich spar mir das Ausführliche jetzt ok? Kanns aber nachreichen, wenn du nicht klarkommst.

zu 2 + 3.
Ah, ok.. Man sollte immer erst den ganzen Post lesen bevor man antwortet :-)
Ich verstehe den 2. Punkt nicht richtig. Aber wenn ich meine laschen Ausführungen zu 1 konkretisieren soll fürs Handbuch - kann ich das gerne tun. Gib nochmal bescheid.

  • Anmelden oder Registrieren um Kommentare zu schreiben

@mhuebi, Danke Dir fuer Dein

Eingetragen von quiptime (4972)
am 02.12.2007 - 22:59 Uhr

@mhuebi,

Danke Dir fuer Dein Feedback. Kann ich Deinen Post als Zusage fuer den Handbuchbeitrag verstehen?

1. ist mir komplett klar.

Zitat:

Um ein Formular auf der Node-Ansicht anzuzeigen, benutzt du hook_nodeapi(). Fragst dort ab, ob dein Content-Type angezeigt wird mit $op == view ...

Es geht mir auch darum was man machen kann um ein mit mymodule_form() definiertes Formelemen nur ausschliesslich bei der Nodeansicht anzuzeigen.

Was ich mit 2. meine.

Beispiel:
Nehmen wir an man benoetigt bei der Nodeansicht ein Selectfeld um per Javascript Aktionen auszuloesen. Dieses Selectfeld soll aber fuer den Bearbeiter einer Node nicht erreichbar sein, ergo nicht im Bearbeitenmodus erscheinen. Auch gibt es abgesehen von der Definition des Selectfeldes beim Erstellen des Modules keinen Administrationsbedarf fuer dieses Selectfeld

In diesem Falle muss ich das Selectfeld ja irgendwie definieren koennen. Dafuer habe ich 2 Drupal-Moeglichkeiten gefunden.

-----------------------------------------------

Meine Idee fuer den Handbuchbeitrag Form API. Hiermit gebe ich Bescheid.

Ich weiss es gibt da Dokus auf drupal.org. Aber denen fehlt nach meiner Einschaetzung das gewisse Etwas.

Ich moechte eigentlich keine Uebersetzung der existierenden Form Api Dokus produzieren sondern schon etwas Eigenstaendiges. Dabei habe ich die Hoffnung, ein wenig mehr Verstaendnis fuer die Verwendung der Form API zu erzeugen.
Kannst Du mit diesen Gedanken mitgehen.

-------------
quiptime

Nur tote Fische schwimmen mit dem Strom.

XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

quiptime wrote: Kann ich

Eingetragen von mhuebl (60)
am 03.12.2007 - 07:37 Uhr
quiptime schrieb

Kann ich Deinen Post als Zusage fuer den Handbuchbeitrag verstehen?

Ja, kannst du. Ich könnte den Formularprozess auch noch mal in der Theorie erklären (Ablauf, aufgerufene Funktionen etc). Wir müssen nur klären, wer was genau schreibt. Außerdem komme ich zu sowas wahrscheinlich nur am Wochenende.

quiptime schrieb

Es geht mir auch darum was man machen kann um ein mit mymodule_form() definiertes Formelemen nur ausschliesslich bei der Nodeansicht anzuzeigen.

Vielleicht scheitere ich hier an meinen Kenntnissen, aber wenn ich hook_form() einsetze, dann bearbeite ich das "Editiere"-Formular. Alles was ich mit hook_form() definiere, wird NIE auf der Nodeansicht angezeigt. Dazu setzt man hook_nodeapi() ein. Oder?

quiptime schrieb

In diesem Falle muss ich das Selectfeld ja irgendwie definieren koennen. Dafuer habe ich 2 Drupal-Moeglichkeiten gefunden.

Welche? :-) Schreib mal, was du dann genau ins Handbuch schreiben möchtest.

quiptime schrieb

Kannst Du mit diesen Gedanken mitgehen.

Ja.
Ping mich mal im ICQ (160 045 597) an.

gruß Michael

  • Anmelden oder Registrieren um Kommentare zu schreiben

Zitat: Alles was ich mit

Eingetragen von quiptime (4972)
am 03.12.2007 - 10:46 Uhr
Zitat:

Alles was ich mit hook_form() definiere, wird NIE auf der Nodeansicht angezeigt. Dazu setzt man hook_nodeapi() ein. Oder?

Natuerlich haengt hook_nodeapi() zwischen hook_form() und der Nodeansicht. Ich hatte mich etwas knapp ausgedrueckt.

Bei den beiden weiteren Moeglichkeiten ist die eine (1.) hook_forms() und die andere (2.) ist, eine Funktion erstellen mit dem gleichen Namen wie das Foermelement.

Hier kurz die beiden Moeglichkeiten

2.

<?php
function foobar() {
 
$form['foobar'] = array(
 
'#type' => 'select',
 
'#id' => 'blabla',
  ...
  ...
  );
}
?>

Das Formelement kann ohne Weiteres mit drupal_get_form() verwendet werden.
Um dem Formelement Parameter koennen ueber den Funktionsaufruf keine Funktionsargumente uebergeben werden.

1.

<?php
function mymodule_forms() {
 
$forms['mymodule_foobar_form'] = array(
   
'callback' => 'mymodule_form_builder',
   
'callback arguments' => array('blubber'),
  );
 
$forms['mymodule_second_form'] = array(
   
'callback' => 'mymodule_form_builder',
   
'callback arguments' => array('bubble'),
  );
  return
$forms;
}
/* Kann mit Funktionsargumenten erweitert werden welche ueber
* function mymodule_forms() an function mymodule_form_builder()
* weitergereicht werden um dort dynamisch Aenderungen der Formelemente
* durchzufuehren
*/
function mymodule_first_page() {
  return
drupal_get_form('mymodule_foobar_form');
}
function
mymodule_other_page() {
  return
drupal_get_form('mymodule_barfoo_form');
}
function
mymodule_form_builder($param) {
 
$form = array()
 
// Formelemente erstellen

 
if ($param == 'blubber') {
   
// Formfelder hinzufuegen oder aendern ...
 
}

  if (
$param == 'bubble') {
   
//
 
}
 
// This is used the way $callback was in 4.7.x Forms API: it is used as the prefix for
  // _submit() and _validate() functions to process the form.
 
$form['#base'] = 'mymodule_form';

  return
$form;
}
?>

Die Formelemente kann man zur Ausgabe in hook_view() durch mymodule_first_page() usw. ansprechen. Um dabei Funktionsargumente uebergeben zu koennen muss der obige Code noch angepasst werden.

--------------------------------------

Ich muss erst mal mein ICQ reaktivieren. Irgendwo hab ich auch 'nen Account.

-------------
quiptime

Nur tote Fische schwimmen mit dem Strom.

XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Gut, dann werde ich mich am

Eingetragen von mhuebl (60)
am 04.12.2007 - 08:29 Uhr

Gut, dann werde ich mich am Wochenende mal hinsetzen und eine kleine Einführung in hook_nodeapi() aus Sicht der Formulargenerierung schreiben.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • 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
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
Weiter

Neue Kommentare

  • Inzwischen sind wir bei
    vor 1 Tag 7 Stunden
  • Migrieren von D7 auf D8/ D10/ D11
    vor 1 Tag 23 Stunden
  • melde mich mal wieder, da ich
    vor 7 Wochen 6 Tagen
  • Hey danke
    vor 7 Wochen 6 Tagen
  • Update: jetzt gibt's ein
    vor 8 Wochen 16 Stunden
  • Hallo, im Prinzip habe ich
    vor 8 Wochen 5 Tagen
  • Da scheint die Terminologie
    vor 8 Wochen 5 Tagen
  • Kannst doch auch alles direkt
    vor 9 Wochen 2 Tagen
  • In der entsprechenden View
    vor 9 Wochen 2 Tagen
  • Dazu müsstest Du vermutlich
    vor 9 Wochen 2 Tagen

Statistik

Beiträge im Forum: 250235
Registrierte User: 20462

Neue User:

  • marouane.blel
  • capilclinic
  • Quabzibboter

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