AJAX загрузка

Если нужно загрузить страницу, посредством ajax, то сделать это просто. Для этого надо создать сниппет с именем, например, ajaxLoadingContent. Туда записываем код:

$res = $modx->getObject('modResource',$_REQUEST['id']);
$chunkName=$_REQUEST['chunk']; // получаем имя чанка

$resid_int = $_REQUEST['id']; // айдишник ресурса
$tvs = array();

$tv_query = $modx->newQuery('modTemplateVarResource');
$tv_query->leftJoin('modTemplateVar','modTemplateVar',array("modTemplateVar.id = tmplvarid"));
$tv_query->where(array('contentid'=>$resid_int));
$tv_query->select($modx->getSelectColumns('modTemplateVarResource','modTemplateVarResource','',array('id','tmplvarid','contentid','value')));
$tv_query->select($modx->getSelectColumns('modTemplateVar','modTemplateVar','',array('name')));
$tvars = $modx->getCollection('modTemplateVarResource',$tv_query);

foreach ($tvars as $tvar) {
    $tvar = $tvar->toArray();
    if (!empty($tvar['value']))
        $tvs[$tvar['name']] = $tvar['value'];
}  

// выводим   
echo $modx->getChunk($chunkName,$res->_fields+$tvs);

Сейчас создадим шаблон, например, ajax-content, для страницы, с которой будут приходить данные. В этом шаблоне просто добавим вызов нашено сниппета:

[[!ajaxLoadingContent]]

Теперь создадим страницу, на которую скрипт будет отправлять айдишник ресурса и имя чанка. Тут ВАЖНО выбрать созданный ранее шаблон для этой страницы, в нашем случае ajax-content.

Далее создаём ссылку, по которой будет загружаться наша страница:

<a> dataId="19" chunkName="chunkForAjaxLoadContent" onclick="linkClickAjax(this); return false;" href="about.html">страница обо мне</a>

Тут dataId - это ID ресурса, который должен загрузиться, chunkName - это имя чанка, в котором будет обрабатываться страница, которую будем загружать. В атрибуте onclick функция, которая сработает при клике, по этой ссылке.

Собственно сама функция:

var linkClickAjax = function(el){ 
	$('#rightCol').html('Идет загрузка данных...');
	$.post( 
		"/ajax-content.html", // страница, с которой забрать нужные данные
		{
			id: $(el).attr('dataId'), // получаем ID ресурса, который должен быть загружен
			chunk: $(el).attr('chunkName') // получаем имя чанка, по которому он должен быть обработан
		}, 
		function(data) { 
		    $('#rightCol').html('');
		    // когда данные получины, записываем их в нужный блок
			$('#rightCol').html(data);
		}
	);
};



Страница, которая будет загружаться через ajax

Вверх