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

问题描述 投票:2回答:3

我制作了简单的模块(联系表单),当我尝试通过AJAX访问它时出现以下错误:

LogicException:模块mod_contact_us_form未发布,您无权访问它,或者它未分配给当前菜单项

这是我用来访问它的网址:

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

令我困惑的部分 - 我已经制作了类似的模块(这是我第一个升级的模块),我使用相同的AJAX调用(模块= contact_us_form部分除外)。第一个模块正常工作(此模型未转动,也未与新模块一起安装)。什么似乎有问题?

编辑:

我找到了解决方案 - 似乎当您将模块分配给特定页面时,它不会将其注册为已发布。但是,如果您选择除了所选页面以外的所有页面,然后仅将其分配给欲望菜单,它会将其注册为已发布,它将起作用。

joomla joomla3.0
3个回答
11
投票

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


0
投票

我不太确定,但我认为com_ajax Joomla中有一个错误,将在下一个版本中解决。

Issue 32166

同时尝试将模块重命名为

contact_us_form => contactusform

另一种方法是应用补丁。请参阅Component Patchtester for Testers并应用修补程序ID:2133

https://github.com/joomla/joomla-cms/pull/2133

希望这可以帮助!


0
投票

看来,当您发送表单时,您的模块尚未在BackEnd中发布。

© www.soinside.com 2019 - 2024. All rights reserved.