[Помогите] Передача переменной между контроллерами

Тема в разделе "OpenCart", создана пользователем GrblFF, 2 сен 2018.

  1. GrblFF

    GrblFF

    Регистрация:
    10 мар 2014
    Сообщения:
    66
    Симпатии:
    1
    Opencart 2.3. Есть страница поиска и есть фильтр товаров, в фильтре не предусмотрена его работоспособность на странице поиска. Вывод фильтра сделал добавив в контроллере фильтра глобальную переменную. Но возник вопрос - как в контроллер фильтра передать тот поисковой запрос ($search), для фильтрации товаров. Пробую получить его $data['sword']=$this->request->get['search']; - в контроллере фильтра, из контроллера поиска $data['sword'] = $this->url->link( 'search' => $this->request->get['search']]);, но не получается.
     
  2. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Что-то вы не то делаете.
    Если вы на странице поиска, то у вас уже есть $this->request->get['search'], в котором поисковая фраза введённая пользователем. И оно доступно в любом контроллере.

    А вообще, если нужно передавать данные между контроллерами, то самый простой вариант - использовать сессию. В массив
    PHP:
    $this->session->data
    Можно добавить собственные элементы и читать их в любом другом месте.
    И обязательно нужно удалять элементы после прочтения! Сессия существует за рамками отдельного запроса и добавленный элемент будет в ней висеть пока пользователь не закроет браузер, что может привести к "ложным срабатываниям" (когда элемент был добавлен ранее, а на текущем запросе прочитался повторно, хотя его вообще быть не должно было).

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

    Baco Антихронофаг Команда форума

    Регистрация:
    9 окт 2012
    Сообщения:
    803
    Симпатии:
    399
    Соглашусь с ув. Dotrox, если поисковый запрос есть на роуте поиска, то данные о запросе он хранит в переменной:
    Код:
    $this->request->get['search'];
    но если вам нужно вместе с фильтром добавить данные и присоединить к URL формируемому фильтром, а не просто фильтровать товары, по запросу 'search', то тут понадобиться уже немного подковырять не только контроллер поиска, что бы фильтровать данные в рамках запроса search, но и сам фильтр, что бы формировать данный URL, ИМХО.
     
  4. chukcha

    chukcha

    Регистрация:
    9 окт 2014
    Сообщения:
    448
    Симпатии:
    119
    Не ожидал такого совета от тебя

    Есть regisrty, есть config
    Я предпочитаю config

    $this->config->set

    А сессия, это не лучший вариант
     
  5. GrblFF

    GrblFF

    Регистрация:
    10 мар 2014
    Сообщения:
    66
    Симпатии:
    1
    С этим разобрался, действительно $this->request->get['search']; работает
    if ($data['global_type'] == 'search') {
    $data['search'] = $this->request->get['search'];
    }
    Вопрос теперь в другом, можно ли записать как выглядит sql запрос выборки товаров в лог для отладки. Не пойму передается ли в модель фильтра $data['search'] из контролера.
     
  6. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Я ж написал, что самый простой :Smile:
    Мне лень было приводить примеры с реестром и конфигом :Smile:
    Реестр, кстати, для такого использовать неправильно.

    Можно.
    Смотрите в контроллере, из какой модели и какой метод вызывается, затем в этом методе добавляете запись в лог. Возможно, придётся немного переписать формирование запроса, если там запрос формируется сразу в вызове $this->db->query (dsytcnb SQL в переменную и её писать в лог).

    А если хотите быть уверены, что логируется именно вызов при поиске, то придётся в лог ещё дописывать ткущий роут.