Modx TV multi select 列表未保存值

Modx TV multi select list not saving values

我有一个正在评估片段的 TV multi select 列表类型:

@EVAL return $modx->runSnippet('getFeaturedResourceTree');

正在评估这个片段:

<?php
$output = array();

$context = $modx->resource->get('context_key'); 

$sql = "select * from modx_site_content where context_key = '$context' order by `pagetitle`;";

$results = $modx->query($sql);

foreach($results as $result){

    $output[] = $result['pagetitle'].'=='.$result['id'];

}

$output = implode('||', $output);

echo  $output;

return;

这在管理器中确实有效,我可以 select 并在列表中选择多个资源。但是,当我保存电视时,实际上什么也没有保存。数据库中不存在 TV 值,当我重新加载资源时,TV 字段为空白。

这里可能是什么问题?

我相当确定您可以使用 @SELECT 绑定而不是 @EVAL 来完成您想要做的事情。这有两个潜在的好处:

  1. @EVAL 是邪恶的,哈哈。请注意,并非所有时候都可以使用 @EVAL,但我个人总是非常努力地寻找替代方案,每当我考虑使用 @EVAL 时。
  2. 我将向您展示的方法过去对我有用,所以我推测它对您也有用。

    @SELECT pagetitle, id FROM modx_site_content WHERE context_key = 'web' ORDER BY `pagetitle`

如果您使用 @EVAL 因为您有多个上下文并且您想要当前正在编辑的资源的上下文,那么您可以使用您的代码段,但我会尝试:

  1. 而不是回显你的输出,return它。
  2. 调用块中的代码片段,并在测试页上呈现块以确保它具有您想要的输出,完全按照电视输入选项的格式进行格式化。
  3. 如果 Chunk 输出通过测试,则使用 @CHUNK 绑定将其调用到 TV Input Options 字段中。

请注意:我不记得当前资源在电视中是否可用 $modx->resource$resource,但您可能需要仔细检查一下。