更快地从相关对象填充表单中的modx占位符?

时间:2014-12-10 18:50:24

标签: php modx modx-revolution xpdo

我在数据库中有几个相关对象,我需要从同一个表单更新。它是一个与联系对象VIA 1:1关系相关的简单地址对象。

我可以发誓当我一次检索对象时,我在一个$ object-> toArray()调用中设置了所有占位符,但似乎不再是这种情况了。 [我不确定发生了什么变化]

以下是我现在正在做的事情,这确实有效:

$thisEntity = $this->modx->getObject('Entities', array('id' => $entity, 'token' => $token));

$entityData = $thisEntity->toArray();

// extra lines
$entityContacts = $thisEntity->EntityContact->toArray();

foreach($entityContacts as $key => $value){
    $entityData[$key] = $value;
}
// extra lines


$this->modx->setPlaceholders($entityData, 'fi.');

我确信在某一点上我没有使用额外的行并填写了表单,但不是如何。

是否有更简单的方法可以在一步中从Entities对象和EntityContact对象填充占位符数组[$ entityData]?

3 个答案:

答案 0 :(得分:1)

你很亲密。

使用modUser作为单个对象表示的示例:

$modx->toPlaceholders($modx->user->toArray(), 'user');

如果要检索信息集合,占位符在块外是一个坏主意。

相反:

$out='';
if ($collection){
    foreach ($collection as $object){

        if (is_object ($object) && $object instanceof someclass){
            $out .= $modx->getchunk('chunkName', $object);
        }
    }
}

return $out;

$modx->toPlaceholder($out, 'somename');

答案 1 :(得分:-1)

我猜不是。您可以使用array_merge作为示例,也可以创建自定义查询,为您提供摘要数据。

答案 2 :(得分:-2)

不能给你一个工作的例子因此缺乏我的经验,但是:

  • 使用描述here的toArray()选项。 (您的数据是懒惰的还是相关的?)

  • 在第一次调用后转储对象并在此处发布结构,以便我们可以看到并找出发生的情况。

  • modx forums上的这个类似帖子也可能会有所帮助。

  • 最后,toArray()源位于blob下的github - >主人 - >核心 - > xpdo - > om - > xpdoobject.class.php / cant发布第三个链接:)/