com_ajax - LogicException: модуль не опубликован, у вас нет к нему доступа

Я сделал простой модуль (контактную форму), и когда я пытаюсь получить к нему доступ через AJAX, я получаю следующую ошибку:

LogicException: модуль mod_contact_us_form не опубликован, у вас нет к нему доступа или он не назначен текущему пункту меню

Это 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

Часть, которая меня смущает - я сделал аналогичный модуль (это своего рода обновленный модуль по сравнению с моим первым), и я использую тот же вызов для AJAX (кроме части module=contact_us_form). Первый модуль работает без проблем (эта модель не переворачивалась и не устанавливалась вместе с новой). Что кажется проблемой?

ИЗМЕНИТЬ:

Я нашел решение. Кажется, что когда вы назначаете модуль определенной странице, он не регистрирует его как опубликованный. Но если вы выберете На всех страницах, кроме выбранных, а затем назначите его только для меню желаний, он зарегистрирует его как опубликованный и будет работать.


person Sasha    schedule 29.11.2013    source источник
comment
Я бы спросил в группе рассылки joomla dev groups.google.com /forum/m/#!forum/joomla-dev-general. Именно здесь разработчики превратили идею ajax в компонент. Вы получите помощь непосредственно от авторов этой функциональности, особенно от Мэтта из Betweenbrain, который руководил com_ajax.   -  person Laoneo    schedule 01.12.2013
comment
@Laoneo Спасибо, приятель :)   -  person Sasha    schedule 01.12.2013


Ответы (3)


для доступа к модулям, которые указаны для назначений меню, вы также должны добавить Itemid к URL-адресу, например index.php?option=com_ajax&format=raw&module=contact_us_form&Itemid=123

person leo_poldX    schedule 31.12.2013
comment
Спасибо, мне это помогает!! :) - person pollux1er; 23.05.2014
comment
Чтобы получить Itemid: $app = JFactory::getApplication(); $menu = $app->getMenu()->getActive()->id; - person kmas; 03.12.2014
comment
Это должно быть отмечено как правильный ответ. Эта проблема возникает, когда модуль, использующий AJAX, публикуется ТОЛЬКО на домашней странице (элемент меню по умолчанию) веб-сайта Joomla. По какой-то причине в этой конкретной ситуации Itemid (элемент меню по умолчанию) ДОЛЖЕН быть указан в URL-адресе запроса AJAX, чтобы запрос работал. Конкретное значение ItemId для использования — это значение столбца Id, отображаемое в Администраторе Joomla (бэкэнд), связанное с пунктом меню по умолчанию. - person feculededentier; 01.11.2016

Я не совсем уверен, но думаю, что в com_ajax Joomla есть ошибка, которая будет исправлена ​​в следующем выпуске.

См. ошибку 32166.

Тем временем попробуйте переименовать свой модуль в

contact_us_form => contactusform.

Другой альтернативой является применение патча. См. для этого тестировщик компонентов для тестировщиков и примените идентификатор исправления: 2133.

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

Надеюсь это поможет!

person Valentin Despa    schedule 29.11.2013
comment
Кажется, ничего не работает. Старый модуль имеет имя mod_ask_us и работает без проблем. Я переименовал его в mod_askus, и он до сих пор работает. Я предполагаю, что Joomla не использует логику: D - person Sasha; 29.11.2013
comment
Мне удается заставить его работать, но все еще есть проблема. Когда я назначаю модуль всем страницам, он работает, но когда я назначаю его определенному меню, он не работает. - person Sasha; 29.11.2013

Похоже, когда вы отправляете форму, ваш модуль еще не опубликован в BackEnd.

person pollux1er    schedule 23.05.2014