2013-10-25 2 views
0

У меня есть действие, которое отображает вид, который выполняет поиск в виде указанной выше строки поиска на этом веб-сайте, поэтому ее следует показывать во всех представлениях.Как использовать действие контроллера во всех контроллерах

Я не знаю, что это за механизм. например, если я сделаю действие поиска в виде виджета, это будет не так, потому что результаты поиска будут показаны в той же позиции виджета поиска (вверху сайта).

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

ответ

1

Чтобы повторить ту же функцию поиска повсюду, вам нужно создать виджет. Я коротко объяснил в How a widget works, после чего вы можете прикрепить его ко всем взглядам, которые вы хотите.

Если вы не имеете ни малейшего представления, чтобы начать, проверить это: Yii ESearch

Вот некоторые ссылки, которые были бы полезны:

how-to-use-a-widget-as-an-action-provider

actions-code-reuse-with-caction/

Yii Widget

+0

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

+1

Эта ситуация должна иметь гибкость в обращении. Вы можете передать в свой виджет поиска селектор (например, id) тега html (такой div), где вы хотите отобразить результат поиска, каждый раз нажимается кнопка поиска, она запрашивает ajax, извлекает результат поиска и помещает их все в переданный селектор. –

+0

Я хочу показать результаты на странице с результатами, можно ли их опубликовать? – Mohammad

1

Если вы хотите добавить что-то ко всем представлениям n вы должны добавить его в макет. По звукам этого вам вообще не нужно использовать виджет, хотя это, вероятно, поможет в ремонте кода.

Вы никогда не упомянули требование для ajax, так что держите его простым и не используйте. Когда кто-то входит в поиск и нажимает кнопку «Отправить» (или нажимает «возврат»), форма отправляется в SearchController. Таким образом, нет необходимости иметь действие поиска в каждом контроллере.

Если вам особенно нужно одно и то же действие в каждом контроллере, тогда создайте базовый класс контроллера с этой функцией в нем и наследуйте его, чтобы создать все остальные контроллеры.

Смежные вопросы