Opencart 2.3. Есть страница поиска и есть фильтр товаров, в фильтре не предусмотрена его работоспособность на странице поиска. Вывод фильтра сделал добавив в контроллере фильтра глобальную переменную. Но возник вопрос - как в контроллер фильтра передать тот поисковой запрос ($search), для фильтрации товаров. Пробую получить его $data['sword']=$this->request->get['search']; - в контроллере фильтра, из контроллера поиска $data['sword'] = $this->url->link( 'search' => $this->request->get['search']]);, но не получается.
Что-то вы не то делаете. Если вы на странице поиска, то у вас уже есть $this->request->get['search'], в котором поисковая фраза введённая пользователем. И оно доступно в любом контроллере. А вообще, если нужно передавать данные между контроллерами, то самый простой вариант - использовать сессию. В массив PHP: $this->session->data Можно добавить собственные элементы и читать их в любом другом месте. И обязательно нужно удалять элементы после прочтения! Сессия существует за рамками отдельного запроса и добавленный элемент будет в ней висеть пока пользователь не закроет браузер, что может привести к "ложным срабатываниям" (когда элемент был добавлен ранее, а на текущем запросе прочитался повторно, хотя его вообще быть не должно было). Но есть нюанс: надо правильно понимать последовательность вызова контроллеров. Контроллер страницы вызывается перед контроллерами модулей, так что тут проблем быть не должно, но это всегда надо учитывать.
Соглашусь с ув. Dotrox, если поисковый запрос есть на роуте поиска, то данные о запросе он хранит в переменной: Код: $this->request->get['search']; но если вам нужно вместе с фильтром добавить данные и присоединить к URL формируемому фильтром, а не просто фильтровать товары, по запросу 'search', то тут понадобиться уже немного подковырять не только контроллер поиска, что бы фильтровать данные в рамках запроса search, но и сам фильтр, что бы формировать данный URL, ИМХО.
Не ожидал такого совета от тебя Есть regisrty, есть config Я предпочитаю config $this->config->set А сессия, это не лучший вариант
С этим разобрался, действительно $this->request->get['search']; работает if ($data['global_type'] == 'search') { $data['search'] = $this->request->get['search']; } Вопрос теперь в другом, можно ли записать как выглядит sql запрос выборки товаров в лог для отладки. Не пойму передается ли в модель фильтра $data['search'] из контролера.
Я ж написал, что самый простой Мне лень было приводить примеры с реестром и конфигом Реестр, кстати, для такого использовать неправильно. Можно. Смотрите в контроллере, из какой модели и какой метод вызывается, затем в этом методе добавляете запись в лог. Возможно, придётся немного переписать формирование запроса, если там запрос формируется сразу в вызове $this->db->query (dsytcnb SQL в переменную и её писать в лог). А если хотите быть уверены, что логируется именно вызов при поиске, то придётся в лог ещё дописывать ткущий роут.