web-dev-qa-db-ja.com

モジュールが有効になっているかどうかを確認する

私は現在、JoomlaのJModuleHelper::isEnabled()を使用して特定のモジュールが有効になっているかどうかを確認しようとしていますが、問題は、false、実際に有効になっているかどうか。

Docs を見て、次のように書きました。

jimport('joomla.application.module.helper');        
$freichat = JModuleHelper::isEnabled('FreiChat-I');

if($freichat) {
    $message = 'Enabled';
}
else {
    $message = 'Disabled';
}

$application = JFactory::getApplication();
$application->enqueueMessage( $message, 'warning');

変更してみましたFreiChat-Iからloginへ。これは、有効または無効になっていても、常にtrueを返します。

私が気づいていない既知のバグはありますか、またはここで単に愚かなことをしていますか?

6
Lodder

JModuleHelper::isEnabled()は、大文字と小文字の区別を考慮していないようです。たとえば、@ Bakualの答えを使用すると、オプションは実際には_mod_breadcrumbs_またはbreadcrumbsBreadcrumbsではない)のいずれかになります。

同様に、あなたの場合、あなたはJModuleHelper::isEnabled('freichat')をしたいと思うでしょう。テーブルを見ると、すべてが常に小文字になるため、大文字を渡すとfalseが得られます。

また、拡張機能をインストールして有効にする必要があるだけでなく、サイトに公開されているモジュールのインスタンスが多数あることにも注意してください。

4
David Fritsch

APIページはこちら: http://api.joomla.org/cms-3/classes/JModuleHelper.html#method_isEnabled

モジュールの名前またはそのフォルダーを渡す必要があります。したがって、パンくずモジュールの場合は、「Breadcrumbs」または「mod_breadcrumbs」になります。モジュールのタイトルは使用できません。

モジュールの名前やフォルダーがわからなければ、これ以上は説明できません。

4
Bakual

public static function isEnabled($module);

モジュールが有効かどうかを確認します。指定されたモジュールは、次の条件を満たす場合にのみ返されます。有効で、現在のメニュー項目またはすべての項目に割り当てられており、ユーザーがアクセスレベルの要件を満たしている。

更新

代わりにdbクエリを使用できます。

$db = JFactory::getDbo();
$db->setQuery("SELECT `published` FROM `#__modules` WHERE `title` = 'Breadcrumbs'");
$is_enabled = $db->loadResult();
2
Farahmand

回答に時間を割いてくださった皆さんに感謝します。

#__extensionsテーブルを見て、モジュールを無効にし、モジュールの位置を削除してすべてのページから割り当てを解除しても、enabled列が更新されていないことに気付きました。

最後に、データベースクエリを実行して、テーブル内のmod_freichatxの存在を確認し、それに応じてenqueueMessageを表示することにしました。

1
Lodder