【问题标题】:modx revo ajax call don't execute snippet inside chunkmodx revo ajax 调用不执行块内的片段
【发布时间】:2014-09-08 05:26:28
【问题描述】:

我有一个 ajax 调用。我想在这个 ajax 调用中得到一个块。在这个块中,它包含一个 sn-p。

我的块看起来像:

<div > this is the content [[!mySnippet]] </div>

好像没有执行sn-p。 It returns this is the content [[!mySnippet]] 并没有执行 sn-p。

我试过getChunk(), parseChunk() 似乎不起作用。 我有很多块,所以我不想为每个块创建资源。有什么办法吗?

谢谢, 奥拉德

【问题讨论】:

    标签: modx modx-revolution


    【解决方案1】:

    str_replace('[[!mySnippet]]', $snippetData, $chunkHtml); - 将是一个临时解决方案,但如果您将来需要完整解析所有 modx 标签和输入/输出过滤器,我建议您使用此代码:

    // your chunk
    $msg = "<div > this is the content [[!mySnippet:empty=`no data`]] </div>";
    
    // Parse all MODX tags in results
    $maxIterations = (integer) $modx->getOption('parser_max_iterations', null, 10);
    $modx->getParser()->processElementTags('', $msg, false, false, '[[', ']]', array(), $maxIterations);
    $modx->getParser()->processElementTags('', $msg, true, true, '[[', ']]', array(), $maxIterations);
    
    // output result as example
    print $msg;
    

    【讨论】:

    【解决方案2】:

    您是在 ajax 中调用自定义端点还是 modx 页面?如果它是一个像 php 页面这样的自定义端点,则需要包含 modx index.php 并在 API_MODE 中运行它(请参阅此页面以了解说明:http://rtfm.modx.com/revolution/2.x/developing-in-modx/other-development-resources/loading-modx-externally)。

    在你包含 modx 之后,你将能够执行 $modx->runSnippet('mySnippet'),但你必须修改块,因为执行 $modx->getChunk('yourChunk') 不会执行里面的任何sn-ps。如果你想使用相同的块,你可以像这样自己解析它;

    $snippetData = $modx->runSnippet('mySnippet');
    $chunkHtml = $modx->getChunk('yourChunk');
    $finalOutput = str_replace('[[!mySnippet]]', $snippetData, $chunkHtml);
    

    【讨论】:

    • 我添加了 index.php 并且我有全局 modx 对象。我最初的方法是不使用 runSnippet。但似乎我现在必须使用 runSnippet。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多