Master Snippet控制其他动态片段

时间:2013-08-28 17:03:16

标签: php modx modx-evolution modx-resources

我正在开发一个项目,允许将大量数据导入ModX网站。

有了这个,我需要能够显示导入字段中的数据,但需要能够允许客户端将每个字段放在他们希望在内容资源中显示的位置。 / p>

所以,我的想法是创建单独的片段,每个片段只能拉出单个字段。

但是,我知道这对系统来说是一次彻底的麻烦,不得不多次查询表格,因为可能有数百个字段。

如何创建一个可以提取所有字段的“主代码段”,但我仍然可以像片段一样使用它们?

例如......一次抓取Rec1Field1, Rec1Field2, Rec1Field3, Rec1Field4,但能够在内容资源中使用它们,如[[Rec1Field1]],[[Rec1Field2]],[[Rec1Field3]],[[Rec1Field4] ]

2 个答案:

答案 0 :(得分:2)

你可以采取另一种方法。

在Modx中,您有一个名为$modx->getChunk的函数,它允许您使用占位符获取块,并提供一个包含与占位符匹配的键的数组。然后,这些占位符将被键的值替换。

这显然不是你想要的,但已经存在一个如何使用解析占位符的字符串的工作示例。

See this tutorial

所以,你做的是:

  1. 允许您的客户将占位符放在他们想要的内容字段中。
  2. 在要显示内容的模板中,调用自定义代码段,例如:

    [[parse_content_with_placeholders? & content =`[[* content]]`]]

  3. 在此代码段中,您可以执行以下操作:

    // Properties
    $props = array('Rec1Field1' => 'Foo','Rec1Field2' => 'Bar');
    
    // Create the temporary chunk
    $uniqid = uniqid();
    $chunk = $modx->newObject('modChunk', array('name' => "{tmp}-{$uniqid}"));
    $chunk->setCacheable(false);
    
    $output = $chunk->process($props, $content);
    

答案 1 :(得分:1)

另一种方法是在您的代码段中使用$modx->setPlaceholders(array('placeholder'=>'value', ...));,这将生成可在模板中的任何位置访问的占位符或通过简单[[+placeholder]]生成的嵌套块。这将允许用户将标记放在内容丰富的文本中或他可能想要的任何地方,而无需进行字符串解析或打扰复杂的块。