代码之家  ›  专栏  ›  技术社区  ›  Timur Gafforov

MODX:按随机选择的ID排序

  •  0
  • Timur Gafforov  · 技术社区  · 7 年前

    我是modx革命的新手,我有一个非常奇怪的任务。我有这个:

     [[!getPage? 
        &elementClass=`modSnippet` 
        &element=`getResources` 
        &parents=`127,106`
        &resources=`-831,-243`
        &depth=`2`
        &limit=`21` 
        &pageVarKey=`page` 
        &includeTVs=`1` 
        &includeContent=`1` 
        &tpl=`pageAllDoctors` 
        &hideContainers=`true`
        &sortby=`FIELD(modResource.id, 456,331,390,491,2756,505,634,699,941,1044,1377,1436,1449,1678,1722,1711,1828,2007,2094,2184,2324,2487,2527)`
        &where=`[{"introtext:LIKE":"%[[!searchFieldClinic? &field=`spec`]]%", "AND:introtext:NOT LIKE":"%заведу%", "AND:template:=":104}]`]]
    

    在sortby中,我有一个首先显示的资源列表,然后是剩余的资源。唯一的一件事是,我需要他们不仅是第一个,而且还显示随机,而不是与其他资源混淆了他们之后。

    有什么办法吗?

    提前谢谢。

    2 回复  |  直到 7 年前
        2
  •  0
  •   Timur Gafforov    7 年前

    使用代码片段解决了问题:

    &sortby=`FIELD(modResource.id, [[!shuffleVals?&vals=`456,331,390,491,2756,505,634,699,941,1044,1377,1436,1449,1678,1722,1711,1828,2007,2094,2184,2324,2487,2527`]])`
    

    <?php
    /**
     * @package shuffleVals
     */
    $output = '';
    
    $properties =& $scriptProperties;
    
    $properties['vals'] = explode(',', $properties['vals']);
    shuffle($properties['vals']);
    $properties['vals'] = implode(',', $properties['vals']);
    
    return $properties['vals'];