Последнее обновление: 10.02.2013 в 21:16
Подпишись на RSS
rss Подпишитесь на RSS, чтобы всегда быть в курсе событий.

Комментарии

Присоединяйтесь к обсуждению
  • Евгений: Доброго времени суток. Кто-то подскажет, как правильно настроить вывод мета-тэгов в результатах поиска. На...
  • Евгений: Доброго времени суток. Возник вопрос по специфике движка SilverStripe. Есть основное зеркало сайта вида...
  • Вадим: Спасибо помогло, сделал так date_timezone = Europe/Kiev
  • John Doe: Не помогло, шаблон все ровно всегда такой же как у главной страницы ((
  • Алексей: Здравствуйте. Спасибо за статью. Собираюсь осваивать MODx (сейчас сижу на WP) и статья очень пригодилась!...
25 Март 2011 · MODx, о работе

Проанализировав то, по каким запросам люди приходят на мой сайт, возникла идея написать пост на тему, что нужно сделать в MODx сниппете, что бы получилось как в evo. Раз возникла идея её надо реализовывать В этой статье я постараюсь не лезть в глубины xPDO т.к сам не особо разобрался с ним. Это будет взгляд на [...]


7 Июль 2010 · о работе

При работе над одним из достаточно долгосрочных проектов меня возникла необходимость сохранять  данные в виде файлов, которые можно было бы правит в Экселе и в последствии заливать обратно на сервер.Первым, что пришло на ум в данной ситуации был формат CSV. Просто и со вкусом, но в связи с достаточно сложной структурой которую приходилось бы хранить [...]


27 Февраль 2011

AJAX на MODx

Рубрика: MODx, о работе. Метки: , ,
Vote This Post DownVote This Post Up (+2 rating, 2 votes)
Loading ... Loading ...

Недавно возникла задача получит список записей на MODx Evo с использованием AJAX.Кое-какие замечания по этому поводу далее

Обычно для этих целей я использую нижеследующий код:

<?php
// Setup the MODx API
define('MODX_API_MODE', true);
include_once('index.php');
 $html= $modx->runSnippet('имя сниппета',[массив с параметрами]);
echo $html;
?>

В целом всё достаточно просто.Включаем режим API, подключаем и инициализируем MODx, вызываем нужный сниппет с заданными параметрами, выводим результат на экран.

Но сегодня пришлось вызывать сниппет, который брал данные из чанка, кажется что проще:

// некоторые предварительные действия
return $modx->parseChunk('имя чанка',[список параметров]);

Но к моему удивлению результат оказался пустым. Краткий анализ кода ядра показал, что MODx берёт чанки из переменной chunkCache в которой находятся чанки текущего шаблона в виде пары имя=>тело чанка.
А при таком формате вызова, как указан на первом листинге шаблон у меня пустой и чанков в нем нет, и как следствие функция parseChunk возвращает пустой результат.

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

<?php
// Setup the MODx API
define('MODX_API_MODE', true);
include_once('index.php');
$modx->mergeChunkContent('{{имя чанка}}');
 $html= $modx->runSnippet('имя сниппета',[массив с параметрами]);
echo $html;
?>

Возможно, кому-то это пригодиться и сэкономит кучу времени.

Читайте так же:



  • http://Сайт Maxim

    Не могли бы вы рассказать как это работает, где js код, что это за фаил и куда прописывать? если можно то поподробнее, заранее спасибо!!!

    • http://loom-studio.net Денис

      опишите в личку ситуацию, вероятно так будет быстрее и надежнее

  • Slava

    Я бьюсь с Ajax уже несколько дней, не могу разобраться. Modx Revolution. Сделал все как описано в
    http://wiki.modxcms.com/index.php/Use_AJAX_with_modxAPI, заменил сниппет Ditto на форму логина, но все равно перегружает страницу и открывает в новой. Не поможете? (тестовый сайт на http://z248419.infobox.ru, в верхнем слайдере кнопка runDitto)

    • Slava

      Разобрался… но вот с чем столкнулся,

      В сниппете обработчике пытаюсь по нажатию на кнопку «Забыли пароль?» сгенерить форму для восстановления пароля:runSnippet(‘{{!ForgotPassword}}’); break;
      ?>

      Затем вывожу результат в чанке:

      $.post(document.location.href, {action: action}, function(data) { $(‘#result’).html(data);

      Но результат почему-то — это страница целиком, а не только форма ForgotPassword, не могу понять почему.

      • http://loom-studio.net Denis

        Как выглядит вот эта часть
        document.location.href просто если это ссылка на страницу сайта тогда надо смотреть шаблон

        • Slava

          Я так понимаю, что это ссылка до текущий документ.

          Если я в функции ставлю как-то простой результат, типа:

          $res=»Hello world»,

          тогда

          $.post(document.location.href, {action: action}, function(data) { $(‘#result’).html(data);

          возвращает «Hello world» прямо в нужном месте, но если я ставлю

          $res = $modx->runSnippet(‘{{!ForgotPassword}}’);

          то, почему-то в то же самое место (в тот же самый div) пытается втиснуться целая страница, притом без формы восстановления пароля, т.е. как я понимаю runSnippet не срабатывает.

          Не сталкивались с таким?

          • Slava

            Я разобрался, так как и запрос и обработчик был на одной странице, то ответ приходил от самого себя. Создал отдельный ресурс для обработчика и заработало.

    • Slava

      Разобрался… но вот с чем с толкнулся,

      В сниппете обработчике пытаюсь по нажатию на кнопку «Забыли пароль?» сгенерить форму для восстановления пароля:
      case ‘forgot-pwd’: $res = $modx->runSnippet(‘{{!ForgotPassword}}’); break;

      Затем вывожу результат в чанке:

      $.post(document.location.href, {action: action}, function(data) { $(‘#result’).html(data);

      Но результат почему-то — это страница целиком, а не только форма ForgotPassword, не могу понять почему.

Мы плетем паутину
Создание сайтов для меня это не просто работа, это то, что больше всего мне нравится в этой жизни. Я постояно учусь новому и кое-что попадает на страницы этого блога. Сюда же я выкладываю свои мысли о жизни. Заходите, читайте, спрашивайте.

Счетчик