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

Themable Functions

Eingetragen von md (3717)
am 24.09.2006 - 23:40 Uhr in
  • Tipps & Tricks

Wenn man themeable functions überschreiben möchte, stellt sich natürlich die Frage, welche überhaupt zur Verfügung stehen. Es gibt welche aus dem Drupal-Core Code und welche aus den bereitgestellten (contributed) Modulen. Die aus dem Drupal-Core sind hier http://api.drupal.org/api/4.7/group/themeable zu finden.
Hier ist allerdings die Frage wie aktuell die API-Dokumentation ist. Und, was ist mit den themeable functions der Module, die in einer Drupal Installation aktiviert sind? Im Code der Module suchen?

Nein.
Mit dem folgenden PHP-Snippet lassen sich alle themeable functions einer Drupal Installation ermitteln.

Die Namen der Funktionen geben Aufschluss darüber, zu welchem Modul diese gehören. Verbesserungen dieses Snippets wären eine bessere Sortierung und ein Filtern der nicht zum Core-Code gehörenden Funktionen.

Bei diesen könnte man dann zusätzlich auf die API verweisen (bspw. so):

<a href='http://api.drupal.org/api/HEAD/function/$function' target='_blank'>$function</a>

Und hier der Code für alle themeable functions einer Drupal Installation:

<?php
  $functions
= get_defined_functions();
  foreach(
$functions['user'] as $function) {
   if(
substr($function,0,6)== 'theme_')
    echo
$function . '<br/>';
  }
 
?>
‹ Eigenes Theme - Umstieg auf 5.0 - Störende borders i18n-Patch für Drupal 5.0 beta 1 ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Vielen Dank

Eingetragen von thefox (nicht überprüft) (0)
am 27.09.2006 - 20:18 Uhr

Könntest du auch ein Beispiel einfügen, wie ich eine solche Funktion überschrieben kann ?
Währe dir dankbar! Beschäftige mich seit 9 Tagen mit Drupal, daher noch etwas Neuling ;-)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Themeable functions überschreiben

Eingetragen von sanduhrs (1285)
am 27.09.2006 - 20:56 Uhr

In der template.php des Themes - wenn nicht vorhanden einfach anlegen - die Funktion neu definieren und nach belieben anpassen.

Variante 1:
Die Funktion theme_box sieht beispielsweise so aus:

function theme_box($title, $content, $region = 'main') {
  $output = '<h2 class="title">'. $title .'</h2><div>'. $content .'</div>';
  return $output;
}

In der template.php könnte sie dann so aussehen:

function phptemplate_box($title, $content, $region = 'main') {
  $output = '<h3 class="subtitle">'. $title .'</h3><div>'. $content .'</div>';
  return $output;
}

Beachte bitte die Umbenennung von theme_box in phptemplate_box.

Variante 2: (empfohlen)
In der template.php - wenn nicht vorhanden einfach anlegen - die Funktion einfangen und eine neue Template Datei dafür anlegen:

function mythemename_box($title, $content, $region = 'main') {
  return _phptemplate_callback('box', array('title' => $title, 'content' => $content, 'region ' => $region));
}

Im Themeverzeichnis die Datei box.tpl.php anlegen und beliebig anpassen:

<h3 class="subtitle"><?php print $title ?></h3>
<div><?php print $content ?></div>

Beachte, dass mythemename_ mit dem Namen des benutzten Themes und das erste Argument der Funktion _phptemplate_callback() mit dem Dateinamen übereinstimmt, in diesem Fall box mit box.tpl.php

vg

--
sanduhrs - drupalcenter
-----------------------
http://erdfisch.de

  • Anmelden oder Registrieren um Kommentare zu schreiben

Das nenne ich Support!

Eingetragen von thefox (nicht überprüft) (0)
am 27.09.2006 - 21:18 Uhr

Drupal überzeugt mich immer mehr!
Auch hier vielen Dank für die Simple und verständliche Darstellungsweise.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Auf der Kommandozeile

Eingetragen von fuerst@drupal.org (nicht überprüft) (0)
am 02.12.2006 - 00:08 Uhr

Für den schnellen Überblick auf der Kommandozeile (Shell) ist dieser Einzeiler geeignet:

grep -rsH function\ theme_ *|awk -F '(:function | {)' '{ print $2"\t"$1 }' | sort

