如何在组件中显示 Joomla 模块?
Posted
技术标签:
【中文标题】如何在组件中显示 Joomla 模块?【英文标题】:How can I display Joomla modules within a component? 【发布时间】:2011-05-01 22:45:09 【问题描述】:我有一个包含多个游戏类别的组件,我想根据类别显示不同的横幅。我需要可自定义横幅(和链接),因此这不仅仅是显示categoryX.jpg
或其他内容的情况。
我在另一个问题上看到了这个Joomla help page,但它似乎只显示了一种模块类型,而不是一个特定的模块。我想使用各种 mod_custom
模块并显示适合该类别的模块(如果需要,我可以存储每个模块的 ID)。
有什么想法吗?
【问题讨论】:
【参考方案1】:你可以创建一个新模块吗?
如果每个类别都出现在查询字符串中 (catid=X),那么您可以对https://support.pillwax.com/open-source/doku.php?id=joomla:header_image 采取类似的方法。
或者,该链接实际上可能会为您完成。
【讨论】:
【参考方案2】:这可以分两步完成:
使用“Load module into article”插件允许自己使用插件调用访问模块,例如:
module [*mod_id*] // 其中 *mod_id* 是模块 ID
现在您可以调用插件将模块放置在任何地方,您现在需要转到您希望添加模块的组件的视图代码并添加此代码:
echo Jhtml::_('content.prepare', 'module [*mod_id*]');
请查看此链接 - http://www.alltogetherasawhole.org/group/developers/forum/topics/running-joomla-content-plugins - 关于第 2 点。我试图做同样的事情,但我发现它不起作用,原因是您可以在上面的页面链接上找到一条评论:
“我注意到某些插件实际上希望 option=com_content 让它们正确处理 onPrepareContent,因此您实际上可能希望通过调用 JRequet::setVar 并在触发后恢复正确的值来“欺骗”它们。”
【讨论】:
+1,在 2013 年也为我工作过;) Joomla 3 现在有这样的插件作为核心的一部分,所以echo JHTML::_('content.prepare', 'loadposition contact-banner');
对我来说非常有用。【参考方案3】:
Joomla 内置了此功能。您可以在内容项中使用 loadposition XX 命令。您可以指定未出现在模板中的自定义模块位置,以确保您在正确的文章中具有正确的模块。
http://docs.joomla.org/How_do_you_put_a_module_inside_an_article%3F
【讨论】:
【参考方案4】:如果您想在 PHP 代码中显示模块,请使用此代码,它对我有用:
<?php echo JHTML::_('content.prepare', 'loadposition position-2'); ?>
如果您想在 html 内容中显示模块,那么只需将此代码放在您要显示模块的位置。
loadposition position-2
它加载分配给位置 2 的所有模块。
【讨论】:
【参考方案5】:您也可以使用Joomla Module Renderer
$doc = JFactory::getDocument();
$renderer = $doc->loadRenderer('modules');
$position = 'custom_position_name';
$options = array('style' => 'raw');
echo $renderer->render($position, $options, null);
请注意,除了分配模块位置外,该模块还必须设置为“在所有页面上显示”。
【讨论】:
以上是关于如何在组件中显示 Joomla 模块?的主要内容,如果未能解决你的问题,请参考以下文章