Kann man Blöcke themen?
Blöcke kann man themen. Die Vorgehensweise möchte ich mit einem Beispiel beschreiben.
Block-Template einbinden
Ausgangspunkt ist die Datei "block.tpl.php". In dieser Datei wird zum gewünschten Block-Template für den gewünschten Block verzweigt. Um diese Verzweigung zu definieren und das passende Template zu erstellen muss der Block bereits existieren. Der Dateiname für das neue Block-Template ist frei wählbar und sollte sinnvoller Weise mit dem Namen des Blockes kongruieren. Die Block-Template-Datei befindet sich im gleichen Ordner wie die Datei "block.tpl.php".
Hier der Beispielcode einer "block.tpl.php" für 2 Blöcke mit den Namen "Archiv" und "Service" zum verzweigen auf die Block-Templates:
<?php
if ( $block->module == 'views' && $block->delta == 'Archive' ) {
include 'block-archive.tpl.php';
return;
}
if ( $block->module == 'menu' && $block->delta == '65' ) {
include 'block-service.tpl.php';
return;
}
?>
<div id="block-<?php print $block->module .'-'. $block->delta; ?>" class="clear-block block block-<?php print $block->module ?>">
/* normaler Blockcode */
<?php if ($block->subject): ?>
<h3><?php print $block->subject ?></h3>
<?php endif;?>
<div class="content"><?php print $block->content ?></div>
</div>
Es wird in diesem Beispiel auf die beiden Block-Templates "block-archive.tpl.php" und "block-service.tpl.php" verzweigt.
Die notwendigen Angaben für block->module und block->delta entnimmt man dem HTML-Quellcode einer Seite mit den angezeigten Blöcken.
Block-Template erstellen
Um ein Block-Template zu gestalten beginnt man am besten mit dem Code des normalen Blockes.
Normaler Blockcode:
<div id="block-<?php print $block->module .'-'. $block->delta; ?>" class="clear-block block block-<?php print $block->module ?>">
<?php if ($block->subject): ?>
<h3><?php print $block->subject ?></h3>
<?php endif;?>
<div class="content"><?php print $block->content ?></div>
</div>
Block-Template gestalten
Naja, hier kann man so ziehmlich alles tun was man möchte. PHP-Code wird entsprechend gekennzeichnet.
Hinweis:
Im Block-Template kann man nicht alle Drupal-Variablen ansprechen die in den Node-Templates oder im Page-Template verfügbar sind.
- Anmelden oder Registrieren um Kommentare zu schreiben
Das geht doch auch einfacher?
am 26.09.2007 - 08:17 Uhr
Bei Drupal 5 mache ich einfach eine block-service.tpl.php Datei in den Theme Ordner, Drupal benutzt die dann von selber für den Block mit dem Namen service.
Oder hab ich was falsch verstanden?
...Ausgangspunkt ist die
am 26.09.2007 - 08:30 Uhr
...Ausgangspunkt ist die Datei "block.tpl.php". ....
http://kochazubi.net
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Das Verhältnis anderen zu helfen muss höher sein, als von anderen Hilfe zu erfragen/erwarten.
Ja und?
am 26.09.2007 - 08:37 Uhr
Den Beitrag verstehe ich nicht.
Natürlich ist der Ausgang die block.tpl.php, aber die kann man auch einfach kopieren, in block-foobar.tpl.php umbenennen, alles darin veranstalten was man will und Drupal wird dann für den Block mit dem Namen foobar statt der block.tpl.php die block-foobar.tpl.php verwenden.
In dem Text da oben ist zusätzlich PHP Code um etwas hinzubekommen, was Drupal von sich aus macht.
Wenn du das sagst wird es
am 26.09.2007 - 08:46 Uhr
Wenn du das sagst wird es wohl stimmen, ich hab das noch nicht ausprobiert! Dann weiss ich nicht warum du frage stellst, wenn du es weisst!
http://kochazubi.net
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Das Verhältnis anderen zu helfen muss höher sein, als von anderen Hilfe zu erfragen/erwarten.
poilf hat echt. Es geht
am 26.09.2007 - 08:55 Uhr
poilf hat echt. Es geht natürlich viel einfacher (siehe auch: http://www.drupalcenter.de/handbuch/4291). Wir sollten den Beitrag aus den FAQ entfernen, könnte irreführend sein...
--
bv - drupalcenter.de
Oder den Inhalt ändern. Ich
am 26.09.2007 - 09:08 Uhr
Oder den Inhalt ändern. Ich wäre niemals drauf gekommen das Drupal von selber nach Dateien sucht und man so ganz spezifisch nodes, comments & blocks umgestalten kann, wenn ich das nicht zufällig auf drupal.org aufgeschnappt hätte. Leider weiß ich auch die URL nicht mehr :(
Zu diesem Thema steht
am 26.09.2007 - 09:12 Uhr
Zu diesem Thema steht eigentlich alle im Benutzerhandbuch: http://www.drupalcenter.de/handbuch/4217
Darum brauchen wir es eigentlich nicht nochmal in den FAQ.
--
bv - drupalcenter.de
Nun, das Namensschema für
am 13.10.2007 - 00:14 Uhr
Nun, das Namensschema für die block.tpl Datei ist mir aber auch nach Studium des Handbuchs nicht ganz klar.
Ich habe einen Block, der von einer View erzeugt wurde, er heißt aktuelles6.
Aber mit einer Datei block-views-aktuelles6.tpl.php bin ich nicht weitergekommen, Wie müssen denn nun die block-xy.tpl.php Dateien benannt werden?
Wie oft gibt es bei Drupal verschiedene Loesungen
am 01.11.2007 - 13:17 Uhr
Ich denke irritierend ist mein FAQ nicht.
Wie oft gibt es bei Drupal verschiedene Loesungen fuer eine Aufgabe. So grundlegend weicht mein FAQ nicht vom Handbuch ab: http://www.drupalcenter.de/handbuch/4291
Der Vorteil der von mir beschriebene Methode, eine Template-Datei fuer einen Block anzusprechen, ist die freie Wahl des Namens fuer die Block-Template-Datei. Ein weiterer Vorteil waere, das man mit der Abfrage zum includen weitere Bedingungen fuer die Verwendung eines Block-Template stellen kann - also beispielsweise das Block-Template nicht immer zwingend verwendet wird wenn es denn schon existiert.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
HTML-Code des Viewblockes
am 01.11.2007 - 13:31 Uhr
Aber mit einer Datei block-views-aktuelles6.tpl.php bin ich nicht weitergekommen, Wie müssen denn nun die block-xy.tpl.php Dateien benannt werden?
@florianr,
der HTML-Code Deines Viewblockes hat vermutlich diesen Inhalt:
Damit sollte der Name "block-views-aktuelles6.tpl.php" korrekt sein und Drupal dieses Template auch finden. Wenn nicht pruefe bitte die Ubereinstimmung vom Block-HTML-Code (wie beispielsweise voran genannt) mit dem Template-Dateinamen.
Sorry, eventuell sage ich Dir nichts Neues.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
Konkretes Beispiel: $block->module $block->delta
am 29.03.2008 - 02:39 Uhr
Hier ein konkrtetes Beispiel um das Verständnis von
$block->module
und$block->delta
zu verbessern.Ausgangspunkt des Beipieles ist dieses Szneario:
Die User sollen einen separaten Block mit der Bezeichnung "Mein Konto" bekommen (damit hat man bessere Kontrolle was der Block zeigt - im Vergleich zum standardmäßssigen Accountblock).
Es wird in der Administration ein neues Menü angelegt. Name des Menü heißt "Mein Konto".
Danach habe ich in der Block-Konfiguration einen Block "Mein Konto", den man nach Bedarf einer Sidebar zuordnet.
Damit dieser noch leere Block überhaupt erst mal angezeigt wird geht man wieder zur Menükonfiguration und erstellt dem Menü "Mein Konto" irgendeinen Menüpunkt.
Hat man dies erledigt sollte der aktivierte und einer Sidebar zugeordnete neue Block auch angezeigt werden.
Nun kann man im HTML-Quellcode der Seite (der neue Block wird angezeigt) nach dem Codebereich dieses Blockes sehen. Beispiel HTML-Code solch eines Blockes:
<div id="block-menu-271" class="clear-block block block-menu">
<h2>Mein Konto</h2>
<div class="content">
<ul class="menu">
<li class="leaf"><a href="/taxonomy/term/55">Hilfe</a></li>
</ul>
</div>
</div
Uns interessiert
id="block-menu-271"
.Und hier wird nun eine gewisse Sinnlosigkeit sichtbar wenn man nach "Schema F", also ohne in der "block.tpl.php" explizit mit
include
eine Template-Datei mit eigenem Namen einzubinden, ein Template für den neuen Block erstellt.Sinnlosigkeit?
Nach "Schema F" würde die Template-Datei für den neuen Block "block-menu-271.tpl.php" heißen. Und jetzt mal ehrlich. Wer weiß nach 14 Tagen bei einem Blick in das Theme-Verzeichnis wofür das Template "block-menu-271.tpl.php" zuständig ist.
Also erstelle ich ein Block-Template mit einem sinnvolleren Namen: "block-my-account.tpl.php" als Beispiel.
Jetzt wieder zurück zu
id="block-menu-271"
.Die Ziffer 271 ist bei jedem Block eine andere und kann nicht aus diesem Beipiel hier übernommen werden. Es geht nur um die Schematik.
Um in der "block.tpl.php" auf eine Template-Datei mit selbst gewähltem Namen umzuleiten wird die "block.tpl.php" so geändert:
<?php
if ( $block->module == 'menu' && $block->delta == '271' ) {
include 'block-my-account.tpl.php';
return;
}
?>
<div id="block-<?php print $block->module .'-'. $block->delta; ?>" class="clear-block block block-<?php print $block->module ?>">
<?php if ($block->subject): ?>
<h2><?php print $block->subject ?></h2>
<?php endif;?>
<div class="content"><?php print $block->content ?></div>
</div>
Im PHP Codebereich ist zu sehen wie
id="block-menu-271"
verwendet wird:$block->module == 'menu'
$block->delta == '271'
------------------------------------------------------------------------------------------------------------------
Noch ein Beispiel zur Verwendung von
$block->module
und$block->delta
.Bei einem mit Views erstellten Block mit dem Namen "Archive" hätte man diesen HTML-Code:
<div id="block-views-Archive" class="clear-block block block-views"
Uns interessiert:
id="block-views-Archive"
Der Code in der "block.tpl.php" waere:
$block->module == 'views'
$block->delta == 'Archive'
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
@quiptime: Das geht in die
am 14.07.2008 - 01:43 Uhr
@quiptime: Das geht in die Richtung, die ich verstehe und suche, also die Benamung selbsterstellter Blöcke mit IDs. Allerdings, verstehe ich nicht das mit der Menükonfiguration, zumal ich gerade den Fall habe, dass eben ein solches "id="block-menu-123", nach Update, bei mir auftaucht und mir die Primary Links doppelt.
Wenn ich eine Block einer Sidebar zuweise, dann erscheint er doch schon...?! Vielleicht kann man das hier dahingehend noch erweitern bzw. anpassen?
Views habe ich noch nicht durch...