我正在覆盖Joomla 1.5中的mod_mainmenu模块,无法获取要在页面上显示的.active
或#current
CSS类或ID。它显示菜单的以下HTML:
<ul id="top-nav" class="flatList">
<li access="0" level="1" id="1">
<a href="#">
<span class="embed embed-top-nav">Home</span>
<p>news, highlights</p>
</a>
</li>
<li access="0" level="1" id="4">
<a href="/content/index.php?option=com_content&view=article&id=1&Itemid=4">
<span class="embed embed-top-nav">Watch UNC-TV</span>
<p>schedule, programs</p>
</a>
</li>
</ul>
我已经读过mod_mainmenu会自动在此处插入active
或current
,这样您就可以知道哪个项目是当前活动的菜单选择。但我没有看到生成的HTML中的任何一个。我想将一些CSS应用于活动元素,但似乎没有任何方法可以做到这一点。有什么想法吗?
感谢。
更新:这是我创建的mod_mainmenu的代码:
<?php
// no direct access
defined('_JEXEC') or die('Restricted access');
if ( ! defined('fancyMenuPatch') )
{
function fancyMenuPatch($result,$tag){
$menu = JSite::getMenu();
$active = $menu->getActive();
// Add to the start of the UL tag.
$begin_ul = "<ul id=\"top-nav\" class=\"flatList\">";
$begin_span = "<span class=\"embed embed-top-nav\">";
$home_p = "Home</span><p>news, highlights</p></a>";
$watch_p = "Watch UNC-TV</span><p>schedule, programs</p></a>";
$learn_p = "Learn</span><p>education, unc-tv kids</p></a>";
$support_p = "Support Us</span><p>pledge, volunteer, corporate</p></a>";
$contact_p = "Contact</span><p>feedback, connect, share</p></a>";
// do the replacements
$result = str_replace("<ul class=\"menu\">",$begin_ul, $result);
$result = str_replace("<span>", $begin_span, $result);
$result = str_replace("Home</span></a>",$home_p,$result);
$result = str_replace("Watch UNC-TV</span></a>",$watch_p,$result);
$result = str_replace("Learn</span></a>",$learn_p,$result);
$result = str_replace("Support Us</span></a>",$support_p,$result);
$result = str_replace("Contact</span></a>",$contact_p,$result);
return $result;
}
define('fancyMenuPatch', true);
}
if ( ! defined('modMainMenuXMLCallbackDefined') )
{
function modMainMenuXMLCallback(&$node, $args)
{
$user = &JFactory::getUser();
$menu = &JSite::getMenu();
$active = $menu->getActive();
$path = isset($active) ? array_reverse($active->tree) : null;
if (($args['end']) && ($node->attributes('level') >= $args['end']))
{
$children = $node->children();
foreach ($node->children() as $child)
{
if ($child->name() == 'ul') {
$node->removeChild($child);
}
}
}
if ($node->name() == 'ul') {
foreach ($node->children() as $child)
{
if ($child->attributes('access') > $user->get('aid', 0)) {
$node->removeChild($child);
}
}
}
if (($node->name() == 'li') && isset($node->ul)) {
$node->addAttribute('class', 'parent');
}
if (isset($path) && (in_array($node->attributes('id'), $path) || in_array($node->attributes('rel'), $path)))
{
if ($node->attributes('class')) {
$node->addAttribute('class', $node->attributes('class').' active');
} else {
$node->addAttribute('class', 'active');
}
}
else
{
if (isset($args['children']) && !$args['children'])
{
$children = $node->children();
foreach ($node->children() as $child)
{
if ($child->name() == 'ul') {
$node->removeChild($child);
}
}
}
}
if (($node->name() == 'li') && ($id = $node->attributes('id'))) {
if ($node->attributes('class')) {
$node->addAttribute('class', $node->attributes('class').' item'.$id);
} else {
$node->addAttribute('class', 'item'.$id);
}
}
if (isset($path) && $node->attributes('id') == $path[0]) {
$node->addAttribute('id', 'current');
} else {
$node->removeAttribute('id');
}
$node->removeAttribute('rel');
$node->removeAttribute('level');
$node->removeAttribute('access');
}
define('modMainMenuXMLCallbackDefined', true);
}
ob_start();
modMainMenuHelper::render($params, 'modMyMainMenuXMLCallback');
$menu_html = ob_get_contents();
ob_end_clean();
if($params->get('menutype')=="mainmenu"){
$tag = $params->get('tag_id');
}
//output the menu!
echo fancyMenuPatch($menu_html,$tag);
?>
答案 0 :(得分:3)
试试这个,这里是mod_mainmenu(覆盖)的代码:
<?php
// no direct access
defined('_JEXEC') or die('Restricted access');
if ( ! defined('fancyMenuPatch') )
{
function fancyMenuPatch($result,$tag){
$menu = JSite::getMenu();
$active = $menu->getActive();
// Add to the start of the UL tag.
$begin_ul = "<ul id=\"top-nav\" class=\"flatList\">";
$begin_span = "<span class=\"embed embed-top-nav\">";
$home_p = "Home</span><p>news, highlights</p></a>";
$watch_p = "Watch UNC-TV</span><p>schedule, programs</p></a>";
$learn_p = "Learn</span><p>education, unc-tv kids</p></a>";
$support_p = "Support Us</span><p>pledge, volunteer, corporate</p></a>";
$contact_p = "Contact</span><p>feedback, connect, share</p></a>";
// do the replacements
$result = str_replace("<ul class=\"menu\">",$begin_ul, $result);
$result = str_replace("<span>", $begin_span, $result);
$result = str_replace("Home</span></a>",$home_p,$result);
$result = str_replace("Watch UNC-TV</span></a>",$watch_p,$result);
$result = str_replace("Learn</span></a>",$learn_p,$result);
$result = str_replace("Support Us</span></a>",$support_p,$result);
$result = str_replace("Contact</span></a>",$contact_p,$result);
return $result;
}
define('fancyMenuPatch', true);
}
if ( ! defined('modMyMainMenuXMLCallbackDefined') )
{
function modMyMainMenuXMLCallback(&$node, $args)
{
$user = &JFactory::getUser();
$menu = &JSite::getMenu();
$active = $menu->getActive();
$path = isset($active) ? array_reverse($active->tree) : null; if (($args['end']) && ($node->attributes('level') >= $args['end']))
{
$children = $node->children();
foreach ($node->children() as $child)
{
if ($child->name() == 'ul') {
$node->removeChild($child);
}
}
}
if ($node->name() == 'ul') {
foreach ($node->children() as $child)
{
if ($child->attributes('access') > $user->get('aid', 0)) {
$node->removeChild($child);
}
}
}
if (($node->name() == 'li') && isset($node->ul)) {
$node->addAttribute('class', 'parent');
}
if (isset($path) && in_array($node->attributes('id'), $path))
{
if ($node->attributes('class')) {
$node->addAttribute('class', $node->attributes('class').' active');
} else {
$node->addAttribute('class', 'active');
}
}
else
{
if (isset($args['children']) && !$args['children'])
{
$children = $node->children();
foreach ($node->children() as $child)
{
if ($child->name() == 'ul') {
$node->removeChild($child);
}
}
}
}
if (($node->name() == 'li') && ($id = $node->attributes('id'))) {
if ($node->attributes('class')) {
$node->addAttribute('class', $node->attributes('class').' item'.$id);
} else {
$node->addAttribute('class', 'item'.$id);
}
}
if (isset($path) && $node->attributes('id') == $path[0]) {
$node->addAttribute('id', 'current');
} else {
$node->removeAttribute('id');
}
$node->removeAttribute('level');
$node->removeAttribute('access');
}
define('modMyMainMenuXMLCallbackDefined', true);
}
ob_start();
modMainMenuHelper::render($params, 'modMyMainMenuXMLCallback');
$menu_html = ob_get_contents();
ob_end_clean();
if($params->get('menutype')=="mainmenu"){
$tag = $params->get('tag_id');
}
//output the menu!
echo fancyMenuPatch($menu_html,$tag);
?>
答案 1 :(得分:1)
检查你的模板文件夹,有一个template.css文件,你可以在那里找到!