使用一些PHP渲染Joomla 2.5菜单模块

时间:2012-07-12 15:07:25

标签: joomla menu module render

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

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 个答案:

答案 0 :(得分: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”,这使代码工作得很完美:)

答案 1 :(得分:0)

为什么不只使用include模块?

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

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

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

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

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

答案 2 :(得分: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());
     }
}

答案 3 :(得分: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 ...