web-dev-qa-db-ja.com

モジュールヘルパーファイルのjmodulehelperロードメソッドにアクセスできません

Joomla 2.5でcom_ajaxを使用しています- https://github.com/Joomla-Ajax-Interface/component

私はjQuery ajaxによってcom_ajaxコンポーネントを呼び出す場所から同じモジュールの多くのインスタンス(重複モジュール)を持っているので。私たちの知っているように、ajax呼び出しのデータを取得するために、com_ajaxが私のモジュールのhelper.phpファイルを呼び出します。問題は、デフォルトの呼び出し$module = JModuleHelper::getModule('mod_name_here');では不可能であるhelper.phpファイル内の別のモジュールインスタンスのパラメーターにアクセスしたいので、モジュールidをヘルパーに渡してこの方法を実現しようとしていましたモジュールのjQuery ajax呼び出しからの.phpファイル-

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

そのため、_$params1_で目的のモジュールインスタンスの設定を取得しています。ただし、デバッガーが$modules = JModuleHelper::_load();の行でハングします。これらの同じコードをモジュールのメインphpファイルに配置してテストすると、 、物事はうまくいきます。では、なぜその行の後にさらに進んでいないのですか?代替案はありますか?

3
dev-m

エラーメッセージなどが表示されなかったため、問題を理解できたとは思いません。デバッガーもJModuleHelper::load()の内部に移動します。私の推測では、この関数で使用されるItemIdは提供されていませんが、これは推測です。

JModuleHelper :: getModule() には2つのパラメーターがあることに注意してください。

  • $ name
  • $ title

タイトルも(どういうわけか)提供することで、検索を絞り込むことができるはずです。

お役に立てれば。

1
Valentin Despa

ヘルパークラスのモジュールパラメータを取得するためにJModuleHelperを使用する必要はありません。

すべてのモジュールインスタンスが適切に作成され、パラメーターの使用のためにコンテキスト変数$ paramsが割り当てられます。たとえば、mod_exampleは$ paramsを初期化しているため、ヘルパークラスを呼び出して$ params全体または特定の変数を送信できます。

たとえば、mod_menはこのように機能し、レイアウトパラメータをヘルパークラス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