Помогите с плагином для обработки ajax

wokster

приложение сайт доступно по домен.su/site/

в /wa-apps/site/plugins/ajax/lib/actions

файл siteAjaxPluginFrontendMail.action.php

<?php

class siteAjaxPluginFrontendMailAction extends waViewAction 
{

        public function execute()
        {
                return "test";
        }

}

в /wa-apps/site/plugins/ajax/lib/config

файл plugin.php

<?php

return array(
    // обязательные параметры
    'name' => 'Ajax',
    'description' => 'ajax',
    'version' => '1.0',
);

Что я упустил?

http://домен.su/site/?plugin=ajax&action=mail

получаю

Empty module and/or action after parsing the URL "/?module=site&plugin=ajax&action=mail" (frontend/mail).
Not found classes: shopFrontendMailController, shopFrontendMailAction, shopFrontendActions

Error with code 404 in '/home/billyboy/domains/billy-boy.su/public_html/wa-system/controller/waFrontController.class.php' around line 189:

   184            if ($action && $default) {
   185                return $this->execute($plugin, $module);
   186            }
   187    
   188            // Too bad. 404.
 >>189            throw new waException(sprintf('Empty module and/or action after parsing the URL "%s" (%s/%s).<br />Not found classes: %s', $this->system->getConfig()->getCurrentUrl(), $module, $action,implode(', ',$class_names)), 404);
   190        }
   191    }
   192    
   193    // EOF
