2011-05-18 34 views
1

哇。我被要求爲公司的樹形菜單添加第三層。下面是我發現大約6個月前創建的。雖然它有效,但我不會再添加其他cfloop攻擊。我所有的感受都告訴我這個糟糕的代碼並重做。錯誤代碼警告:爲嵌套菜單分組數組

我不能更改數據庫,也不能將結果返回到查詢以外的任何其他位置。現在你知道它的方式了,我在這裏有什麼選擇?

在數據庫中的每個記錄有沒有關係,下面只是代碼看起來在widget的名字和作品,如果它是一個家長或不基於:widgetName

例子=遵守:

2 =標準:文檔庫:

3 =遵守:文檔庫:所有企業

所以AB奧夫說,小工具2應該2級下來。看你會在一個非常糟糕的方式做了什麼見代碼....

<cfoutput> 

<ul id="root" class="menu">  

    <cfloop array="#rc.widgets.getPageRecords()#" index="local.widgets"> 


     <cfif listLen(local.widgets.getwidgetName(),":") eq 1> 
      <li> 

      <a href='javascript:void(0);' childid = '#local.widgets.getwidgetID()#' class='cat_close category'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a> 
      <a href='javascript:void(0);'>#local.widgets.getwidgetName()# - #listLen(local.widgets.getwidgetName(),":")#</li></a> 
      <cfset wordToFind = local.widgets.getwidgetName()> 
      <ul id='#local.widgets.getwidgetID()#'> 
       <cfloop array="#rc.widgets.getPageRecords()#" index="local.widgets"> 
        <cfif listLen(local.widgets.getwidgetName(),":") eq 2 AND #find(wordToFind,local.widgets.getwidgetName())#> 
         <li> 
          <a href='javascript:void(0);' childid = '#local.widgets.getwidgetID()#' class='cat_close category'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a> 
          <a href='javascript:void(0);'>#local.widgets.getwidgetName()# - #listLen(local.widgets.getwidgetName(),":")#</li></a> 
         </li> 
        </cfif> 
       </cfloop> 
      </ul> 
     </cfif> 


    </cfloop> 



</ul> 
</cfoutput> 
+0

rc.widgets.getPageRecords()是做什麼的?取決於,我可以想出幾種方法來清理並提高效率。請提供查詢是否有權訪問它(如果它在CF中,而不是存儲過程)以及生成陣列和列表的方式。 – 2011-05-18 14:52:40

回答

1

我會用遞歸函數來做到這一點,那將帶給你無限的未來的兼容性。我不確定你正在處理的數據是什麼樣的,但似乎應該是可能的。