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

Welche Funktionen kann man überschreiben?

Eingetragen von DrupalFan (1646)
am 05.11.2007 - 15:13 Uhr in
  • Modul-Entwicklung
  • Drupal 5.x

Immer wieder gibt es kleine Änderungen, die man machen will.

Die beste Lösung ist oft, Hook-Funktionen zu überschreiben.

Dazu habe ich aber eine Verständnisfrage:
WANN und welche Funktionen kann man alles überschreiben?
Alle? Welche? Welche nicht?

Manchmal geht es doch in "template.php" und manchmal in einem eigenen Modul (z. B. "sitehelper.module"), aber manchmal will man eine Funktion überschreiben und es geht nicht.

Wie geht man also an die Sache ran?
Woher weiß ich, welche Funktion ich überschreiben kann, um eine Änderung einzubauen und wie mache ich das dann (im eigenen Modul, in template.php, etc)????

Vielen Dank.

‹ Module verknüpfen/anpassen hook_form() und Nichtform-Seitenelemente ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Funktionen die mit theme_

Eingetragen von pebosi (2645)
am 05.11.2007 - 15:38 Uhr

Funktionen die mit theme_ beginnen kannst du meinst in der template.php Datei mit phptemplate_ oder themename_ überschreiben. Überschreiben einer Modulfunktion sollte meist nicht nötig sein. Ändern von Formularen geht ja z.B. mit form_alter().

gruß pebosi

  • Anmelden oder Registrieren um Kommentare zu schreiben

Gibt es keine Regel?

Eingetragen von DrupalFan (1646)
am 05.11.2007 - 21:34 Uhr

Man kann sämtliche Views-Funktionen überschreiben. Warum diese und andere nicht? Muss das Modul das erlauben, und woran erkennt man das, ob es nun möglich ist oder nicht?

Mit form_alter() kann man leider nicht alles machen, habe schon einige Sachen versucht, die ich dann anders lösen musste, weil es einfach nicht ging, definitv nicht..

hook_user() werden wohl auch sehr viele überschreiben, jedenfalls ergänzen. Das geht doch auch, warum dann nicht alle Funktionen? Welche? Welche nicht?

Bei "gmap_location_user_html()" habe ich lange gesucht, schließlich ging es keinesfalls über form_alter sondern eben über "phptemplate_gmap_location_user_html()". Aber woran erkennt man das nun, wie man es machen muss?

Vielen dank.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Keine Doku?

Eingetragen von DrupalFan (1646)
am 21.11.2007 - 15:53 Uhr

Vielleicht hat noch jemand eine Idee oder gibt es eine Doku?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hooks

Eingetragen von tumblingmug (872)
am 21.11.2007 - 17:20 Uhr
DrupalFan schrieb

Vielleicht hat noch jemand eine Idee oder gibt es eine Doku?

Ja, gibt es: http://api.drupal.org/api/group/hooks/5

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hook für weitere Module

Eingetragen von DrupalFan (1646)
am 21.11.2007 - 22:39 Uhr

Danke.

Was dort steht, wusste ich schon.
Die Hook-Funktionen dort sind für den Core oder mitgelieferte Module.

Mir geht es um selbst installierte Module.
Wann kann man bei weiteren Modulen mit der Hook-Methode erweitern und wann nicht?

Muss man da nur herumprobieren oder gibt es da eine Regel?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hooks werden implementiert, nicht überschrieben

Eingetragen von traxer (1009)
am 03.12.2007 - 23:24 Uhr

Zunächst: Hooks werden nicht überschrieben, sondern implementiert. Meistens werden alle Implementierungen eines Hooks nacheinander aufgerufen. Wenn dem nicht so ist, dann weil es einfach nicht angebracht ist.

Beispiel:
Es wird nur die Implementierung von hook_form aufgerufen, die von dem Modul bereitgestellt wird, das auch den Inhaltstyp (Knotentyp? Nodetype? Was ist hier die bevorzugte Terminologie?) bereitstellt. Andere Module können dieses Formular durch Implementierung von hook_form_alter modifizieren, alle Implementierung von hook_form_alter werden ausgeführt.

Bei Theme-Funktionen kann man eher davon reden, das etwas überschrieben wird, da pro Seitenaufruf nur ein einziges Theme aktiv ist.

DrupalFan schrieb

Die Hook-Funktionen dort sind für den Core oder mitgelieferte Module.

Sie werden vom Core und von mitgelieferten Modulen bereitgestellt; zur Implementierung in eigenen Modulen.

Beispiel:
Du möchtest wissen ob es sich bei der Überarbeitung einer Seite um eine sprachliche Änderungen, eine inhaltliche Anpassung oder eine komplette Überarbeitung handelt. Dazu schreibst du ein Modul foo, das
  1. hook_form_alter implementiert (foo_form_alter), so das die notwendigen Formulare um ein entsprechendes Eingabefeld erweitert werden,
  2. hook_nodeapi implementiert (foo_nodeapi), so das Einträge in das bereitgestellte Eingabefeld zu entsprechenden Zeitpunkten validiert, gespeichert, geladen, angezeigt werden.
DrupalFan schrieb

Mir geht es um selbst installierte Module.
Wann kann man bei weiteren Modulen mit der Hook-Methode erweitern und wann nicht?

Grundsätzlich kann man immer mit der Hook-Methode erweitern.

