0

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

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

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

但是,我知道这将完全占用系统,因为可能有数百个字段,因此必须多次查询表。

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

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

4

2 回答 2

2

您可以对此采取另一种方法。

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

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

看这个教程

所以,你要做的是:

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

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

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

// 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);
于 2013-08-28T19:34:11.753 回答
1

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

于 2013-08-30T06:23:46.237 回答