显示相同信息的两个不同的 joomla 模块

Posted

技术标签:

【中文标题】显示相同信息的两个不同的 joomla 模块【英文标题】:two different joomla Modules that display the same information 【发布时间】:2018-08-09 21:02:09 【问题描述】:

我有一个显示 Joomla 表格信息的模块。该模块具有用于配置它的表单字段。这是问题所在: 当我使用适当的参数创建此模块的实例并将该模块显示在一个位置时,一切正常。 现在,我取消发布该模块。 我用其他参数创建了模块的第二个实例(不同的名称),并在第二个位置毫无问题地显示它。 现在,当我想在同一页面中的两个不同位置显示两个模块时,它们会显示第一个模块的数据。不考虑第二个的数据。

这是模块代码:

<?php
// Pas d'acces direct
defined('_JEXEC') or die;
// Inclure la fonction de recuperation des donnees
require_once dirname(__FILE__).'/helper.php';

// Recuperer les choix a partir du fichier XML
$module = JModuleHelper::getModule('mod_evenementdmmc');
$params =  new JRegistry($module->params);
$position = $params->get('position', 'g'); // Position du module
$special = $params->get('special', '50');  // Cas speciaux a traiter
$event = $params->get('choixEvent', '0');  // Choix de l'evenement a traiter

// Recuperer les donnees pour les evenements
$lstInfos = ModEvenementdmmcHelper::getInfos($event);

require JModuleHelper::getLayoutPath('mod_evenementdmmc');

助手代码:

<?php
/**
 * Classe Helper class pour le module Evenements du DMMC
 **/
class ModEvenementdmmcHelper

    /**
     * Recherche les donnees associees aux choix de l'utilisateur
     *
     * @params - Choix effectues
     *
     * @access public
     */    
    public static function getInfos($param)  
        // Acces a la BD et recuperation des donnees
        $db = JFactory::getDbo();
        $query = $db->getQuery(true);

        $query 
            ->select(array('t.*', $db->quoteName('c1.nomclub', 'nomclub1'), $db->quoteName('c2.nomclub', 'nomclub2')))
            ->from($db->quoteName('#__trntournois', 't'))
            ->join('INNER', $db->quoteName('#__trnclubs', 'c1').' ON ('.$db->quoteName('c1.idclub').' = '.$db->quoteName('t.club1').')')
            ->join('INNER', $db->quoteName('#__trnclubs', 'c2').' ON ('.$db->quoteName('c2.idclub').' = '.$db->quoteName('t.club2').')')
            ->where($db->quoteName('t.idtrn')." = ".$db->quote($param));
        $db->setQuery($query);

        $results = $db->loadObject();

        return $results;
    

【问题讨论】:

【参考方案1】:

在您的参数调用中,您从一个模块实例获取参数数据,因此您在两个模块中显示相同的数据。两个模块之间的区别在于您为模块所做的命名。所以你需要以这种方式使用模块的标题调用参数

jimport('joomla.application.module.helper');
$input  = JFactory::getApplication()->input;
$title  = $input->get('title', '', 'string');
$module = JModuleHelper::getModule('mod_evenementdmmc', $title);
$params = new JRegistry();
$params->loadString($module->params);

【讨论】:

它不起作用...我不检索模块的标题,当我 vardump($title) 时,它返回一个空字符串。如果我在 getModule 函数中硬编码模块的标题,它可以工作,但它不是解决方案......【参考方案2】:

看了几遍Joomla版本,我发现Joomla 3.8版本对模块参数的管理极其简化。该模块在创建时提供了两个有用的变量。 第一个是 $module,它返回模块的通用参数:

$module ( 
[id] => 153 
[title] => Event futur 
[module] => mod_evenementdmmc 
[position] => bottom-a 
[content] => .....
[showtitle] => 0 
[control] => .....
[params] => .....
...
)

第二个参数称为 $params,它返回用户在模块形式(XML 文件)中输入的值。这是我的例子:

$params (
[position] => 'd' 
[special] =>  '0'
[choixEvent] => '2'
...
)

因此,模块代码得到了简化。只需使用 $params 变量来检索此模块的请求结果。代码如下:

<?php
// Pas d'acces direct
defined('_JEXEC') or die;
// Inclure la fonction de recuperation des donnees
require_once dirname(__FILE__).'/helper.php';

// Recuperer les parametres choisis par l'utilisateur
$position = $params->get('position', 'g'); // Position du module
$special = $params->get('special', '50');  // Cas speciaux a traiter
$event = $params->get('choixEvent', '0');  // Choix de l'evenement a traiter

// Recuperer les donnees pour les evenements
$lstInfos = ModEvenementdmmcHelper::getInfos($event);

require JModuleHelper::getLayoutPath('mod_evenementdmmc');

感谢答案的建议,它引导我找到解决方案。

【讨论】:

以上是关于显示相同信息的两个不同的 joomla 模块的主要内容,如果未能解决你的问题,请参考以下文章

Joomla 2.5 在模块中显示联系人

对注册用户隐藏的 Joomla 模块

如何在组件中显示 Joomla 模块?

我可以在 Joomla 中向不同的用户显示不同的文章吗?

将对象从组件发送到模块 - Joomla

模板中的Joomla php echo元机器人标签?