Beispiel:
Organic Groups erlaubt es, Inhalte nur einer bestimmten Gruppe zugänglich zu machen. Dazu fügt Organic Groups in der Funktion og_form_alter (eine Implementierung von hook_form_alter) dem Formular ein Feld hinzu, in dem Gruppen ausgewählt werden können. Wenn du diese Funktionalität nicht haben willst, dann kannst du ein Modul nog schreiben, das in der Funktion nog_form_alter (deiner eigenen Implementierung von hook_form_alter) dieses Feld wieder entfernt. Du musst nur sicherstellen, das dein Modul schwerer ist als Organic Groups, damit deine Implenmentierung nach der von Organic Groups ausgeführt wird.

Einige selbst installierte Module bieten auch selbst Hooks an.

Beispiel:
Das Workflow-Modul bietet hook_workflow an. Implementierungen von hook_workflow können Zustandsübergänge verhindern und nach Zustandsübergängen Aktionen auslösen. Man kann also das Verhalten des Workflow-Moduls auf bestimmte Art und Weise beeinflussen.

Zu den am häufigsten verwendeten Module existiert Dokumentation direkt auf drupal.org, z.B. das Content Construction Kit Handbook oder Views Documentation. Dort ist dann auch erwähnt, welche Hooks das entsprechende Modul anbietet. Ansonsten hilft ein Blick in den Quelltext des Moduls.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke

Eingetragen von DrupalFan (1646)
am 10.12.2007 - 12:22 Uhr

Danke für die ausführliche Info.

Aber das scheint einfach zu kompliziert zu sein.
Ich schau natürlich in den Quelltext und sehe dann dort eine Funktion, die zwar was macht, aber nicht ganz das, was ich will.

Die Frage ist dann immer, wie kann ich diese Funktion nun ändern oder erweitern, ohne den Quelltext des Moduls selbst zu verändern. Manchmal geht es mit hook_form_alter, aber nur selten und was ist in all den anderen Fällen? Warum lassen sich manche Funktionen mit neu implementieren hook()s erweitern und manche nicht? Die Frage bleibt also, denn klar ist das noch lange nicht ...

Vielen Dank.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hooks

Eingetragen von traxer (1009)
am 10.12.2007 - 13:24 Uhr
DrupalFan schrieb

Die Frage bleibt also, denn klar ist das noch lange nicht ...

Hooks werden aufgerufen durch module_invoke oder module_invoke_all. Wenn du also siehst, das eine Funktion eine dieser Funktionen aufruft, dann weißt du, das du sie mit einem Hook beeinflussen kannst.

Manchmal werden Hooks auch durch call_user_func_array aufgerufen; dann ist das aber im Quelltext dokumentiert.

--
XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

module_invoke

Eingetragen von DrupalFan (1646)
am 10.12.2007 - 13:50 Uhr

module_invoke heißt doch, dass ein anderes Modul aufgerufen wird.

Ich verstehe das nicht ganz:
Nur weil eine Funktion ein anderes Moduls aufruft, ist diese Funktion über hook() beeinflußbar??? Wo ist der logische Zusammenhang?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Stimmt

Eingetragen von traxer (1009)
am 10.12.2007 - 13:58 Uhr
DrupalFan schrieb

module_invoke heißt doch, dass ein anderes Modul aufgerufen wird.

Es wird ein Hook in einem anderen Modul aufgerufen. Die Implementierung dieses Hooks in dem entsprechenden Modul beinflusst, wie sich Drupal verhällt. Aber du hast schon recht, meistens wird module_invoke_all verwendet.

--
XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Drupal setzt einige Konzepte

Eingetragen von Alexander Langer (3416)
am 10.12.2007 - 14:06 Uhr

Drupal setzt einige Konzepte der Objektorientierung um, ohne dabei neuere OO-Features von PHP zu nutzen. Über die Hooks ist es so möglich vorhandene Funktionalitäten zu erweitern / überschreiben, so wie es aber auch weiterhin möglich ist Methoden davor zu bewahren (Sichtbarkeit). Für welche Funktionen nun was zutrifft liegt ist der Entscheidung des Modul-Entwicklers überlassen. Es entspricht in der OOP privaten und öffentlichen Methoden (zumindest in den OO-Sprachen, die dieses Konzept umsetzen, da fällt Smalltalk also raus), wobei öffentliche Methoden diejenigen sind, die das Arbeiten mit dem Objekt (Modul) überhaupt erst ermöglichen und private Methoden sind diejenigen, die lediglich für interne Zwecke benötigt werden und wo ein öffentlicher Zugang sogar schädlich sein kann, weil zu tief in die Eingewweide eingegriffen werden kann.

Du hast vermutlich auch kein Problem damit jemandem zu sagen, was du beruflich machst, wirst aber nicht jedem der fragt auch freimütig deine Verdienstbescheinigung unter die Nase reiben...

--
"Wer grundlegende Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu gewinnen, verdient weder Freiheit noch Sicherheit." -Benjamin Franklin

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ja, objektorientierte

Eingetragen von DrupalFan (1646)
am 10.12.2007 - 14:20 Uhr

Ja, objektorientierte Programmierung und Sichtbarkeit und öffentliche und private Funktionen, das ist alles klar.

Aber wie erkennt man, wenn man den Quelltext eines Moduls ansieht, ob nun eine Funktion mittels hook() zusätzlichen Code implementieren erlaubt oder dies bei einer Funktion nicht möglich ist und wie weiß man, welche Methode man wann anwenden muss?

  • 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 3 Tagen 5 Stunden
  • Hey danke
    vor 4 Tagen 28 Minuten
  • Update: jetzt gibt's ein
    vor 4 Tagen 18 Stunden
  • Hallo, im Prinzip habe ich
    vor 1 Woche 2 Tagen
  • Da scheint die Terminologie
    vor 1 Woche 2 Tagen
  • 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 3 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 4 Wochen 4 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 17 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