Coldfusion - Очистка и добавление массивов - PullRequest
0 голосов
/ 07 октября 2011

Я задал вопрос здесь вчера ( cfquery grouping, count & maxrows ), с которым это связано.На этот вопрос успешно ответили бы настолько, насколько успешно работает счетный аспект.Тем не менее, я получаю странные результаты с другим аспектом, который я вполне могу понять.

Сценарий таков - я возвращаю категории и подкатегории верхнего уровня в одном запросе, подкатегории возвращаются вложениемcfoutput.Результат работает, за одним исключением - подкатегории всегда возвращают полный список - т.е. если я ограничиваю исходный вывод, чтобы на экране отображались только 2 строки, я всегда получаю первые 2 строки из первой категории верхнего уровня - сейчаспервые 2 строки из текущей категории верхнего уровня.

Я попытался очистить массив в запросе cfoutput, в cfloop и т. д. - все безуспешно.

Я вставилмой код ниже, и приложил скриншот тока, который он генерирует.Любые указатели на это, прежде чем я потеряю все свои волосы, будут с благодарностью приняты!

<cfquery name="getcategories">
SELECT p.ID AS CategoryID, p.Cat_Name as CategoryName, p.Cat_Shortname, c.ID AS SubCategoryID, c.Cat_Name as SubCategoryName, c.Cat_Shortname AS SubCatShortname
FROM    product_categories p LEFT JOIN product_categories c ON p.ID = c.SubcategoryOf
WHERE  p.SubcategoryOf = 0
</cfquery> 
<cfset subcategoryNames = ArrayNew(1)>
        <cfoutput query="getcategories" group="CategoryName">
        <li class="catli">CategoryName : #CategoryName#</li> 
        <cfoutput>

          <cfset arrayAppend(subcategoryNames, SubcategoryName)>
          <p>ArrayAppend : #SubcategoryName#<br /></p>
        </cfoutput>

        <cfloop from="1" to="2" index="i">
            <li class="subli">SubcategoryName : #SubcategoryName[i]#</li>
        </cfloop>

        <cfif arrayLen(subcategoryNames) GT 2>
        <p>ArrayLen is GT 2</p>
          <li class="subli moreli">
            + #arrayLen(subcategoryNames) - 2# More Subcategories
          </li>
            <!--- Extra Subcategories --->
            <p>Extra Subcategories</p>
                <cfloop from="3" to="#arrayLen(subcategoryNames)#" index="r">
                <li class="subli">SubcategoryName : #SubcategoryName[r]#</li>
                </cfloop>

            <!--- End Extra Subcategories --->

        </cfif>

        </cfoutput>

screenshot

1 Ответ

1 голос
/ 07 октября 2011

Вы должны просто иметь возможность переключать эти две строки:

<cfset subcategoryNames = ArrayNew(1)>
<cfoutput query="getcategories" group="CategoryName">

На это:

<cfoutput query="getcategories" group="CategoryName">
    <cfset subcategoryNames = ArrayNew(1)>

Это будет сбрасывать ваш массив в начале каждой новой категории верхнего уровня.

Вы также можете оставить их в исходном порядке и просто сделать это:

<cfset subcategoryNames = ArrayNew(1)>
<cfoutput query="getcategories" group="CategoryName">
    <cfset ArrayClear(subcategoryNames) />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...