О том, что фреймворки позволяют сократить время разработки, знают все. Но иногда при этом появляются самые неожиданные ограничения. По-идее, так и должно быть. Каким бы универсальным не пытались сделать фреймворк разработчики, всегда чем-то приходится жертвовать. Точнее искать компромисс между количеством кода, который должен написать пользователь и гибкостью. В этой статье я хочу показать пример такой ситуации, и, естественно, её решение.
UPD: Более удачное решение данной проблемы приведено в комментариях. Не так давно я опубликовал статью Yii PHP фреймворк: создаем поле с автозаполнением, в которой рассказывал об использовании виджета CAutoComplete. Алгоритм его работы довольно прост. 1) Создать текстовое поле (тег input). 2) Подключить плагин jQuery Autocomplete и файлы CSS стилей. 3) Подключить плагин к текстовому полю. При этом, все настройки виджета CAutoComplete задаются при его подключении в PHP массиве. Т. к. основную работу выполняет Autocomplete, то логично было бы предположить, что в настройках виджета можно задать все параметры этого плагина. Для большинства параметров, так оно и есть, но с параметром extraParams возникли проблемы.
В документации сказано.
Extra parameters for the backend. If you were to specify {bar:4}, the autocompleter would call my_autocomplete_backend. php? q=foo&bar=4 (assuming the input box contains “foo”). The param can be a function that is called to calculate the param before each request.
Дополнительный параметр для бэкенда. Если вы указали {bar:4}, плагин отправит запрос my_autocomplete_backend. php? q=foo&bar=4 (предполагается, что текстовое поле содержит текст “foo”). Параметр может быть функцией, которая вызывается чтобы рассчитать значение параметра перед отправкой каждого запроса.
Т. е. вы можете задать настройки для CAutoComplete следующим образом.