我制作了简单的模块(联系表单),当我尝试通过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部分除外)。第一个模块正常工作(此模型未转动,也未与新模块一起安装)。什么似乎有问题?
修改
我找到了解决方案 - 似乎当您将模块分配给特定页面时,它不会将其注册为已发布。但是,如果您选择在除选定内容之外的所有页面上,然后仅将其分配给所需菜单,它会将其注册为已发布,并且可以正常使用。
答案 0 :(得分:11)
要访问指定给菜单分配的模块,您还必须将Itemid添加到url,例如index.php?option = com_ajax&amp; format = raw&amp; module = contact_us_form &Itemid=123
答案 1 :(得分:0)
我不太确定,但我认为com_ajax
Joomla中存在一个错误,将在下一个版本中解决。
请参阅Issue 32166
同时尝试将模块重命名为
contact_us_form
=&gt; contactusform
。
另一种方法是应用补丁。请参阅Component Patchtester for Testers并应用修补程序ID:2133
https://github.com/joomla/joomla-cms/pull/2133
希望这有帮助!
答案 2 :(得分:0)
看来,当您发送表单时,您的模块尚未在BackEnd中发布。