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

Themable Functions

Eingetragen von md (3609)
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 (2)
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 (1281)
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

--
sanduhrs · Stefan Auditor · Drupalcenter
http://erdfisch.de · http://audiens.de · http://drupal.org/user/28074 · http://association.drupal.org/user/646

  • Anmelden oder Registrieren um Kommentare zu schreiben

Das nenne ich Support!

Eingetragen von thefox (2)
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 (4)
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 (3609)
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

vg
md - DrupalCenter.de

mdwp* - Das Drupal Magazin

  • Anmelden oder Registrieren um Kommentare zu schreiben

Für ohne Shell

Eingetragen von fuerst@drupal.org (4)
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 (3609)
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

vg
md - DrupalCenter.de

mdwp* - Das Drupal Magazin

  • Anmelden oder Registrieren um Kommentare zu schreiben
Drupal 7 Demo-Website

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Node-Speichern wird mit zunehmender Laufzeit des Servers langsam
  • Fatal error: Maximum execution time of 30 seconds exceeded in ....../includes/file.inc on line 934
  • Probleme bei der Installation von memcache
  • Treffen in Düsseldorf - 8.9. und 22.9.2010
  • [erledigt] id und klassen bei blöcken
  • Anzahl der erstellten Nodes eines bestimmten Contenttypes für bestimmte Rollen limitieren
  • Seiten kombinieren
  • Drupal Übersetzung Englisch Deutsch
  • Fragen vor Umstieg zu Drupal 6 von Joomla
  • Lightbox-2 Inputfilter
  • Kostenplfichtige Useraccounts
  • Such-Index: Problem mit ISBNs / großen Zahlen
Weiter

Neue Kommentare

  • Zum einen würde ich den
    vor 4 Stunden 2 Minuten
  • Das Aktivieren von Modulen
    vor 4 Stunden 9 Minuten
  • Lies dich mal in Ruhe ein,
    vor 4 Stunden 13 Minuten
  • Hallo, das heißt, dass Dein
    vor 4 Stunden 20 Minuten
  • danke für den tip!
    vor 4 Stunden 48 Minuten
  • Nur ein Tip, aber ich würde
    vor 5 Stunden 14 Minuten
  • Ich habe noch das Problem,
    vor 5 Stunden 10 Minuten
  • E-Fee schrieb ...Entweder man
    vor 5 Stunden 33 Minuten
  • Tja, was heiß quasi Standard?
    vor 5 Stunden 47 Minuten
  • Hallo E-Fee, nach dem was Du
    vor 6 Stunden 5 Minuten

Statistik

Beiträge im Forum: 130977
Registrierte User: 11264

Neue User:

  • BAue
  • CodeFlatter
  • michastock

» Alle User anzeigen

User nach Punkten sortiert:
quiptime4714
stBorchert4318
md3609
Tobias Bähr3607
bv3490
Alexander Langer2737
dereine2604
pebosi2490
Thoor2223
rapsli1505
» User nach Punkten
Zur Zeit sind 2 User und 25 Gäste online.

Benutzer online

  • Tobias Bähr
  • t0b1

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Showroom
  • » Forum
  • » Drupalchannel
  • » Ü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
  • Bücherecke

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
  • Drupal Demo
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association