Joomla com_ajax-LogicException:模块未发布,您无权访问它

Joomla com_ajax-LogicException:模块未发布,您无权访问它,joomla,joomla3.0,Joomla,Joomla3.0,我制作了一个简单的模块(联系人表单),当我试图通过AJAX访问它时,我得到以下错误: 逻辑异常:模块mod_contact_表单未发布,您需要发布 无法访问它,或者它未分配给当前菜单项 这是我用来访问它的url: index.php?option=com_ajax&format=raw&module=contact_us_form 这是助手类: class modContactUsFormHelper { public function getParams($inst

我制作了一个简单的模块(联系人表单),当我试图通过AJAX访问它时,我得到以下错误:

逻辑异常:模块mod_contact_表单未发布,您需要发布 无法访问它,或者它未分配给当前菜单项

这是我用来访问它的url:

index.php?option=com_ajax&format=raw&module=contact_us_form
这是助手类:

class modContactUsFormHelper
{

    public function getParams($instance = 'mod_contact_us_form')
    {
      jimport('joomla.application.module.helper');
      $module = JModuleHelper::getModule($instance);
      $moduleParams = new JRegistry;
      $moduleParams->loadString($module->params);

      return $moduleParams;
    }

    public static function sendEmail($data)
    {
        $mailer = JFactory::getMailer();

        $params = static::getParams();
        $mailer->setSender($data['email']);
        $mailer->addRecipient($data['kancelarija']);
        $mailer->setSubject($data['tema']);

        $body = '<h3>' . $data['tema'] .  '</h3>';
        $body .= '<p>' . $data['ime']  .  ' вас је контактирао са следећим питањем:</p>';
        $body .= '<p>' . $data['pitanje']  .  '</p>';
        $body .= '<p>Контакт email  адреса: ' . $data['email']   . '</p>';

        $mailer->setBody($body);
        $mailer->send();
    }

    public static function getAjax()
    {
        $data = modContactUsFormHelper::cleanData();
        modContactUsFormHelper::sendEmail($data);

        echo  'Kontakt Forma';
    }

    public static function cleanData()
    {
        $input = JFactory::getApplication()->input;

        $data = array(
            'name'        => $input->get('ime', '', 'string'),
            'email'       => $input->get('email', '', 'string'),
            'tema'        => $input->get('tema', '', 'string'),
            'pitanje'     => $input->get('pitanje', '', 'string'),
            'kancelarija' => $input->get('contact')
        );
        return $data;
    }

}
// END OF CLASS modContactUsFormHelper
类modContactUsFormHelper
{
公共函数getParams($instance='mod\u contact\u us\u form')
{
jimport('joomla.application.module.helper');
$module=JModuleHelper::getModule($instance);
$moduleParams=新的JRegistry;
$moduleParams->loadString($module->params);
返回$moduleParams;
}
公共静态函数sendmail($data)
{
$mailer=JFactory::getMailer();
$params=static::getParams();
$mailer->setSender($data['email']);
$mailer->addRecipient($data['kancelarija']);
$mailer->setSubject($data['tema']);
$body='.$data['tema'].';
$body.='。$data['ime'.'数据:

; $body.=''.$data['pitanje'].

'; $body.='kааааааe:'.$data['email'.

'; $mailer->setBody($body); $mailer->send(); } 公共静态函数getAjax() { $data=modContactUsFormHelper::cleanData(); modContactUsFormHelper::sendEmail($data); echo“Kontakt Forma”; } 公共静态函数cleanData() { $input=JFactory::getApplication()->input; $data=数组( 'name'=>$input->get('ime','string'), 'email'=>$input->get('email','string'), 'tema'=>$input->get('tema','string'), 'pitanje'=>$input->get('pitanje','string'), “kancelarija”=>$input->get('contact') ); 返回$data; } } //modContactUsFormHelper类结束
让我困惑的部分——我制作了类似的模块(这是我第一个模块的升级版),我使用了相同的AJAX调用(模块=联系我们表单部分除外)。第一个模块工作正常(此型号未转动,也未与新型号一起安装)。有什么问题吗

编辑:


我已经找到了解决方案——似乎当您将模块分配给特定页面时,它不会将其注册为已发布。但是,如果您在所有页面上选择,除了那些选中的,然后只将其分配到desire菜单,它将注册为published,它将正常工作。

我不太确定,但我认为
com_ajax
Joomla中存在一个bug,将在下一版本中解决

同时尝试将模块重命名为

联系人表单
=>
联系人表单

另一种选择是应用补丁。有关此信息,请参阅并应用修补程序ID:2133


希望这有帮助

要访问指定给菜单分配的模块,您还必须将Itemid添加到url,如index.php?option=com\u ajax&format=raw&module=contact\u us\u form
&Itemid=123

发送表单时,您的模块似乎尚未在后端发布

似乎什么都不管用。旧模块的名称为mod_ask_us,它可以正常工作。我把他改名为mod_askus,现在仍然有效。我猜Joomla没有使用逻辑:DI设法让它工作,但仍然存在一个问题。当我将模块分配给所有页面时,它都在工作,但当我将模块分配给特定菜单时,它就不工作了。这就是开发人员将ajax思想转化为组件的地方。您将直接从该功能的作者那里获得帮助,特别是betweenbrain的matt,他是com_ajax的领导者。@Laoneo谢谢你,伙计:)谢谢,这对我有帮助!!:)获取Itemid:$app=JFactory::getApplication()$menu=$app->getMenu()->getActive()->id;这应标记为正确答案。当使用AJAX的模块仅在Joomla网站的主页(默认菜单项)上发布时,就会出现此问题。出于某种原因,在这种特定情况下,必须在AJAX请求URL中指定
Itemid
(默认菜单项的id),请求才能工作。要使用的特定
ItemId
值是与默认菜单项关联的Joomla Administrator(后端)中可见的“Id”列的值。