Как вырваться из Cfoutput - PullRequest
       34

Как вырваться из Cfoutput

9 голосов
/ 18 октября 2011

Я перебираю результаты запроса, и мне нужно ограничить количество отображаемых строк. Мне нужно использовать cfoutput, потому что я использую атрибут group, и я не могу использовать maxrows, потому что не все строки будут отображаться.

Я пытался использовать <cfbreak> внутри <cfoutput>, но это выдает ошибку.

Как мне выйти из цикла <cfoutput>?

Ответы [ 2 ]

8 голосов
/ 18 октября 2011

Если ваша группа только для удаления дубликатов из ваших результатов, я бы предложил использовать ваш запрос для их сокращения, тогда вы можете сделать cfloop (выбрать отличный и уменьшить список возвращаемых столбцов).

Если вы используете свою группу для «группировки» своих результатов, вы можете запустить счетчик в вашем цикле и оператор cfif в первом цикле, чтобы пропустить последующие результаты.

Вы можете подделать группу по опции в вашем cfloop, сопоставив значение из предыдущей строки, если вам нужен cfbreak

<cfloop query="queryname">
  <cfif queryname.column[currentrow-1] neq queryname.column[currentrow]>
    #queryname.column#
  </cfif>
</cfloop>

Случайная заметка: вы можете максроу на любом / всех уровнях вашего сгруппированного cfoutput

<cfset tmp = querynew('id,dd')>
<cfloop from="1" to="20" index="i">
  <cfset queryaddrow(tmp,1)>
  <cfset querysetcell(tmp,'id',rand(),i)>
  <cfset querysetcell(tmp,'dd',(i mod 4),i)>
</cfloop>
<cfquery dbtype="query" name="tmp">select * from tmp order by dd</cfquery>

<cfoutput query="tmp" group="dd" maxrows="2">#dd#<br
  <ul>
    <cfoutput maxrows="2" group="id"><li>#id#</li></cfoutput>
  </ul>
</cfoutput>
4 голосов
/ 28 февраля 2014

Вы можете использовать тег cfthrow, чтобы вызвать исключение, которое позволит вам выйти из цикла, используя cfcatch, вы можете затем игнорировать исключение и продолжить обработку. Это даст вам то, что вы хотите.

    <cftry>
    <cfset i = 0>
    <cfoutput query="qMyQuery" group="someGroup">
            <cfset i = i + 1>
            Parent
                    <cfoutput>
                            Child
                    </cfoutput>

                    <cfif i GTE 10>
                            <cfthrow type="break">
                    </cfif>
    </cfoutput>

    <cfcatch type="break">
            <!--- DO NOTHING - THIS IS A HACK FOR NOT BEING ABLE TO USE CFBREAK inside cfoutput. --->
    </cfcatch>
    </cftry>
...