Здравствуйте! Сегодня хотелось бы поделиться способом создания 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