как вызвать метод плагина из html файла? .. Есть решение

В основном классе плагина есть pubblic function "getVar()",  которая возвращает значение для переменной $var. Далее переменная $var передается в файл "scripts.html":

$view = wa()->getView();
$view->assign('var', $var);
$html = $view->fetch(wa()->getAppPath('plugins/myplugin/templates/scripts.html'));

Однако в файле "scripts.html" есть JS код и есть событие "wa_order_form_changed". Здесь нужно снова обратиться к методу из основного класса плагина. Как это можно сделать?

<script>
$( document ).on("wa_order_form_changed", function(event, controller) {
    //переменную {$var} нужно изменить. для этого вроде как можно вызвать метод getVar() из основного класса плагина
    //как это сделать?
});
</script>

3 ответа

  • 1
    Syrnik.com 16 декабря 2020 13:06 # Решение

    Добавить в плагине экшен, который возвращает значение $var в виде json и запрашивать его

    • +1
      chikurov-seo chikurov-seo 16 декабря 2020 15:02 #

      Спасибо за ответ. 

      Потихоньку пытаюсь понять как это работает, раньше не сталкивался с экшенами

      1.Создал одиночный экшен

      2.В нем пытаюсь передать переменную

      <?php
      
      class shopFixorderPluginFrontendDeliverypricechangerController extends waJsonController
      {
          public function execute() {
              //в корзине сайта посылается post-запрос "calculate"
              if (waRequest::post('calculate', ''))
              { 
                  $var = 'test';
                  $view->assign('var', $var);
              }
          }
      }
      
      //папка, в которой лежит файл - /wa-apps/shop/plugins/fixorder/lib/actions/frontend/
      //название файла - shopFixorderPluginFrontendDeliverypricechanger.controller.php
      

      3. пока что не понимаю на правильном ли я пути и если да, то как проверить и что делать дальше =(

      $( document ).on("wa_order_form_changed", function(event, controller) {
        // ???? тут нужен $var
      });
      
      //папка, в которой лежит файл - /wa-apps/shop/plugins/fixorder/templates/
      //название файла - scripts.html
      //подключается через основной класс плагина ($html = $view->fetch(wa()->getAppPath('plugins/fixorder/templates/scripts.html'));)

      • +1
        chikurov-seo chikurov-seo 17 декабря 2020 12:14 #

        Разобрался самостоятельно. Нужно было также подкорректировать названия файлов и классов, сделать post-запрос, настроить роутинг, и вместо:

        $view->assign('var', $var);


        возвращать переменную так:

        $this->response = $var;

        Документация от Webasyst довольно скудная. Мало пояснений, мало примеров. И вообще нихрена не понятно чем отличается контроллер от экшена.

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите