Je construis un simple module Joomla Sidebar et je souhaite afficher des icônes Fontawesome dans chaque élément de menu à l’aide du lien CSS Style.
Quel param est responsable de cela? Comment puis-je obtenir ce paramètre de Joomla et afficher des icônes dans mon élément de menu comme ceci:
<?php $getfontawesomeiconhere = htmlspecialchars($params->get('class_sfx')); ?>
<a class='$getfontawesomeiconhere' href='#_'>$tlink[0]</a>
Voici comment mon menu est construit:
// Render the menu item.
echo '<li' . $class . '>';
$tlink = array();
switch ($item->type):
case 'separator':
case 'url':
case 'component':
case 'heading':
$tlink = modTriggerMenuHelper::getUrlLink($item);
break;
default:
$tlink = modTriggerMenuHelper::getUrlLink($item);
break;
endswitch;
if (($item->type) == 'heading')
{
echo "<a href='#_'>$tlink[0]</a>";
}
else
if (($item->type) == 'separator')
{
echo "<a href='#_'>$tlink[0]</a>";
}
else
if (count($tlink) == 3)
{
echo "<a href='$tlink[1]'>$tlink[0]</a>";
}
if ($item->deeper)
{
echo '<ul>';
}
elseif ($item->shallower)
{
// The next item is shallower.
echo '</li>';
echo str_repeat('</ul></li></li>', $item->level_diff);
}
else
{
// The next item is on the same level.
echo '</li></li>';
}
En supposant que vous modifiiez le modèle default.php du mod_menu, puis pour accéder au paramètre "Link CSS Style", tout ce dont vous avez besoin est $item->anchor_css
.
Mais la réponse ci-dessus ne serait valable que pour le mod_menu et uniquement dans le contexte de:
$list = ModMenuHelper::getList($params);
foreach ($list as $i => &$item)
{
$class = $item->anchor_css;
}
Jakub Skowroński :: Je construis un module de menu séparé. J'ai essayé votre méthode mais je n'arrive pas à avoir le cours.
FFrewin :: Bien sûr, vous ne pouvez pas obtenir le cours si vous êtes dans un module et que vous n'avez pas créé ce cours.
FFrewin :: Le module que vous créez, que fera-t-il, qui sera différent du mod_menu?
Jakub Skowroński :: Fonctions et styles différents. Est-ce vraiment si difficile d'obtenir ce paramètre dans un autre module ?
FFrewin :: Ce n'est pas difficile du tout. Mais les variables php ont leur signification lorsqu'elles sont utilisées dans un contexte spécifique. Dans votre code, vous utilisez un $item
qui semble être un objet de la façon dont vous l'utilisez. Cependant, quel objet est-ce, il est impossible de savoir à partir du code que vous avez présenté. Par conséquent, nous ne pouvons pas savoir quelles propriétés ou méthodes cet objet peut avoir.
J'ai demandé ce que votre module ferait différemment du mod_men, parce que le code semble être similaire au mod_menu, et je ne suis pas sûr qu'il soit vraiment nécessaire de créer un nouveau module ou simplement de créer un nouveau module. remplacement du modèle pour le mod_menu, où vous pouvez facilement utiliser le tableau $list
de $item
objets (générés par les ModMenuHelper::getList()
, pour accéder à chacun des $item
propriétés de l'objet.
Quoi qu'il en soit, vous pouvez étudier la méthode ModMenuHelper::getList($params)
, pour voir comment elle renvoie le tableau $list
rempli avec le menu. les éléments et leurs propriétés en tant qu'objets d'un menu spécifique passé en tant qu'argument et préalablement sélectionné dans le backend du module. Ensuite, vous pouvez le modifier en fonction de vos besoins dans votre fichier helper.php.
Ci-dessous, un extrait, similaire à celui contenu dans le fichier d'aide mod_men. Pour savoir comment accéder à la propriété d'ancrage css des éléments de menu, cet exemple d'extrait peut vous aider:
$app = JFactory::getApplication();
$menu = $app->getMenu();
$items = $menu->getItems('menutype', 'mainmenu');
if ($items)
{
foreach ($items as $i => $item)
{
$item->anchor_css = htmlspecialchars($item->params->get('menu-anchor_css', ''), ENT_COMPAT, 'UTF-8', false);
//Above we are assigning the anchor_css protected property, to another object property 'anchor_css' for easy access.
}
}
echo "<pre>" . print_r($items, true)."</pre>";
//or
echo $items[0]->anchor_css;
Documentation: API JMENU SITE
Vous devez ajouter une classe dans votre article Menu comme "fa" <- Son ok; Maintenant, vous devez créer une classe CSS:
.fa:before {
content: "\f054"; /* Your content icon http://astronautweb.co/snippet/font-awesome/ */
font-family: FontAwesome;
float: left;
padding-left: 0px 10px;
}
Vous pouvez créer une classe pour chaque élément de menu.
.fa2:before {
content: "\f080"; /* Your content icon http://astronautweb.co/snippet/font-awesome/ */
font-family: FontAwesome;
float: left;
padding-left: 0px 10px;
}
.fa3:before {
content: "\f150"; /* Your content icon http://astronautweb.co/snippet/font-awesome/ */
font-family: FontAwesome;
float: left;
padding-left: 0px 10px;
}