Есть форма поиска, которая дергает данные не только с БД. Но суть не в этом. Все данные этой формы передаются ввиде массивов. То есть в строку запроса уходит нечто вроде
index.php?Mass[param1]=value1&Mass[param2]=value2
Так вот, после вывода результатов этой формы нужно поставить пейджинг, все бы хорошо использовать виджет CLinkPager, но после прохождения метода createUrl ссылки приобретают вид
index.php/Mass[param1]/value1/Mass[param2]/value2
Соответственно возникает ошибка в контроллере, так как массив $_GET[Mass][param1] - пустой, зато появился $_GET[Mass[param1]] (это предположение). Как нормализовать работу с помощью UrlManager, может какие-то правила прописать. Но параметров у формы очень много.
Формирование URL в CLinkPager
-
- Сообщения: 1428
- Зарегистрирован: 2009.08.20, 22:54
- Откуда: Молдова, Бельцы
- Контактная информация:
Re: Формирование URL в CLinkPager
CUrlManager + urlFormat
-
- Сообщения: 350
- Зарегистрирован: 2009.09.17, 16:47
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Формирование URL в CLinkPager
Скорее всего это из-за того, что в конфиге у и тебя 'urlFormat' => 'path'. Попробуй в контролере или в нужном методе CUrlManager::setUrlFormat('get');
Предупрежден - значит вооружен.
devKP.ru
devKP.ru
Re: Формирование URL в CLinkPager
Хороший совет, приду на работу - попробую. 'urlFormat' => 'path' - это однозначно стоит для ЧПУ.
Спасибо.
Спасибо.
Re: Формирование URL в CLinkPager
Попробовал предложенное решение, но оно не помогло. После того, как я добавил следующий код в метод контроллера:
Сама страница с формой приобрела URL с GET-видом. То есть "site.ru/?r=search", но ссылки на другие страницы так же остались в 'path' - формате. Причем, если поменять значение urlFormat в конфиге сайта, тогда пейджинг генерирует GET-ссылки. То есть нужно копать в том же направлении...
Код: Выделить всё
$url_manager = new CUrlManager;
$url_manager->setUrlFormat('get');
Re: Формирование URL в CLinkPager
Окончательно разобрался. Метод работает нормально, только его нужно было вызывать через статический класс Yii.
Таким образом, мы обратились к CUrlFormat а потом к его методу setUrlFormat. И значение 'get' корректно записалось в свойство $_urlFormat.
Если же делать так, как прежде предлагали:
Тогда при выполнении метода:
Нарываемся на исключение, так как обращение к свойству $_urlFormat идет через $this, а он, в свою очередь, является ссылкой на объект от нашего контроллера, который сейчас работает.
Код: Выделить всё
Yii::app()->getUrlManager()->setUrlFormat('get');
Таким образом, мы обратились к CUrlFormat а потом к его методу setUrlFormat. И значение 'get' корректно записалось в свойство $_urlFormat.
Если же делать так, как прежде предлагали:
Код: Выделить всё
CUrlManager::setUrlFormat('get');
Код: Выделить всё
public function setUrlFormat($value)
{
if($value===self::PATH_FORMAT || $value===self::GET_FORMAT)
$this->_urlFormat=$value;
else
throw new CException(Yii::t('yii','CUrlManager.UrlFormat must be either "path" or "get".'));
}