如何在组件中显示 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 模块?的主要内容,如果未能解决你的问题,请参考以下文章

如何在自定义模块(Joomla 1.7)中使用自定义组件中的函数?

如何在 joomla 2.5 的组件中加载模块

如何在 joomla 3.1 中将表单从模块传递到组件

如何将 Joomla 组件调用到模块中?

如何在joomla组件中仅获取和显示选中的项目

需要Joomla指南