3

尝试使用此代码在自定义模板上呈现菜单模块

jimport( 'joomla.application.module.helper' );
$module = JModuleHelper::getModule( 'menu' );
$attribs = array('style' => 'mainnav');
$module->params = "menutype=" .$mainmenu ."\nshowAllChildren=1";
echo JModuleHelper::renderModule($module, $attribs);

该菜单仅在我发布了另一个菜单模块时才有效,因此我确信这只需要一行代码即可使其工作而无需发布菜单模块。

菜单存在,此菜单的模块不存在,我正在尝试使用此代码创建它。

请帮忙。

4

4 回答 4

5

代码工作正常,我只是做了一个小的更正:

jimport( 'joomla.application.module.helper' );
$module = JModuleHelper::getModule( 'mod_menu' );
$attribs = array('style' => 'mainnav');
$module->params = "menutype=" .$mainmenu ."\nshowAllChildren=1";
echo JModuleHelper::renderModule($module, $attribs);

在第二行,调用应该是“mod_menu”而不仅仅是“menu”,这使得代码可以完美运行:)

于 2012-07-13T03:04:33.140 回答
0

为什么不只使用包含模块?

<jdoc:include type="modules" name="mainnav" style="mainnav" />

这将允许您在该位置发布您不想发布的任何模块。

否则该getModule函数的工作方式如下:

JModuleHelper::getModule( 'position', 'title' );

根据 Joomla!API,因此您需要传递两个参数。

于 2012-07-12T15:10:08.753 回答
0

我使用此代码按 id 呈现其他模块

$mod_id = $params->get('mod_id');
if ($type == 'logout' && $mod_id != ''){
    $document   = &JFactory::getDocument();
    $renderer   = $document->loadRenderer('module');
    $db     =& JFactory::getDBO();

    if ($jVersion=='1.5') {
         $query = 'SELECT id, title, module, position, params'
        . ' FROM #__modules AS m'
        . ' WHERE id='.intval($mod_id);
    } else {
         $query = 'SELECT id, title, module, position, content, showtitle, params'
        . ' FROM #__modules AS m'
        . ' WHERE m.id = '.intval($mod_id);
    }
    $db->setQuery( $query );
    if ($mod = $db->loadObject()){
        $file                   = $mod->module;
        $custom                 = substr( $file, 0, 4 ) == 'mod_' ?  0 : 1;
        $modu->user     = $custom;
    // CHECK: custom module name is given by the title field, otherwise it's just 'om' ??
        $mod->name      = $custom ? $mod->title : substr( $file, 4 );
        $mod->style     = null;
        $mod->position  = strtolower($mod->position);
        echo $renderer->render($mod, array());
     }
}
于 2012-07-12T22:26:59.560 回答
0

使用这个,100%,在这个位置渲染模块。

<?php
$document   = &JFactory::getDocument();
$renderer   = $document->loadRenderer('modules');
$options    = array('style' => 'xhtml');
$position   = 'article-banners';
echo $renderer->render($position, $options, null);
?>

$position 指模块位置,可能不止一个... $style - none, rounded, xhtml...

于 2014-03-07T14:14:03.297 回答