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

Themable Functions

Eingetragen von md (3717)
am 25.09.2006 - 00: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 - 21: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 - 21: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 - 22: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 - 01: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 - 01: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 - 23: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 - 19: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

  • Mysql Ver 8.0.41 zu MariaDB 10.11.11
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Doppelte Einträge verhindern
  • [abgeschlosen] PHP Composer von Plesk + .bashrc nicht vorhanden
  • Drupal 7 Focal Point – Bild auf Desktop vollständig anzeigen, nur in Responsive zuschneiden
  • ECA validiere Felder mit unlimitierter Eingabe
  • Zugriff auf Webform beschränken/gewähren
  • Drupal 10.4.5 und Bootstrap 3.x.
  • Probleme mit Drupal 10 - HTTP Statuscode 403 (gelöst)
  • View mit mehreren Ansichten, übersteuert nicht
  • [gelöst] Wiederherstellen mit backup&migrate
  • [gelöst] ID eines Webformulars ermitteln?
Weiter

Neue Kommentare

  • V-Server ..
    vor 6 Tagen 17 Stunden
  • ... generelle
    vor 6 Tagen 17 Stunden
  • oder..
    vor 2 Wochen 18 Stunden
  • Also ich will dich ja nicht
    vor 2 Wochen 1 Tag
  • nochmal MariaDB vs Mysql
    vor 2 Wochen 1 Tag
  • Vielen Dank - feedback zu den Videos
    vor 3 Wochen 5 Tagen
  • Falls dieses Thema noch mal
    vor 4 Wochen 1 Tag
  • Prima, dann schreib bitte
    vor 4 Wochen 2 Tagen
  • Ah perfekt. Es hat an der
    vor 4 Wochen 2 Tagen
  • Davon gibt es sogar zwei
    vor 4 Wochen 2 Tagen

Statistik

Beiträge im Forum: 249987
Registrierte User: 20269

Neue User:

  • CharlestydaY
  • Darrenwem
  • DavidSeero

» Alle User anzeigen

User nach Punkten sortiert:
wla9454
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3855
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 4 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