Startseite
  • » Home
  • » Handbuch & FAQ
  • » Showroom
  • » Forum
  • » Drupalchannel
  • » Übersetzungsserver
  • » Suche
Startseite › FAQ ›

Kann man Blöcke themen?

Eingetragen von quiptime (4713) am 05.09.2007 - 22:02 Uhr in
  • Themes

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?

Eingetragen von poilf (16)
am 26.09.2007 - 07: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?

  • Anmelden oder Registrieren um Kommentare zu schreiben

...Ausgangspunkt ist die

Eingetragen von Tobias Bähr (3874)
am 26.09.2007 - 07: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.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ja und?

Eingetragen von poilf (16)
am 26.09.2007 - 07: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.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wenn du das sagst wird es

Eingetragen von Tobias Bähr (3874)
am 26.09.2007 - 07: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.

  • Anmelden oder Registrieren um Kommentare zu schreiben

poilf hat echt. Es geht

Eingetragen von bv (3700)
am 26.09.2007 - 07: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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Oder den Inhalt ändern. Ich

Eingetragen von poilf (16)
am 26.09.2007 - 08: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 :(

  • Anmelden oder Registrieren um Kommentare zu schreiben

Zu diesem Thema steht

Eingetragen von bv (3700)
am 26.09.2007 - 08: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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Nun, das Namensschema für

Eingetragen von florianr (122)
am 12.10.2007 - 23: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?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wie oft gibt es bei Drupal verschiedene Loesungen

Eingetragen von quiptime (4713)
am 01.11.2007 - 12: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.

XING

Quiptime Group

  • Anmelden oder Registrieren um Kommentare zu schreiben

HTML-Code des Viewblockes

Eingetragen von quiptime (4713)
am 01.11.2007 - 12:31 Uhr
florianr schrieb

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.

XING

Quiptime Group

  • Anmelden oder Registrieren um Kommentare zu schreiben

Konkretes Beispiel: $block->module $block->delta

Eingetragen von quiptime (4713)
am 29.03.2008 - 01: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.

XING

Quiptime Group

  • Anmelden oder Registrieren um Kommentare zu schreiben

@quiptime: Das geht in die

Eingetragen von ab2211 (229)
am 14.07.2008 - 00: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...

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • 1052 Column 'status' in where clause is ambiguous
  • [CEBIT] Die CeBIT-Quadratur des Drupal-Kreises?
  • Probleme bei Import mit Feeds
  • Danland: Standard-Startseite formatieren
  • Probleme mit dem Modul "Menu Block"
  • Taxonomie Titel und Beschreibung anzeigen
  • Modul für Absatznummern / Randnummern
  • Pfade zu Drupal-Core-Module korrigieren
  • Heartbeat und Facebook Style Status
  • Views Slideshow - mehrere Nodes gleichzeitig anzeigen
  • [gelöst] Nach Update auf Wysiwyg 6.x-2.4 und TinyMCE 3.4.7 funktioniert Wysiwyg-Editor nicht mehr
  • Formular für einen Kalender mit Freischaltung
Weiter

Neue Kommentare

  • Ja, das ist leider so. Die
    vor 11 Minuten 15 Sekunden
  • Patrick Schanen schrieb ....
    vor 14 Minuten 14 Sekunden
  • Bei Drupal 7 gibt es nur
    vor 18 Minuten 27 Sekunden
  • Hier wird offensichtlich
    vor 33 Minuten 58 Sekunden
  • Hallo Werner, ich habe das
    vor 37 Minuten 48 Sekunden
  • Views muß immer etwas zum
    vor 50 Minuten 57 Sekunden
  • ist
    vor 1 Stunde 12 Minuten
  • Firebug benutzen
    vor 1 Stunde 41 Minuten
  • Caches in Datenbank löschen ...
    vor 1 Stunde 42 Minuten
  • Hallo, und Danke für deine
    vor 1 Stunde 45 Minuten

Statistik

Beiträge im Forum: 160314
Registrierte User: 14286

Neue User:

  • schmittrich
  • mah1987
  • Nadine.S

» Alle User anzeigen

User nach Punkten sortiert:
stBorchert5214
quiptime4713
Tobias Bähr3825
md3727
bv3680
Thoor3282
Alexander Langer3155
wla2795
dereine2630
pebosi2495
» User nach Punkten
Zur Zeit sind 0 User und 4 Gäste online.

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 Drupal Podcast
  • 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