Как передать значение GETом в разделе отчетов? Есть решение

Задача - передать GET'ом определенное значение. Например:

/webasyst/shop/?action=reports#/plugin/remove=15
Требуется получить значение "remove". Обычными средствами не удалось это сделать. Скопировал с раздела sales-отчетов. А именно: waRequest::request('remove', 0, 'int');
Но всегда возвращается 0.

Даже попробовал взять точный пример: $type_id = waRequest::request('type', 'sources', 'string');
Но при обращении к /webasyst/shop/?action=reports#/plugin/type=anystring
$type_id всё равно всегда равняется "sources".

Что я делаю не так?

2 ответа

  • 1
    Леонид Вакуленко Webasyst 20 апреля 2015 04:50 # Решение

    Я не вижу встроенного магазинного кода в разделе отчётов, который обрабатывал бы URL хэши вида #/myawesomeplugin и что-то грузил бы из плагинов.

    Если у вас подгружается ваш контроллер в ответ на этот хеш, я делаю вывод, что вы написали JS код, который перехватывает хэш #/myawesomeplugin и в ответ на него подгружает данные из вашего плагина. Следовательно, если этот JS ваш, можете передавать там хоть десять любых GET параметров.

    Или я чего-то не понял?

    • +1
      Евгений Леман Евгений Леман 20 апреля 2015 06:06 #

      Семён Семёныч... Я вчера уже голову сломал. Мой косяк вы конечно правильно описали, но я сегодня еще во сне допер, что мой контроллер не видит этого хеша. Ну бывает... Раз уж я свою задачку решил, то выложу ответ. Вдруг кому пригодится.

      Собственно для того, чтобы ваш плагин заимел собственную позицию в разделе отчетов и выделялся активным когда надо, необходимо в хук backend_products() "выплеснуть":

      <li><a href="#/arrived/">Уведомления о поступлении</a>
      <script>
      $(function(){
      $.reports.arrivedAction = function () {
      this.setActiveTop("arrived");
      $("#reportscontent").load("?plugin=arrived&action=report"+this.getTimeframeParams());
      };
      $.reports.arrivedSendedAction = function () {
      this.setActiveTop("arrived");
      $("#reportscontent").load("?plugin=arrived&action=report&sended=1"+this.getTimeframeParams());
      };
      $.reports.arrivedFilterAction = function () {
      var reportshash = location.hash.replace("#/arrived/filter/","");
      this.setActiveTop("arrived");
      $("#reportscontent").load("?plugin=arrived&action=report&filter=1&hash="+reportshash+this.getTimeframeParams());
      };
      });
      </script>
      </li>


      Собственно по этой логике уже подмените название плагина на свой. Почему "этих непонятных функций" тут 3? Ну в моем плагине есть "подстраницы". То есть по адресу "?action=reports#/arrived/" у меня отображается одно содержимое, а по "?action=reports#/arrived/sended/" - другое. И без "$.reports.arrivedSendedAction" ссылка в меню не выделялась бы активной. Да и контроллеру нашему ничего не передавалось бы. Но работает эта функция весьма своеобразно. То есть добавив "$.reports.arrivedFilterAction" она будет работать на любой хеш, который начинается с "#/arrived/filter". То есть сработает даже и при обращении к "?action=reports#/arrived/filterinosuperino", что позволяет отлично передавать любые параметры. В 3й функции передается контроллеру и сам хеш. Но т.к. в виде хеша мы его не отловим, решетку лучше перед передачей вырезать. Ну а раз начали резать, то вырезаем и все остальное, чтобы не мешалось. А в обработчике уже ручками режем ГЕТ "hash" на части и получаем то, что хотим.

      В документации я ничего такого не нашел и мне в свое время пришлось покупать плагин какой-то, чтобы оттуда выдрать способ размещения в отчетах. Так что может кому-то и пригодится :)

  • 1
    Syrnik.com 19 апреля 2015 13:43 #

    /webasyst/shop/?action=reports#/plugin&remove=15

    • +1
      Евгений Леман Евгений Леман 19 апреля 2015 14:03 #

      Как я уже сказал ранее: "Обычными средствами не удалось это сделать".

      Проще говоря при обращении к /webasyst/shop/?action=reports#/myawesomeplugin&remove=15
      print_r() ГЕТа выдает: Array ( [plugin] => myawesomeplugin [action] => report [timeframe] => 90 [groupby] => days [_] => 1429466049213 )

      Делаю я это все в методе execute() класса ../shop/plugins/myawesomeplugin/lib/actions/backend/shopMyawesomepluginPluginBackendReport.action.php

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

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