even und odd für blöcke
Eingetragen von loomie (63)
am 09.10.2009 - 11:05 Uhr in
am 09.10.2009 - 11:05 Uhr in
in Drupal gibt es ja überall diese wunderbaren Klassen bei Views und Fields und Tabellen und so weiter:
<div class="views-row-1 views-row-odd views-row-first">
<div class="views-row-2 views-row-even">
<div class="views-row-3 views-row-odd">
<div class="views-row-4 views-row-even">
<div class="views-row-5 views-row-odd">
<div class="views-row-6 views-row-even">
<div class="views-row-7 views-row-odd">
super praktisch für CSS und so weiter, wenn man nur jedes zweite objekt selektieren möchte.
ich brauche das ganze aber für blöcke:
<div id="region-right">
<div id="block-sharethis-sharethis" class="block block-sharethis ODD">
<div id="block-tagadelic-1" class="block block-tagadelic EVEN">
<div id="block-menu-menu-category" class="block block-menu ODD">
</div>
weis jemand wie man das schön elegant einbauen kann?
- Anmelden oder Registrieren um Kommentare zu schreiben
Schreibe ein Template, das theme_blocks überschreibt.
am 09.10.2009 - 11:45 Uhr
Schreibe ein Template, das
theme_blocks
überschreibt.--
ja, gut aber wie kann ich
am 09.10.2009 - 12:07 Uhr
ja, gut aber wie kann ich denn theme('block', $block) irgendwelche Klassen übergeben?
geht das überhaupt?
am 09.10.2009 - 13:11 Uhr
geht das überhaupt?
block.tpl.php
am 09.10.2009 - 13:46 Uhr
Nur mal so zur Info: die block.tpl.php enthält bereits eine Variable, mit der man "even/odd" ausgeben kann:
$block_zebra: Outputs 'odd' and 'even' dependent on each block region.
$zebra: Same output as $block_zebra but independent of any block region.
hth,
Stefan
--
sei nett zu Deinem Themer
Wir brauchen Deine Stimme für die DrupalCon 2010 oder 2011 in Berlin!
loomie schrieb ja, gut aber
am 09.10.2009 - 14:03 Uhr
ja, gut aber wie kann ich denn theme('block', $block) irgendwelche Klassen übergeben?
Brauchst du nicht. Du machst einfach div-Suppe:
<div class="<?php print (++$counter%2) ? 'odd' : 'even'; ?>">
<?php print theme('block', $block) ?>
</div>
Nur mal so zur Info: die block.tpl.php enthält bereits eine Variable, mit der man "even/odd" ausgeben kann:
Wenn man keine Template Suggestions für die einzelnen Blöcke verwendet, dann ist das auch eine Möglichkeit.
--
ah, vielen dank. zum erstem
am 09.10.2009 - 15:06 Uhr
ah, vielen dank.
zum erstem mal konnte mir in diesem forum geholfen werden :)
traxer schrieb Wenn man
am 09.10.2009 - 16:40 Uhr
Wenn man keine Template Suggestions für die einzelnen Blöcke verwendet, dann ist das auch eine Möglichkeit.
Auch bei der Verwendung von spezielleren Block-Templates (was Du vermutlich mit Template Suggestions meintest) sind oben genannten Variablen verfügbar.
Somit ist der zusätzliche PHP-Code schlichtweg überflüssig/unnötig.
zum erstem mal konnte mir in diesem forum geholfen werden :)
Hm, solche Aussagen finde ich immer ziemlich befremdlich. Besonders, da Dir hier schon häufiger geholfen wurde.
Stefan
--
sei nett zu Deinem Themer
Wir brauchen Deine Stimme für die DrupalCon 2010 oder 2011 in Berlin!
stBorchert schrieb traxer
am 10.10.2009 - 21:37 Uhr
Wenn man keine Template Suggestions für die einzelnen Blöcke verwendet, dann ist das auch eine Möglichkeit.
Auch bei der Verwendung von spezielleren Block-Templates (was Du vermutlich mit Template Suggestions meintest) sind oben genannten Variablen verfügbar.
Somit ist der zusätzliche PHP-Code schlichtweg überflüssig/unnötig.
Ich habe die Funktionalität, die du angesprochen hast, einfach nicht an dieser Stelle erwartet. Weil sie IMHO nicht dort hingehört. Für mich als Quelltextfreak ist es nicht Aufgabe des Blocks, zu bestimmen ob er gerade oder ungerade ist. Das sollte außerhalb der Möglichkeiten des einzelnen Blocks liegen.
Aber stimmt schon: wenn die Funktionalität da ist, dann braucht man sehr gute Gründe, sie nicht zu verwenden.
--
even/odd
am 10.10.2009 - 23:45 Uhr
Und zwar wird das in diesem Fall von der Funktion template_preprocess_block getan; der Block (bzw. das entsprechende Template) stellt die Variable nur zur Ausgabe zur Verfügung.
hth,
Stefan
--
sei nett zu Deinem Themer
Wir brauchen Deine Stimme für die DrupalCon 2010 oder 2011 in Berlin!
traxer schrieb ... ist es
am 11.10.2009 - 09:41 Uhr
... ist es nicht Aufgabe des Blocks, zu bestimmen ob er gerade oder ungerade ist.
Wow, das habe ich aber sowas von blöd formuliert, das darauf natürlich die Antwort
Macht er auch gar nicht :-).
kommen muss. Was ich eigentlich meinte war daß es in der Hand des Block-Templates liegt, diese Information zu nutzen, nicht zu nutzen, oder sogar zu verfälschen. Wenn man ein einziges Block-Template verwendet, dann ist das kein Problem. Wenn man aber viele Block-Templates verwendet, dann muss man (wenn man seine Entscheidung über die Verwendung von odd, even, etc. ändert) alle Block-Templates ändern. Das ist unhandlich und fehleranfällig.
--
gibts auch ne möglichkeit
am 12.10.2009 - 12:58 Uhr
gibts auch ne möglichkeit "first" und "last" als klasse ein zu fügen?
eigentlich brauche ich nur "only_child"
Re: gibts auch ne möglichkeit
am 12.10.2009 - 13:04 Uhr
<div class="
<?php print (($counter == 0) ? 'first' : ' '); ?>
<?php print (($counter + 1 == count($list)) ? 'last' : ' '); ?>
<?php print ((count($list) == 1) ? 'only_child' : ' '); ?>
<?php print (++$counter%2) ? 'odd' : 'even'; ?>"
>
<?php print theme('block', $block) ?>
</div>
--
preprocess
am 12.10.2009 - 13:17 Uhr
Öhm, dann doch lieber in der template.php die Funktion template_preprocess_block überschreiben und dort die neuen Variablen (
$block_position
,$block_count
) dem Template zur Verfügung stellen.Ist irgendwie sauberer.
hth,
Stefan
--
sei nett zu Deinem Themer
Wir brauchen Deine Stimme für die DrupalCon 2010 oder 2011 in Berlin!
Re: preprocess
am 12.10.2009 - 13:48 Uhr
Öhm, dann doch lieber in der template.php die Funktion template_preprocess_block überschreiben ...
Ich meine ich habe schon einige Argumente genannt, warum ich meine Herangehensweise für sauberer halte. Hier kommt noch eines:
template_preprocess_block
geht von der Annahme aus, das die Blöcke in der Reihenfolge ausgegeben werden, in der sie die Funktiontemplate_preprocess_block
durchlaufen. Ich verlasse mich nicht gerne auf solche Annahmen.--
preprocess
am 12.10.2009 - 14:04 Uhr
Ich meine ich habe schon einige Argumente genannt, warum ich meine Herangehensweise für sauberer halte.
Die Argumente sind jedoch nicht schlagkräftig.
Ja, Du kannst im Block-Template die Variablen ändern. Jedoch nur für den Block, den das gerade betrifft. Nicht für alle anderen Blöcke.
Und nein, die Variante über theme_block ist definitiv nicht sauberer.
Hier kommt noch eines:
template_preprocess_block
geht von der Annahme aus, das die Blöcke in der Reihenfolge ausgegeben werden, in der sie die Funktiontemplate_preprocess_block
durchlaufen.template_preprocess_block
kennt überhaupt keine Reihenfolge. Die Funktion wird beim Rendern jedes Blocks für jeden Block einzeln aufgerufen. Somit ist es für die Funktion vollkommen unerheblich, wo bzw. in welcher "Reihenfolge" der Block aufgerufen wird....Ich verlasse mich nicht gerne auf solche Annahmen.
Du vertraust also nicht dem sehr wohl funktionierenden Code sondern bastelst Dir eigenen womöglich fehlerhafte Lösungen? Ok.
hth,
Stefan
--
sei nett zu Deinem Themer
Wir brauchen Deine Stimme für die DrupalCon 2010 oder 2011 in Berlin!
Re: preprocess
am 12.10.2009 - 21:54 Uhr
Die Argumente sind jedoch nicht schlagkräftig.
Aber das muss man mir doch auch sagen, sonst rede ich mir hier den Mund fusselig.
Du kannst im Block-Template die Variablen ändern. Jedoch nur für den Block, den das gerade betrifft.
Das ist ja genau das schlimme daran.
Und nein, die Variante über theme_block ist definitiv nicht sauberer.
Genau meine Meinung; auch wenn
theme_block
in Drupal 6 rausgeflogen ist und du wahrscheinlich das Drupal-6-Äquivalentblock.tpl.php
gemeint hast.template_preprocess_block
kennt überhaupt keine Reihenfolge.Tut aber so als ob es die Reihenfolge kennen würde; dazu ist die erste Zeile
<?php
static $block_counter = array();
?>
...Ich verlasse mich nicht gerne auf solche Annahmen.
Du vertraust also nicht dem sehr wohl funktionierenden Code sondern bastelst Dir eigenen womöglich fehlerhafte Lösungen?
Ich vertraue dem Code, sonst wäre ich schon längst weg von Drupal. Aufgrund der unzureichenden Dokumentation ist es allerdings oft schwer, zu entscheiden ob ein bestimmtes Verhalten so gewollt ist, oder nur zuällig (aufgrund der aktuellen Implementierung) zu Stande gekommen ist. Ich bin da eher defensiv und schiebe es auf eine Eigenheit der derzeit aktuellen Implementierung.
--
Ich habe nur den Post vor
am 12.10.2009 - 23:05 Uhr
Ich habe nur den Post vor meinem hier gelesen. Es stimmt. Bei naeherer Betrachtung ist bei D6 die Implementierung der Blockfunktionalitaet an einigen Stellen etwas eigenwillig.
------------------------
Quiptime Group