Загрузка ресурса через AJAX

Добрый день!

Ситуация следующая…

Есть каталог ресурсов которые выводятся через pdoResources.

Мне необходимо сделать так, чтобы при клике на любой ресурс каталог исчезал и на его месте (в этом же контейнере) загружался ресурс через AJAX, без перезагрузки.

Нашел код который подгружает только описание ресурса ( текст)
<?php
// Если запрос не AJAX или не передано действие, выходим
if ($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest' || empty($_REQUEST['action'])) {exit();}

$action = $_REQUEST['action'];

define('MODX_API_MODE', true);
require_once dirname(dirname(__FILE__)).'/index.php';

$modx->getService('error','error.modError');
$modx->getRequest();
$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
$modx->setLogTarget('FILE');
$modx->error->message = null;

$output = '';
switch ($action) {
    case 'getContent':
        // Если не передан id страницы, тоже выходим
        $id = isset($_REQUEST['id']) ? (int) $_REQUEST['id'] : 0;
        if (empty($id)) {
            exit();
        };

        $object = $modx->getObject('modResource',$id);
        $output = $object->get('content');
        // Парсим теги MODX
        $maxIterations= (integer) $modx->getOption('parser_max_iterations', null, 10);
        $modx->getParser()->processElementTags('', $output, false, false, '[[', ']]', array(), $maxIterations);
        $modx->getParser()->processElementTags('', $output, true, true, '[[', ']]', array(), $maxIterations);
}


@session_write_close();
exit($output);
ну и сам скрипт который вешается на ссылку по клику

$(document).on('click','.read-more',function(e){
	e.preventDefault();
	var id = $(this).data('id') || 0;
	// Вставляем полученный контент в HTML блок с id="content"
	$("#content").load("/assets/ajax.php",{action:"getContent", id:id});
});

Вопрос как добавить (в этот код или новый) вывод TV и pagetitle ресурса?

Заранее спасибо!
Алексей
23 января 2019, 15:02
modx.pro
1
1 174
0

Комментарии: 4

Наумов Алексей
23 января 2019, 16:11
0
$id = isset($_REQUEST['id']) ? (int) $_REQUEST['id'] : 0;
if (empty($id)) {
    exit();
};

$resource = $modx->getObject('modResource', $id);

// ресурс есть, он опубликован и не удален
if(!$resource || !$resource->get('published') || $resource->get('deleted')) {
    exit();
}
// еще бы проверку добавить, что это товар, а не какая-либо другая страница

$data = $resource->toArray();
$data['some_tv'] = $resource->getTVValue('some_tv');

return $modx->getChunk('ВАШ_ЧАНК_С_HTML', $data);
    Алексей
    23 января 2019, 16:57
    0
    изменил с учетом Вашего кода и теперь вообще пустота загружается

    <?php
    // Если запрос не AJAX или не передано действие, выходим
    if ($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest' || empty($_REQUEST['action'])) {exit();}
    
    $action = $_REQUEST['action'];
    
    define('MODX_API_MODE', true);
    require_once dirname(dirname(__FILE__)).'/index.php';
    
    $modx->getService('error','error.modError');
    $modx->getRequest();
    $modx->setLogLevel(modX::LOG_LEVEL_ERROR);
    $modx->setLogTarget('FILE');
    $modx->error->message = null;
    
    $output = '';
    switch ($action) {
        case 'getContent':
            // Если не передан id страницы, тоже выходим
            $id = isset($_REQUEST['id']) ? (int) $_REQUEST['id'] : 0;
            if (empty($id)) {
                exit();
            };
    
            $resource = $modx->getObject('modResource', $id);
            if(!$resource || !$resource->get('published') || $resource->get('deleted')) {
        exit();
    }
    $data = $resource->toArray();
    $data['tovar_big_image'] = $resource->getTVValue('tovar_big_image');
    
    }
    return $modx->getChunk('trade_item_small', $data);
      Петр Синечёв
      23 февраля 2019, 22:27
      0
      Прям интересно, как это должно работать
      vectorserver
      23 января 2019, 18:43
      0
      Вот у меня так в десктопной версии golodnaya-panda.ru/shop/ тебе так нужно?
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        4