Contacteer ons op +32 2 306 02 11 of mail ons op info@desk02.be
Contacteer ons op +32 2 306 02 11 of mail ons op info@desk02.be
Soms wil je een region verschillend opmaken afhankelijk van het aantal blokken dat er aan die region toegewezen zijn of je wil weten welk blok het laatste blok is. Voor dergelijke zaken is het handig om een variabele beschikbaar te hebben, in de block template, met het aantal blocks in de region en de numerieke positie van het huidige block.
Niet al deze informatie is standaard beschikbaar. Welke positionele informatie is er dan wel beschikbaar?
In theme.inc:
function template_preprocess(&$variables, $hook) { ... $variables['id'] = $count[$hook]++; ... } function template_preprocess_block(&$variables) { ... $variables['block_id'] = $block_counter[$variables['block']->region]++; ... }
De eerste preprocess functie initialiseert een id over alle regions. De block_id variabele zal de positie in een region bevatten. Met block_id kan je een class aan het eerste block van een region toevoegen door in het class gedeelte van de block div in block.tpl.php te zetten:
if ($block_id == 1) print 'first';
Om het laatste block te kunnen detecteren of om te kunnen ageren op het aantal blokken, hebben we het aantal blokken in een region nodig. Dit is een nummer dat standaard niet beschikbaar is en dat we dus ergens moeten ophalen. Wanneer de pagina geladen wordt, zal Drupal $blocks = theme('blocks', $region); oproepen voor elk van de regions. Indien de functie niet overschreven is, zal de voorgaande code theme_blocks($region) oproepen dat op zijn beurt block_list($region) oproept. Deze laatste functie cacht zijn resultaat en wordt reeds opgeroepen bij het genereren van de blokken. Wij kunnen deze dus zonder probleem terug oproepen in de preprocess functie van onze theme om het aantal blokken in de region op te vragen.
function mytheme_preprocess_block(&$variables) { $variables['block_count'] = count(block_list($variables['block']->region)); }
In je block.tpl.php kan je nu bvb. een class 'block-count-' . $block_count toevoegen. En in je css kan je verschillende stijlen definiëren voor de verschillende mogelijkheden.
Reacties
Denalisian
40 weken geleden ...
It was great information for me. Thanks for help.
Nieuwe reactie inzenden