Получить данные MigX через ajax

Добрый день!
Нужна помощь с получением TV параметра при загрузке через Ajax
Вывожу данные ресурса через Ajax следующим методом.
<?php
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 = isset($_POST['id']) ? (int) $_POST['id'] : 0;
        if (empty($id)) {
            exit();
        };
        $object = $modx->getObject('modResource',$id);
	      $output = array();
        $output['content'] = $object->get('content');
      	$output['pagetitle'] = $object->get('pagetitle');
      	$output = json_encode($output);
        $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);
JS
$(document).on('click','a.read-more',function(e){
      e.preventDefault();
      var id = $(this).data('id') || 0;
      $("#content").load("/assets/ajax.php",{action:"getContent",id:id}, function(response){
        if (response) {
          var data = eval("(" + response + ")");
          $('#content').html(data.content);
          $('#modal-title').html(data.pagetitle);
          $("#mymodal").modal('show');
        }
      });
    });
С выводом обычных TV проблем нет. но не могу разобраться как получить данные из MigX?
nephania
13 июня 2022, 07:40
modx.pro
862
0

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

Артур Шевченко
13 июня 2022, 11:43
+2
$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);
А зачем так сложно? Почему не
$modx->parseChunk();
А migx хранится в json, получить его можно как любую другую твшку
$res = $modx->getObject('modResource', 8);
$migx = $res->getTVValue('test');
print_r(json_decode($migx,1));
    vectorserver
    14 июня 2022, 12:44
    0
    Вместо "MIGX_TV" укажи свой TV.
    <?php
    if ($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest' || empty($_REQUEST['action'])) {exit();}
    
    $action = $_REQUEST['action'];
    
    /* @global $modx*/
    define('MODX_API_MODE', true);
    require_once dirname(dirname(__FILE__)).'/index.php';
    $modx->getService('error','error.modError');
    $modx->setLogLevel(modX::LOG_LEVEL_FATAL);
    
    $output = array();
    
    switch ($action) {
        case 'getContent':
            $id = isset($_POST['id']) ? (int) $_POST['id'] : 0;
            if (empty($id)) {
                exit();
            };
            $object = $modx->getObject('modResource',$id);
            $output['content'] = $object->get('content');
            $output['pagetitle'] = $object->get('pagetitle');
    
            $output['MIGX_TV'] = json_encode($object->getTVValue('MIGX_TV'),true);
    
            $output = json_encode($output);
            break;
        default:
            $output = array("st"=>"error");
    }
    
    header('Content-Type: application/json; charset=utf-8');
    echo json_encode($output);
      nephania
      15 июня 2022, 15:40
      0
      Вообще перестало что-либо выводить.
      Выводит все вот так.
      "pagetitle\":\"\\u041a\\u043e\\u0440\\u043e\\u0431\\u043a\\u0430-\\u0441\\u044e
      А MigX выводит вот так
      [{\\\\\\\"MIGX_id\\\\\\\":\\\\\\\"1\\\\\\\",\\\\\\\"image\\\\\\\":\\\\\\\"l3d5rthre4.jpg\\\\\\\",\\\\\\\"deleted\\\\\\\":\\\\\\\"0\\\\\\\",\\\\\\\"published\\\\\\\":
      Возможно нужно править JS =(
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      3