22 мая 2016
  • Алексей 22 мая 2016 11:47

    1. Не создали файл routing.php чтобы можно было обращаться к нему с витрины?
    2. http://домен.su/site/?plugin=ajax&action=mail такое обращение некорректно
    3. Если используете waViewAction то должен быть и шаблон с выводом ответа. Поэтому лучше использовать waJsonController раз уж вы по ajax обращаетесь.

  • wokster 22 мая 2016 12:23

    переделал. Сделал siteAjaxPluginFrontendMail.controller.php вместо siteAjaxPluginFrontendMail.action.php


    <?php
    
    class siteAjaxPluginFrontendMailController extends extends waJsonController
    {
    
        public function execute()
        {
                $this->response = array(
                    'hhh' => 'жопа',
                );
        }
    

    С routing.php подскажите? Что в нем и где он?

  • wokster 22 мая 2016 12:39

    В /wa-config/routing.php добавил:

          5 => 
        array (
          'url' => 'ajax/*',
          'app' => 'site',
          'plugin' => 'ajax',
        ),

    обращаюсь к домен.su/ajax теперь другая ошибка:


    Empty module and/or action after parsing the URL "/ajax/" (frontend/).
    Not found classes: siteAjaxPluginFrontendController, siteAjaxPluginFrontendAction, siteAjaxPluginFrontendActions
    
    Error with code 404 in '/home/billyboy/domains/billy-boy.su/public_html/wa-system/controller/waFrontController.class.php' around line 189:
    
       184	        if ($action && $default) {
       185	            return $this->execute($plugin, $module);
       186	        }
       187	
       188	        // Too bad. 404.
     >>189	        throw new waException(sprintf('Empty module and/or action after parsing the URL "%s" (%s/%s).<br />Not found classes: %s', $this->system->getConfig()->getCurrentUrl(), $module, $action,implode(', ',$class_names)), 404);
       190	    }
       191	}
       192	
       193	// EOF
  • Rat 23 мая 2016 04:15

    1. Поселить "Сайт" в корень сайта: domain/*

    2. В routing.php плагина добавить:

    return array(
        'ajax/' => 'frontend/mail',
    );

    3. В плагине создать файл lib/actions/frontend/siteAjaxPluginFrontendMail.controller.php с классом siteAjaxPluginFrontendMailController.

    4. Очистить кеш в Инсталлере (если не включен, а должен быть — на время разработки — режим отладки).

    5. Отправлять AJAX-запрос по адресу domain.ru/ajax/.

  • wokster 31 мая 2016 15:40

    А если нет возможности поселить "Сайт" в корень сайта: domain/* - будет работать по domain/site/ajax ? И надо ли при этом править routing.php

    Где должен находится routing.php плагина?

  • Rat 31 мая 2016 15:44

    Работать будет. Править routing.php не нужно, потому что в нём указываются URL плагина относительно URL поселения приложения. Главное в JavaScript-коде плагина учитывайте, что приложение может быть поселено не в корне, а в "подпапке", как в вашем последнем примере.

  • wokster 2 июня 2016 10:39

    А где должен быть routing.php для плагина?

  • Rat 2 июня 2016 10:41

    lib/config/ в папке плагина.

  • wokster 2 июня 2016 11:08

    получаю

    <h2 id="Title" style="font-family: 'Times New Roman'; line-height: normal;">Empty module and/or action after parsing the URL "/?plugin=ajax&action=mail" (frontend/mail).
    Not found classes: shopFrontendMailController, shopFrontendMailAction, shopFrontendActions</h2>

    причем

    <h2 style="font-family: 'Times New Roman'; line-height: normal;">Call stack</h2>
    #0 /home/billyboy/domains/billy-boy.su/public_html/wa-system/controller/waFrontController.class.php(58): waFrontController->execute('', 'frontend', 'mail')
    #1 /home/billyboy/domains/billy-boy.su/public_html/wa-system/waSystem.class.php(586): waFrontController->dispatch()
    #2 /home/billyboy/domains/billy-boy.su/public_html/index.php(7): waSystem->dispatch() 

    почему-то waFrontController->execute('', 'frontend', 'mail') - не правильно подключен plugin? Почему он передает пустые кавычки?

  • wokster 2 июня 2016 11:29

    7 кругов ада, что бы получить "hello world" по ajax

  • Rat 2 июня 2016 11:42

    А почему

    URL "/?plugin=ajax&action=mail"

    ?

    URL во фронтенде должен быть такой: domain.ru/ajax/

    А ваш пример URL сработает только в бекенде, и файл routing.php в бекенде не нужен.

  • wokster 2 июня 2016 12:13

    domain.ru/ajax/ дает 404

    domain.ru/site/ajax/ тоже 404


  • Rat 2 июня 2016 12:22

    В конфиге плагина plugin.php есть строка

    'frontend' => true,

    ?

  • wokster 2 июня 2016 15:13
    не было, но не помогло. Вот /wa-apps/site/plugins/ajax/lib/config/plugin.php


    <?php
    
    return array(
        // обязательные параметры
        'name' => 'ajax',
        'description' => 'ajax',
        'version' => '1.0',
    	'frontend' => true,
    );

    /wa-apps/site/plugins/ajax/lib/config/routing.php


    return array(
        'ajax/' => 'frontend/mail',
    );

    /wa-apps/site/plugins/ajax/lib/siteAjax.plugin.php

    <?php
    
    class siteAjaxPlugin extends sitePlugin
    {
    
            public function method1($params) 
            {
    
            }
    }

    /wa-apps/site/plugins/ajax/lib/actions/siteAjaxPluginFrontendMail.controller.php

    <?php
    
    class siteAjaxPluginFrontendMailController extends extends waJsonController
    {
    
        public function execute()
        {
                $this->response = array(
                    'hhh' => 'жопа',
                );
        }
    
    }
  • Rat 2 июня 2016 15:21

    Кеш очищен?

    И лишнее "extends" в последнем файле.

  • wokster 2 июня 2016 17:44

    extends -дубль убрал

    кеш вычищен, debug mode включен


    Все равно 404

    Проверяю так (в шапке сайта)

    $(function() {
        $.getJSON('/site/ajax/', function (json) {
        alert(json);
    });
        $.getJSON('/ajax/', function (json) {
        alert(json);
    });
    });

    может тут ошибка, но в консоле вижу что запрос идет и получает 404

  • Rat 2 июня 2016 17:50

    Либо вы с вами пропустили какую-то очевидную мелочь, либо это мистика... У меня нормально выплывает alert с [object Object].

    Попробуйте создать всё заново, что ли — для чистоты эксперимента.

  • wokster 2 июня 2016 18:16

    Залез в routing.php для site

    добавил

    <?php
    
    return array(
    .............
    	    'ajax/' => array(
            'module' => 'frontend',
    		'plugin' => 'ajax',
            'action' => 'mail',
            'secure' => false,
        ),
    ......................
    );

    работает


  • wokster 2 июня 2016 18:21

    Вот только ответ странный:

    return array(
        'ajax/' => 'frontend/mail',
    );{"status":"ok","data":{"hhh":"\u0436\u043e\u043f\u0430"}}
  • wokster 2 июня 2016 18:23

    Удалил /wa-apps/site/plugins/ajax/lib/config/routing.php

    Теперь норм

  • wokster 2 июня 2016 18:23

    Спасибо за время

  • Rat 3 июня 2016 09:02

    В следующий раз обновите "Сайт", и всё поломается. Лучше так не делать, а разобраться, как сделать правильно.

Добавление новых комментариев к этой теме отключено.