猜猜我的问题与这个问题密切相关:片段在页面上多次使用时会重复内容
我的问题的要素如下...
$modx->loadedResources : 一个(空)数组,通过页面加载时的片段注册在主 $modx 对象中。该数组包含从数据库中随机获取的资源的资源 ID,因此同一资源不会在同一页面上显示两次。
loadRandomResource:使用 XPDO 样式查询从数据库加载随机资源的片段。它用于
$modx->parseChunk()
用资源数据填充块中的占位符。每次调用时,它都会将要获取的已获取资源的 id 附加到$modx->loadResources
数组中。
每次我获取一个新的随机资源时,我都使用了一些调试来检查资源 id 是否正确存储在我的数组中,这恰好是这种情况。然后,我每次调用 loadRandomResource 片段时检查数据库是否返回不同的结果,并且确实如此。我还可以确认它不会返回重复的结果(我在 XPDO 查询中排除了已加载的资源 ID)。
但是,当在整个页面模板中的 3 个不同位置调用代码段时,所有 3 个代码段调用都会渲染相同的资源,这很奇怪,因为我的调试显示正在从数据库加载唯一数据,并发送到块进行渲染.
请在下面找到代码段以及块标记。有没有人有任何想法?任何帮助深表感谢!
loadRandomResource 片段
$criteria = $modx->newQuery('modResource');
$criteria->select(array('id','pagetitle'));
$criteria->sortby('RAND()');
$criteria->limit(1);
$whereOptions = array(
'parent' => 2,
'deleted' => false,
'hidemenu' => false,
'published' => true
);
if (!empty($modx->loadedResources)) {
$whereOptions['id:NOT IN'] = $modx->loadedResources;
}
$criteria->where($whereOptions);
$resources = $modx->getCollection('modResource', $criteria);
$output = '';
foreach ($resources as $resource) {
$fields = $resource->toArray();
$fields['tv.tvPersonalPicture'] = $resource->getTVValue('tvPersonalPicture');
$fields['tv.tvJobTitle'] = $resource->getTVValue('tvJobTitle');
$output .= $modx->parseChunk('cnkTeamListItem', $fields);
$modx->loadedResources[] = $fields['id'];
}
return $output;
cnkTeamListItem 块
<div>
<img src="[[+tv.tvPersonalPicture]]" alt="[[+pagetitle]]" />
<h2>[[+pagetitle]]<br /><span>[[+tv.tvJobTitle]]</span></h2>
</div>