【问题标题】:Faster way to populate modx placeholders in a form from related objects?从相关对象以表单填充 modx 占位符的更快方法?
【发布时间】:2014-12-10 18:50:23
【问题描述】:

我在数据库中有几个相关的对象,我需要从同一个表单进行更新。它是一个与联系人对象 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]?

【问题讨论】:

    标签: php modx modx-revolution xpdo


    【解决方案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');
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        • 在第一次调用后转储对象并在此处发布结构,以便我们查看并找出发生了什么。

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

        • 最后 toArray() 源位于 github 下的 blob -> master -> core -> xpdo -> om -> xpdoobject.class.php /cant post a third link :)/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-05-28
          • 2013-01-27
          • 2011-06-22
          • 2016-10-29
          • 2015-05-08
          • 2017-02-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多