web-dev-qa-db-fra.com

Impossible d'accéder à la méthode de chargement jmodulehelper dans le fichier d'assistance du module

J'utilise com_ajax dans joomla 2.5 - https://github.com/Joomla-Ajax-Interface/component

Comme j'ai plusieurs instances (modules dupliqués) du même module d'où j'appelle le composant com_ajax par jQuery ajax. Il en va de même des appels com_ajax dans le fichier helper.php de mon module pour obtenir les données d'un appel ajax, comme nous le savons. Le problème est que je veux accéder aux paramètres d’une autre instance de module dans le fichier helper.php, ce qui n’est pas possible avec l’appel par défaut $module = JModuleHelper::getModule('mod_name_here');, j’essayais donc de réaliser cette méthode en passant le module id à helper Fichier .php de l'appel ajax jQuery du module -

jimport('joomla.application.module.helper');
$input  = JFactory::getApplication()->input;
$mod_id = $input->get('module_id'); //module_id passed by ajax call             
$module = null; 
$modules = JModuleHelper::_load(); 
$total = count($modules); $name="mod_name_here";

for ($i = 0; $i < $total; $i++)
{
    // Match the name of the module
    if (($modules[$i]->name == $name || $modules[$i]->module == $name)&&($modules[$i]->id==$mod_id))
    {
        $module = $modules[$i];
        break; // Found it          
    }
}               
$params1 = new JRegistry();
$params1->loadString($module->params);

donc dans $params1 Je reçois les paramètres de mon instance de module souhaitée.Mais le débogueur se bloque sur la ligne $modules = JModuleHelper::_load(); ne sais pas pourquoi mais quand je mets ces mêmes codes dans un fichier php principal du module pour essais, les choses fonctionnent. Alors pourquoi ne va-t-il pas plus loin après cette ligne? Des alternatives?

3
dev-m

Je ne suis pas sûr de comprendre votre problème, car vous n’avez présenté aucun message d’erreur ou quelque chose du genre. Le débogueur devrait également vous emmener à l'intérieur de JModuleHelper::load(). Mon hypothèse est que vous ne fournissez pas le ItemId utilisé par cette fonction, mais c'est une supposition.

Sachez que JModuleHelper :: getModule () a deux paramètres:

  • $ name
  • $ title

Vous devriez pouvoir affiner votre recherche en fournissant également le titre (en quelque sorte).

J'espère que cela t'aides.

1
Valentin Despa

Il n'est pas nécessaire d'utiliser JModuleHelper pour récupérer les paramètres de module dans la classe d'assistance.

Chaque instance de module est correctement créée et une variable de contexte $ params est affectée à l’utilisation des paramètres. Par exemple, mod_example a $ params initialisé, vous pouvez simplement appeler votre classe d'assistance en envoyant la totalité des $ params, ou des variables spécifiques.

Par exemple, mod_men fonctionne de cette façon, en envoyant le paramètre de présentation à la classe d'assistance modMenuHelper:

// no direct access
defined('_JEXEC') or die;

// Include the syndicate functions only once
require_once dirname(__FILE__).'/helper.php';

$list   = modMenuHelper::getList($params);
$app    = JFactory::getApplication();
$menu   = $app->getMenu();
$active = $menu->getActive();
$active_id = isset($active) ? $active->id : $menu->getDefault()->id;
$path   = isset($active) ? $active->tree : array();
$showAll    = $params->get('showAllChildren');
$class_sfx  = htmlspecialchars($params->get('class_sfx'));

if(count($list)) {
    require JModuleHelper::getLayoutPath('mod_menu', $params->get('layout', 'default'));
}
1
Anibal