We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 22864
    • 6 Posts
    Может быть кому пригодится...

    Вобщем озадачился проблемой, как сделать сайт который будет работать и с аяксом и без него... путём решения было использовать 1 страничку как прокси для аякса - но проблема. как получить отпарсеный документ в нужном шаблоне? (пустым шаблоном определяем что вообще выводить, например [*content*] или tv...)

    Решение в аттаче, класть в корень сайта. (чуть чуть модифицировал чужой код, даже копирайты не попрвил)

    Пример:

    $path = dirname($_SERVER[’SCRIPT_FILENAME’]).’/’;
    include_once($path.’modxapi.php’);

    //10 - айдишник темплейта который применять к документу
    define(’AJAX_TEMPLATE_ID’,’10’);
    $modx = new MODxAPI();
    $html = $modx->executeDocument($айдишник_документа);
    echo $html;


    минусы: не работает кеширование запрошенной страницы .т.к. страничка кешируется вместе с шаблоном
    плюсы: задача сделана, ядро модХ не тронуто
    Надеюсь кому то будет полезно
      • 31727
      • 3 Posts
      А можно по подробнее написать как это использовать?
        • 22864
        • 6 Posts
        1) Создаём шаблон - прокси, назовём его, допустим "ajaxproxy"
        выводить шаблон будет только это:

        [!ajax!]

        2) Создаём пустую служебную страничку, применим к ней этот шаблон, и запомним её айдишник

        3) создаём сниппет ajax :

        //в $path запишем полный путь до папки где у нас лежит index.php MODx’а
        $path = dirname($_SERVER[’SCRIPT_FILENAME’]).’/’;

        // в корне рядом с index.php положим приаттаченный modxapi.php
        // подключим его
        include_once($path.’modxapi.php’);

        // создадим ещё 1 шаблон, назовём его, допустим, ajaxcontent, и ему присвоится ID 10
        // например, шаблон выводит [*content*] или [*sometvvariable*] нужного нам документа
        define(’AJAX_TEMPLATE_ID’,’10’);

        // создаём объект
        $modx = new MODxAPI();
        //и получаем вывод парсера, в $id нужно записать айдишник нужной странички
        $html = $modx->executeDocument($id);
        return $html;


        Например, у меня вот так выводятся контент, и дополнительная переменная любой странички в нужном мне пустом шаблоне, причём по своей обычной ссылке она открывается в том шаблоне, который установлен у нее в свойствах

        <?php
        if (isset($_GET[’content’])){
        $path = dirname($_SERVER["SCRIPT_FILENAME"]).’/’;
        include_once($path.’modxapi.php’);
        $modx2 = new MODxAPI();
        define(’AJAX_TEMPLATE_ID’, cool;
        $html = $modx2->executeDocument((int)$_GET[’pageId’]);
        return $html;
        }

        if (isset($_GET[’menu’])){
        $path = dirname($_SERVER["SCRIPT_FILENAME"]).’/’;
        include_once($path.’modxapi.php’);
        $modx2 = new MODxAPI();
        define(’AJAX_TEMPLATE_ID’, 9);
        $html = $modx2->executeDocument((int)$_GET[’pageId’]);
        return $html;
        }
        ?>

        Вызов:
        //если id странички из пункта 2 - id=24, то аяксовый вызов любой странички будет такой

        index.php?id=24&content=1&pageId=2 - выведет ОБРАБОТАННЫЙ контент документа с id=2

        а

        index.php?id=24&menu=1&pageId=2 - выведет ОБРАБОТАННОЕ содержимое TV-переменной документа с id=2

        из html это можно использовать так: забиндим на клик по всем тегам <a> из нужной нам области свою функцию, если ссылки выглядят как <a href="?id=123">...</a> берём её хреф, регекспом находим значение id, и аяксом грузим ссылку навроде "index.php?id=24&conten=1&pageId=123"
        тоесть, если яваскрипт выключен, сайт у нас будет работать как обычно, а если включен то с аяксом
          • 31727
          • 3 Posts
          Всё делал точно по пунктам, не работает. При попытке вызвать из строки запроса страницу аяксом, апач просто вылетает. Modx ver 1.0.5
            • 22864
            • 6 Posts
            В аттаче фйлик нзывается чуть чуть по другому, чем в инклюде.
            Включи еррор репортинг
            (в .htaccess
            php_value display_errors On
            php_value error_reporting E_ALL
            )
              • 38778
              • 5 Posts
              А где приаттаченный файлик или я слеп?
                • 785
                • 2,113 Posts
                Вообще про MODx и AJAX - есть разные варианты:
                https://forums.modx.com/thread/59307/modx-1080-ajax
                Возможно, добавлять файл в корень сайта - не лучшее решение.
                  Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                  Статьи о MODx, регулярно новые публикации
                  • 38778
                  • 5 Posts
                  Может кто-нибудь подскажет решение. Подгружаю через ajax страницы на evo 1.05, все парсится (чанки, сниппеты, плейсхолдеры через [++]) но TV нет. вот собственно код:
                  <?php
                  require_once(MODX_MANAGER_PATH . '/includes/protect.inc.php');
                  if (!defined('MODX_API_MODE')) {
                  define('MODX_API_MODE', false);
                  }
                  include_once(MODX_MANAGER_PATH.'/includes/document.parser.class.inc.php');
                  $modx_cache_disabled= true;
                  $modx = new DocumentParser();
                  $modx->db->connect();
                  $modx->getSettings();


                  $doc = $modx->getDocument($_REQUEST['id']);
                  $modx->toPlaceholders($doc,'');
                  $output = $doc['content'];
                  if (strpos($output, '[!') > -1) {
                  $output = str_replace('[!', '[[', $output);
                  $output = str_replace('!]', ']]', $output); }

                  $output = $modx->parseDocumentSource($output);
                  echo $output;

                  ?>
                    • 38778
                    • 5 Posts
                    <?php
                    require_once(MODX_MANAGER_PATH . '/includes/protect.inc.php');
                    if (!defined('MODX_API_MODE')) {
                        define('MODX_API_MODE', false);
                    }
                    include_once(MODX_MANAGER_PATH.'/includes/document.parser.class.inc.php');
                    $modx_cache_disabled= true;
                    $modx = new DocumentParser();
                    $modx->db->connect();
                    $modx->getSettings();
                    
                    
                    $doc = $modx->getDocument($_REQUEST['id']);
                    $modx->toPlaceholders($doc,'');
                    $output = $doc['content'];
                    
                    if (strpos($output, '[!') > -1) {
                    $output = str_replace('[!', '[[', $output);
                    $output = str_replace('!]', ']]',
                    $output); }
                    $output = $modx->parseDocumentSource($output); echo $output; ?> [ed. note: c4azmartin last edited this post 14 years, 8 months ago.]
                      • 37420
                      • 10 Posts
                      Quote from: c4azmartin at Feb 22, 2012, 01:29 AM
                      А где приаттаченный файлик или я слеп?
                      Присоединяюсь к вопросу. А где прикрепленный файл?
                      Прикрепите пожалуйста повторно!