Может кто-нибудь помочь мне улучшить это? Там должен быть лучший путь. То, что я делаю, - это создание локального веб-сервиса для гибкого захвата, чтобы заполнить древовидное меню. Flex - это приложение, которое я называю веб-службой, это всего лишь некоторый фон, но это никак не связано с проблемой.
Чтобы создать иерархические данные для этого дерева, я кодировал следующее.
<cffunction name="getFormsBinMenu" access="remote" returntype="string">
<cfquery name="getParents" datasource="db_intranet_data">
SELECT * FROM formsbin_categories WHERE parentid = 1 ORDER BY sortorder ASC
</cfquery>
<cfoutput>
<cfxml variable="formsBinMenu">
<?xml version='1.0' encoding='utf-8' ?>
<folder label="Forms Bin">
<cfloop query="getParents">
<folder label="#XMLFormat(getParents.catname)#">
<cfquery name="getSubParents" datasource="db_intranet_data">
SELECT * FROM formsbin_categories WHERE parentid = #catid# and testonly = 0 and visible = 1 ORDER BY sortorder ASC
</cfquery>
<cfloop query="getSubParents">
<folder label="#XMLFormat(getSubParents.catname)#">
<cfquery name="getNextSubParents" datasource="db_intranet_data">
SELECT * FROM formsbin_categories WHERE parentid = #catid# and testonly = 0 and visible = 1 ORDER BY sortorder ASC
</cfquery>
<cfloop query="getNextSubParents">
<folder label="#XMLFormat(getNextSubParents.catname)#"/>
</cfloop>
</folder>
</cfloop>
</folder>
</cfloop>
</folder>
</cfxml>
</cfoutput>
<cfset menu = #toString(formsBinMenu)#>
<cfreturn menu>
</cffunction>
Как видите, я просто перебираю различные запросы. Хотя это работает для моей цели, как я могу кодировать это так, чтобы не было такого большого количества повторений кода?
Я подумал о том, чтобы проверить, сколько уровней будет в структуре, и затем запустить все это в цикле индекса, но это все еще кажется слишком большой нагрузкой.
Любые предложения будут великолепны!