私は現在、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を返します。
私が気づいていない既知のバグはありますか、またはここで単に愚かなことをしていますか?
JModuleHelper::isEnabled()
は、大文字と小文字の区別を考慮していないようです。たとえば、@ Bakualの答えを使用すると、オプションは実際には_mod_breadcrumbs
_またはbreadcrumbs
(Breadcrumbs
ではない)のいずれかになります。
同様に、あなたの場合、あなたはJModuleHelper::isEnabled('freichat')
をしたいと思うでしょう。テーブルを見ると、すべてが常に小文字になるため、大文字を渡すとfalse
が得られます。
また、拡張機能をインストールして有効にする必要があるだけでなく、サイトに公開されているモジュールのインスタンスが多数あることにも注意してください。
APIページはこちら: http://api.joomla.org/cms-3/classes/JModuleHelper.html#method_isEnabled
モジュールの名前またはそのフォルダーを渡す必要があります。したがって、パンくずモジュールの場合は、「Breadcrumbs」または「mod_breadcrumbs」になります。モジュールのタイトルは使用できません。
モジュールの名前やフォルダーがわからなければ、これ以上は説明できません。
public static function isEnabled($module);
モジュールが有効かどうかを確認します。指定されたモジュールは、次の条件を満たす場合にのみ返されます。有効で、現在のメニュー項目またはすべての項目に割り当てられており、ユーザーがアクセスレベルの要件を満たしている。
代わりにdbクエリを使用できます。
$db = JFactory::getDbo();
$db->setQuery("SELECT `published` FROM `#__modules` WHERE `title` = 'Breadcrumbs'");
$is_enabled = $db->loadResult();
回答に時間を割いてくださった皆さんに感謝します。
#__extensions
テーブルを見て、モジュールを無効にし、モジュールの位置を削除してすべてのページから割り当てを解除しても、enabled
列が更新されていないことに気付きました。
最後に、データベースクエリを実行して、テーブル内のmod_freichatx
の存在を確認し、それに応じてenqueueMessage
を表示することにしました。