Alapvető és állandó probléma nagyobb forgalmú oldalakon, hogy a sok hozzászólás között igen nehéz a különböző szálakba érkezett új hozzászólások követése. A Drupal alapértelmezés szerint az általunk még nem olvasott hozzászólásokat (és tartalmakat) ?új? jelzéssel látja el. Ezt javítottam föl azzal, hogy arra kattintva a következő új hozzászólásra ugorjon.
A megoldás két egyszerű lépésből áll PHPTemplate sminkmotor használata esetén. Az első a template.php
kiegészítése. Ez a fájl az adott smink gyökerében helyezhető el, például /sites/all/themes/azensminkem/template.php
. Feladata a gyárilag használható .tpl.php
fájloknál kevésbé általános finomhangolások végrehajtása, esetünkben a comment.tpl.php
-nak küldött változók felülírása. Ez a _phptemplate_variables($hook, $vars)
függvénnyel történhet a következő módon:
function _phptemplate_variables($hook, $vars) { switch ($hook) { case 'comment': static $numnew; $numnew=$numnew?$numnew:0; if ($vars['new']) { $vars['numnew'] = ++$numnew; } break; } return $vars; }
Mivel ez a függvény meghívódik minden sablon kiértékelésekor, a hozzászólások megjelenítése előtt meg tudjuk vizsgálni, hogy éppen egy új hozzászólást dolgozunk-e fel. Ha új hozzászólásról van szó, akkor a függvényhívások között megjegyzett értékű (static
) $numnew
változóban számoljuk, hogy hányadik új hozzászólást találtuk. Az aktuális hozzászólásra vonatkozó $numnew
változót megkapja a sablonunk.
A második lépés a hozzászólásoknál a megjelenés testreszabása, a link elhelyezése. Ez a comment.tpl.php
, hozzászólások megjelenését szabályozó fájllal oldható meg. Ha nem létezik, létre kell hozni. Drupal 5 használata esetén az alapértelmezése a következő.
<div class="comment<?php print ($comment->new) ? ' comment-new' : ''; print ($comment->status == COMMENT_NOT_PUBLISHED) ? ' comment-unpublished' : ''; ?> clear-block"> <?php print $picture ?> <!-- módosítandó rész eleje --> <?php if ($comment->new) : ?> <a id="new"></a> <span class="new"><?php print $new ?></span> <?php endif; ?> <!-- vége --> <h3><?php print $title ?></h3> <div class="submitted"> <?php print $submitted ?> </div> <div class="content"> <?php print $content ?> </div> <?php print $links ?> </div>
A megjegyzésekkel jelölt részt kell módosítani a következőre.
if ($comment->new) { if ($numnew == 1) { print '<a id="new"></a>'; } print '<span class="new"><a name="new' . $numnew . '" '. 'title="következő olvasatlan hozzászólás" href="#new' . ($numnew+1) . '">' . $new . '</a></span>'; }
Ezzel ha új hozzászólást látunk, és az első új hozzászólásról van szó, akkor a new
horgornyt rakjuk le. Különben egy new5
típusú horgonyt, ahol 5 az új hozzászólások közötti sorszám. A következő új hozzászólásra linkeljük a feliratot.