Answers:
为此,我在与组件相同的位置创建了一个模块位置,然后检查该位置是否存在模块,然后显示该模块,否则选择该组件:
代码示例:
<main id="content" role="main" class="main">
<?php
if ($this->countModules('myposition'))
{ ?>
<jdoc:include type="modules" name="myposition" style="xhtml" />
<?php }
else
{ ?>
<jdoc:include type="component" />
<?php } ?>
</main>
然后,当我想在页面中显示模块而不是组件时,我创建了将模块分配给该菜单项的模块,然后完成。
为了方便起见,我建议将此模块位置命名为“内容模块”,“主模块”或“ compomodule”。任何可以提醒任何放置在此处的模块的信息都将替换组件输出。
为了增强此处给出的答案:
要在组件视图中包含模块位置并在其中加载模块,只需添加
echo JHtml::_('content.prepare', '{loadposition yourmodulposition}');
到视图文件。
带有加载位置short标签的第二个字符串可以替换为包含更多html的var(如果需要)。您不必为每个新的模块化位置写该行:
$outputModules = '<strong>Some Html</strong>'
.'{loadposition yourmodulposition1}'
.'{loadposition yourmodulposition2}';
echo JHtml::_('content.prepare', $outputModules);
(我知道这不是作者问题的直接答案。)
这是一个简单有效的解决方案。我试过了jdoc:include,但是没有用。
$ document = JFactory :: getDocument(); $ renderer = $ document-> loadRenderer('modules'); $ position ='custompositionname'; $ options = array('style'=>'raw'); echo $ renderer-> render($ position,$ options,null);复制代码
首先,根据您的问题,您已经在创建20个模块和20个菜单项,因此实际上您唯一要做的一件事情就是为每个模块创建一个单行内容项。如果那真的很麻烦,那就继续@FFrewin的想法。有点hacky,但是可以用。
就个人而言,我会选择内容项。实际上,当我构建带有弹出对话框的系统时,我也希望在不启用js的情况下进行工作。我将对话框内容放在custom_html模块中,装配了要显示的模块,并在单击链接时将其定位。然后,我还将链接指向一个内容项,包括您所描述的模块。如果启用了js,则不会遵循该链接,并且会显示对话框。如果禁用了js,则会跟随该链接,并且对话框的内容显示为content。内容在一个地方,所以我没有维护内容的两个单独副本。
尝试这个
jimport('joomla.application.module.helper');
// this is where you want to load your module position
$modules = JModuleHelper::getModules('header');
foreach($modules as $module)
{
echo JModuleHelper::renderModule($module);
}
参考:https : //stackoverflow.com/questions/12225538/how-we-include-a-joomla-module-in-a-component-view-in-joomla