ti-enxame.com

Não é possível acessar o método de carregamento jmodulehelper no arquivo auxiliar do módulo

Eu estou usando com_ajax no joomla 2.5 - https://github.com/Joomla-Ajax-Interface/component

Como tenho muitas instâncias (módulos duplicados) do mesmo módulo de onde chamo o componente com_ajax pelo jQuery ajax. O mesmo acontece com as chamadas com_ajax para o arquivo helper.php do meu módulo para obter dados para a chamada ajax como sabemos. O problema é que eu quero acessar parâmetros de outra instância do módulo no arquivo helper.php, que não é possível pela chamada padrão $module = JModuleHelper::getModule('mod_name_here');, então eu estava tentando conseguir isso passando o módulo id para o helper .php da chamada ajax do jQuery do módulo -

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);

então em $params1 estou obtendo as configurações da instância do módulo desejada. Mas o depurador trava na linha $modules = JModuleHelper::_load(); não sei por que, mas quando coloco esses mesmos códigos no arquivo php principal do módulo para teste, as coisas funcionam. Então, por que não vai além dessa linha? Alguma alternativa?

3
dev-m

Não sei se entendi o seu problema, porque você não apresentou mensagem de erro ou algo assim. O depurador também deve levá-lo para dentro de JModuleHelper::load(). Meu palpite é que você não fornece o ItemId que é usado por essa função, mas isso é um palpite.

Esteja ciente de que JModuleHelper :: getModule () possui dois parâmetros:

  • $ name
  • $ title

Você deve restringir sua pesquisa fornecendo o título (de alguma forma) também.

Espero que isto ajude.

1
Valentin Despa

Não é necessário usar o JModuleHelper para recuperar os parâmetros do módulo na classe auxiliar.

Cada instância do módulo é criada corretamente e uma variável de contexto $ params é atribuída para uso dos parâmetros. Por exemplo, mod_example tem $ params inicializados, você pode simplesmente chamar sua classe auxiliar enviando todo o $ params ou variáveis ​​específicas.

Por exemplo, mod_men funciona dessa maneira, enviando o parâmetro de layout para a classe auxiliar 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