Joomla com_ajax-LogicException:模块未发布,您无权访问它
我制作了一个简单的模块(联系人表单),当我试图通过AJAX访问它时,我得到以下错误: 逻辑异常:模块mod_contact_表单未发布,您需要发布 无法访问它,或者它未分配给当前菜单项 这是我用来访问它的url: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
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”列的值。