it-swarm.com.de

Auf die Lademethode jmodulehelper in der Modulhilfedatei kann nicht zugegriffen werden

Ich benutze com_ajax in joomla 2.5 - https://github.com/Joomla-Ajax-Interface/component

Da ich viele Instanzen (doppelte Module) desselben Moduls habe, rufe ich die Komponente com_ajax von jQuery ajax auf. Ebenso werden com_ajax-Aufrufe an die helper.php-Datei meines Moduls gesendet, um Daten für Ajax-Aufrufe abzurufen, wie wir wissen. Problem ist, dass ich auf die Parameter einer anderen Modulinstanz in der Datei helper.php zugreifen möchte, was durch den Standardaufruf $module = JModuleHelper::getModule('mod_name_here'); nicht möglich ist. Daher habe ich versucht, dies durch Übergabe des Moduls id an helper zu erreichen .php-Datei aus dem jQuery-Ajax-Aufruf des Moduls -

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

also in $params1 erhalte ich die Einstellungen meiner gewünschten Modulinstanz. Der Debugger hängt jedoch in der Zeile $modules = JModuleHelper::_load(); Testen, Dinge funktionieren. Warum geht es dann nicht weiter? Irgendwelche Alternativen?

3
dev-m

Ich bin mir nicht sicher, ob ich Ihr Problem verstehe, da Sie keine Fehlermeldung oder ähnliches angezeigt haben. Der Debugger sollte Sie auch in JModuleHelper::load() einweihen. Ich vermute, dass Sie nicht die ItemId angeben, die von dieser Funktion verwendet wird, aber dies ist eine Vermutung.

Beachten Sie, dass JModuleHelper :: getModule () zwei Parameter hat:

  • $ name
  • $ title

Sie sollten in der Lage sein, Ihre Suche einzugrenzen, indem Sie (irgendwie) auch den Titel angeben.

Hoffe das hilft.

1
Valentin Despa

Es ist nicht erforderlich, JModuleHelper zu verwenden, um Modulparameter in der Hilfsklasse abzurufen.

Jede Modulinstanz wird ordnungsgemäß erstellt und eine Kontextvariable $ params für die Parameterverwendung zugewiesen. Wenn in mod_example beispielsweise $ params initialisiert ist, können Sie einfach Ihre Hilfsklasse aufrufen und die gesamten $ params oder bestimmte Variablen senden.

Zum Beispiel funktioniert mod_men so und sendet den layout-Parameter an die Hilfsklasse 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