Здравствуйте! Сегодня хотелось бы поделиться способом создания ajax ссылок в Yii. Зачастую бывает, что кроме самого функционала ajax ссылки необходимо проставить соответствующие адреса, для более правильной индексации поисковиками.
Давайте представим, что у нас есть какое-то меню рубрик товаров. Например меню состоит из 3х пунктов «Цветы, горшки, земля» и мы решили сделать эти ссылки посредством ajax т.е. при нажатии на «Горшки» у нас в блоке контента появляются горшки без перезагрузки страницы. Код подобной ссылки будет примерно следующий:
CHtml::ajaxLink('Горшки',array('site/index'), array( 'type' => 'POST', 'data'=>array('type'=>'1'), 'success' => " function(html){ $('#content').html(html);}", ));?>
Таким образом в блоке content у нас появится результат выполнения запроса к экшену index, но в таком случае получается, что ссылки на горшки и на цветы в нашем меню будут выглядеть одинаково, что не очень хорошо для поисковых роботов.
Поэтому для того, чтобы при наведении на ajax ссылку, у нас отображалась своя ссылка можно воспользоваться параметром href в htmlOptions. Теперь код ajax ссылки в Yii будет выглядеть так.
<?echo CHtml::ajaxLink('Горшки',array('site/index'), array( 'type' => 'POST', 'data'=>array('type'=>'1'), 'success' => " function(html){ $('#content').html(html);}", ),array('href' => Yii::app()->createUrl('site/index', array('type'=>'1'))));?>
Теперь при наведении на ajax ссылку у нас будет отображаться необходимый URL адрес.
Давайте пойдем дальше и представим, что наш пользователь захотел поделиться ссылкой на горшки с другом, а в адресной строке браузера ссылка остается неизменной при перемещении по рубрикам. В таком случае воспользуемся функцией js history.pushState.
Вкратце что она делает. Она меняет адрес страницы без перезагрузки, что нам очень подходит в рамках ajax ссылок. Принимает 3 параметра. Первый это переменная состояния, второй это заголовок этой ссылки в истории (устарело), адрес для адресной строки.
В результате должно получиться примерно следующее.
<?echo CHtml::ajaxLink('Горшки',array('site/index'), array( 'type' => 'POST', 'data'=>array('type'=>'1'), 'success' => " function(html){ $('#content').html(html); history.pushState(null,null,'".Yii::app()->createUrl('site/index',array('type'=>'1'))."');}", ),array( 'href' => Yii::app()->createUrl('site/index',array('type'=>'1'))));?>comments powered by HyperComments