Es werden alle themeable functions der Dateien des aktuellen Verzeichnisses und seiner Unterverzeichnisse angezeigt. Ruft man ihn z.B. im Verzeichnis eines Moduls auf, werden nur die themeable functions dieses Moduls ausgegeben.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Toll

Eingetragen von md (3717)
am 02.12.2006 - 00:33 Uhr

Da ja nicht alle eine Shell haben, wäre es doch toll, das über ein Modul oder PHP-Snippet zugänglich zu machen.
Für alle themeable functions geht das ja (s.o. oder hier: http://drupal.mdwp.de/system_info/themeable_functions).
Für die Themeable Functions eines speziellen Moduls hab ich da noch keine Lösung gefunden.

md - drupalcenter
--
http://drupal.mdwp.de

  • Anmelden oder Registrieren um Kommentare zu schreiben

Für ohne Shell

Eingetragen von fuerst@drupal.org (nicht überprüft) (0)
am 02.12.2006 - 22:07 Uhr

Der obige Einzeiler war auch explizit für Shell-Benutzer gedacht. Er gibt übrigens auch den Pfad der Datei aus, in dem die Funktion deklariert wurde. Hat man keinen Shell-Zugang, läßt sich das ganze als PHP-Snippet verpackt in eine Drupal-Page schreiben. Die Variante von md ist allerdings wesentlich schneller, da sie nicht in Dateien suchen muß.

Ausgegeben werden im Erfolgsfall Funktion und dazu die Datei, in der sie deklariert ist. Die Ausgabe erfolgt als Description List, die sich mit etwas CSS sicher schön formatieren läßt. In der Variable $path kann das zu durchsuchende Verzeichnis angegeben werden. Es werden auch dessen Unterverzeichnisse durchsucht. Da das Ermitteln der Funktionen von der Existenz der UNIX-Befehle grep, awk und sort abhängt, läuft es möglicherweise nicht auf jedem Server.

<?php
$path
= dirname($_SERVER['SCRIPT_FILENAME']);
print
'Themeable Functions im Verzeichnis <em>' .htmlentities($path). '</em> ermitteln...<br />';

$cmd = 'grep -rsH function\ theme_ ' . $path . '|awk -F \'(:function | {)\' \'{ print $2"\t"$1 }\' | sort';

if(
exec($cmd, $functionList)) {
    if (
is_array($functionList)) {
        print
'<dl>';
        foreach (
$functionList as $zeile) {
           
$function = explode("\t", $zeile);
            print
'<dt>' . $function[0] . '</dt><dd>' . $function[1] . '</dd>';
        }
        print
'</dl>';
    }
    else {
        print
'Keine themeable function im Verzeichnis <em>' . htmlentities($path) . '</em> und dessen Unterverzeichnissen gefunden.';
    }
}
else {
    print
'Fehler beim Ausfuehren der Programmzeile<br /><code>&#039; . htmlentities($cmd) . &#039;</code>.';
}
?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Drupal Funktionen

Eingetragen von md (3717)
am 03.12.2006 - 18:40 Uhr

Falls die UNIX-Befehle nicht zur Verfügung stehen:
Ich hab mein neulich geschriebenes Modul - Anzeige aller Drupal Funktionen - ein wenig erweitert. Es werden jetzt auch schön übersichtlich die Funktionen aller aktivierten Module in Gruppen zusammengefasst und angezeigt.
Fall sich schon jemand ein Lesezeichen angelegt hat, so ist das leider nicht mehr gültig, da ich die URL-Pfade geändert habe. (system_info wurde zu drupal_info)

http://drupal.mdwp.de/drupal_info

md - drupalcenter
--
http://drupal.mdwp.de

  • 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 1 Tag 8 Stunden
  • Hey danke
    vor 2 Tagen 3 Stunden
  • Update: jetzt gibt's ein
    vor 2 Tagen 21 Stunden
  • Hallo, im Prinzip habe ich
    vor 1 Woche 7 Stunden
  • Da scheint die Terminologie
    vor 1 Woche 10 Stunden
  • Kannst doch auch alles direkt
    vor 1 Woche 4 Tagen
  • In der entsprechenden View
    vor 1 Woche 4 Tagen
  • Dazu müsstest Du vermutlich
    vor 1 Woche 4 Tagen
  • gelöst
    vor 4 Wochen 1 Tag
  • Ja natürlich. Dass ist etwas,
    vor 4 Wochen 2 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 15 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