#coldfusion
#coldfusion
Вопрос:
Я начну с объяснения того, что я делаю — я чувствую, что объяснение «реального мира» облегчит понимание. У меня есть список категорий и подкатегорий для интернет-магазина. Таблица базы данных настраивается простым способом — идентификатор, имя_категории и subcategoryof — subcategoryof равны 0 для представления категории верхнего уровня.
В главном индексе хранилища я перечисляю все категории и подкатегории, используя комбинацию одного запроса с использованием левого соединения и cfoutput в запросе cfoutput (код вставлен ниже). Это хорошо работает и позволяет мне достаточно хорошо стилизовать категории и подкатегории верхнего уровня, чтобы различать их.
Однако список становится немного длинным, и теперь для навигации по странице требуется изрядное количество прокрутки. Что я хотел бы сделать, так это;
Выведите все категории верхнего уровня, поскольку в настоящее время выводятся только 2 подкатегории, показывающие количество дополнительных подкатегорий (т.е. еще 7 подкатегорий).
Теперь я фактически буду выводить все так, как я делаю сейчас, однако после 2-й подкатегории я установлю следующие подкатегории как скрытые и использую текст » еще 7 подкатегорий» для переключения отображения (все еще со мной здесь?).
Моя проблема и вопрос заключается в следующем: как мне получить количество подкатегорий для использования с моим текстом » x дополнительных подкатегорий»? Я предполагаю, что мой текущий план использования инкрементного подсчета для определения точки, в которой я начинаю скрывать строки, является лучшим маршрутом?
Существующий код ниже
<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>
<ul>
<cfoutput query="getcategories" group="CategoryName">
<li class="catli"><a href="">#CategoryName#</a></li>
<cfoutput><li class="subli"><a href="">#SubcategoryName#</a></li></cfoutput>
<li class="subli moreli"><a href=""> 7 More Subcategories</a></li>
</cfoutput>
</ul>
Ответ №1:
<ul>
<cfset SubcategoryNames = []>
<cfoutput query="getcategories" group="CategoryName">
<li class="catli"><a href="">#CategoryName#</a></li>
<cfoutput>
<cfset arrayAppend(subcategoryNames, SubcategoryName)>
</cfoutput>
<cfloop from="1" to="#max(arrayLen(subcategoryNames),2)#" index="i">
<li class="subli"><a href="">#SubcategoryName[i]#</a></li>
</cfloop>
<cfif arrayLen(subcategoryNames) GT 2>
<li class="subli moreli">
<a href=""> #arrayLen(subcategoryNames) - 2# More Subcategories</a>
</li>
</cfif>
</cfoutput>
</ul>
Комментарии:
1. Спасибо, Генри, это огромная помощь. В интересах всех, кто пытается сделать то же самое, ваш код работал нормально, но мне пришлось внести одно небольшое изменение, чтобы вывод отображался правильно; <li class=»subli»><a href=»»>#SubcategoryName[i]#</a>>