Wer barrierefrei sein Web gestalten will, der möchte manchmal die Möglichkeit der tastensteuerung im Menü haben.
Das geht bei Piemnu nur mit etwas Hilfe von aussen, wenn es sauber laufen soll.
Smarty liefert ein Plugin counter mit , das habe ich etwas verändert und es alphacounter genannt:
Code: Select all
<?php
/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*/
/**
* Smarty {counter} function plugin
*
* Type: function<br>
* Name: counter<br>
* Purpose: print out a counter value
* @link http://smarty.php.net/manual/en/language.function.counter.php {counter}
* (Smarty online manual)
* @param array parameters
* @param Smarty
* @return string|null
*/
function smarty_function_alphacounter($params, &$smarty)
{
static $counters = array();
$name = (isset($params['name'])) ? $params['name'] : 'default';
if (!isset($counters[$name])) {
$counters[$name] = array(
'start'=>1,
'skip'=>1,
'direction'=>'up',
'count'=>1
);
}
$counter =& $counters[$name];
if (isset($params['start'])) {
$counter['start'] = $counter['count'] = $params['start'];
}
if (!empty($params['assign'])) {
$counter['assign'] = $params['assign'];
}
if (isset($counter['assign'])) {
$smarty->assign($counter['assign'], $counter['count']);
}
if (isset($params['print'])) {
$print = (bool)$params['print'];
} else {
$print = empty($counter['assign']);
}
if ($print) {
$retval = $counter['count'];
} else {
$retval = null;
}
if (isset($params['skip'])) {
$counter['skip'] = $params['skip'];
}
if (isset($params['direction'])) {
$counter['direction'] = $params['direction'];
}
if ($counter['direction'] == "down")
$counter['count'] -= $counter['skip'];
else
$counter['count'] += $counter['skip'];
$out=chr($retval);
return $out;
}
/* vim: set expandtab: */
?>
Dieses Plugin MUSS in lib/smarty/plugins gelegt werden und nicht in den Ordner plugins der CMS, weil es sich hier um eine Funktionserweiterung von Smarty handelt.
Der Aufruf selbst ist dem Original gleich, aber die Wirkung ist anders
Und so sieht ein einfaches Menü mit Tastensuerung als Pimenu Template aus:
Code: Select all
{alphacounter start=64 print=false}
{foreach from=$rawmenu item=entry}
{if $entry->type <>'separator' and $entry->url<>'' and $entry->show_in_menu eq 1}
<a href="{$entry->url}" accesskey="{alphacounter}"{if $entry->iscurrent eq 1}class="currentpage"{/if}> {alphacounter direction="down" print=0}{alphacounter direction="up"} - {$entry->menutext}</a><br />
{elseif $entry->type =='separator'}
<hr class="separator" />
{/if}
{/foreach}
Der erste Aufruf ist die Initialisierung und zwar mit dem Zahlenwert 64 das entspricht dem Zeichen @
Der nächste Wert ist der Buchstabe A usw.
Da der alphacounter bei jedem AUfruf einen höher zählt muss er, wenn der korrekte Buchstabe vor dem Menütext zu sehen sein soll einmal runter gezählt und die Ausgabe unterdrückt werden:
{alphacounter direction="down" print=0}
Danach erfolgt die Anweisung wieder normal hochzuzählen mit {alphacounter direction="up"}
Als Ergebnis erhält man den gleichen Buchstaben wie beim ersten Aufruf.
Nun kann ein Menüeintrag mit Alt und dem Buchstaben direkt gewählt werden, beim IE ist es Alt Buchstabe enter.
[attachment deleted by admin]