Подскажите, кто знает. Как вывести ссылку из бекенда - клиенту, чтобы она работала? Есть решение

Есть ссылка вида : "/webasyst/shop/?plugin=xxxz&action=download&order_id=8888"

Все, кто зарегистрирован с доступом в "бекенд" пользуются ей нормально, но если дать ссылку просто зарегистрированному пользователю, то он не может скачать информацию о заказе, его кидает на авторизацию в "бекенд" - как разрешить ему пользоваться данной ссылкой, без доступа в "бекенд" сайта?
Нужно где то в коде плагина это разрешить, или что ? 

11 ответов

  • 1
    Алексей 14 мая 2019 08:45 #

    В бекенд могут заходить только пользователи бекенда.
    Если необходимо дать какую-то функциональность пользователю, то можете добавить через плагин её в его в личный кабинет или в отдельную ссылку на витрине типа /myplugin/download/8888.

    • +1
      akaMk. akaMk. 14 мая 2019 08:56 #

      А можно чуть чуть подробнее, это и так плагин только он для "бекенда" - его как то надо вывести для "всех" ?

  • 2
    Eugen Nichikov 14 мая 2019 09:30 # Решение

    1. В конфиг плагина wa-apps/shop/plugins/xxxz/lib/config/plugin.php добавить параметр

    'frontend' => true,

    2. в файл wa-apps/shop/plugins/xxxz/lib/config/routing.php добавить

    'xxxz/download/' => 'backend/download',

    2.1 если такого файла не было, то полностью код его такой

    <?php
    
    return array(
    	'xxxz/download/' => 'backend/download',
    );

    3. Очистить кэш.

    4. Давать ссылку такого вида /xxxz/download/?order_id=8888

    • +1
      akaMk. akaMk. 14 мая 2019 09:47 #

      Огромное спасибо, всё работает.

    • +1
      akaMk. akaMk. 14 мая 2019 11:55 #

      Извините, а не подскажите ещё самую малость?
      Все заработало, скачивается, но возникла ещё такая вещь, иногда там не один архив а несколько их должно быть, из бекенда скачивается как надо, а вот клиент скачивает только первый архив, видимо потому что не работают параметры "action" 


      <?php
      
      class DonwloaderPlugin extends shopPlugin
      {
          public function backendOrder($params)
          {
              $orderModel = new shopOrderModel();
              $order = $orderModel->getOrder($params['id']);
              $count = intval($this->getSettings('count'));
              if($count < 1){
                  $count = 10;
              }
              return array(
                  'action_link' => '<a href="?plugin=donwloader&action=download&order_id='.$params['id'].'" data-count="'.ceil(count($order['items'])/$count).'" class="order_donwload" target="blank">Скачать архив</a><script src="'.$this->getPluginStaticUrl().'js/donwload.js"></script>',
              );
          }
      }
      



      Вот тут action_link вызывает скачивание файла из бекенда как надо, а во фронтенде ссылка такая :

      /shop/donwloader/download/?order_id={$order.id}

      И по этому скачивается только 1 архив, как то можно запускать ссылку со всеми параметрами из фронтенда?

      • +2
        Eugen Nichikov Eugen Nichikov 14 мая 2019 14:48 #

        Тут уже надо разбираться с самим плагином. Если судить только по коду, который вы привели, то параметры передаются все те же.

        Но может быть такое, что в зависимости от data-count скриптом подменяется ссылка. Или что-то в этом роде.

        • +1
          akaMk. akaMk. 14 мая 2019 14:55 #

          То есть, просто преоброзавать ссылку со скрипта в обычную и вывести её во фронтенде нельзя?

        • +1
          akaMk. akaMk. 14 мая 2019 14:57 #

          там получается что count от 1 до 10 может быть, в зависимости от количество файлов

        • +1
          akaMk. akaMk. 14 мая 2019 15:22 #

          Мне наверное во фронтенде надо не ссылку вставлять, как я это сделал, а вызвать как то хелпер этот, чтоб он сам выводил ссылку из пшп скрипта? а как это сделать, что то запутался совсем.
          Я просто руками взял да вставил ссылку для скачивание, без всяких хелперов

        • +1
          akaMk. akaMk. 14 мая 2019 16:37 #

          <?php
          
          class DonwloaderPlugin extends shopPlugin
          {
              public function backendOrder($params)
              {
                  $orderModel = new shopOrderModel();
                  $order = $orderModel->getOrder($params['id']);
                  $count = intval($this->getSettings('count'));
                  if($count < 1){
                      $count = 10;
                  }
                  return array(
                      'action_link' => '<a href="?plugin=donwloader&action=download&order_id='.$params['id'].'" data-count="'.ceil(count($order['items'])/$count).'" class="order_donwload" target="blank">Скачать архив</a><script src="'.$this->getPluginStaticUrl().'js/donwload.js"></script>',
                  );
              }
          }

          Мне наверное надо сюда добавить 

          public static function ???
              {
                 а тут как то сдлеать вывод ссылки
              }
          
          или это не правильное направление...?

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

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