предупреждение о плохом коде: группировка массива для вложенного меню - PullRequest
1 голос
/ 18 мая 2011

Ничего себе.Меня попросили добавить 3-й уровень в древовидное меню для компании.Ниже я нашел то, что я создал около 6 месяцев назад.И хотя это работает, я никоим образом не собираюсь добавлять к нему еще один взлом cfloop.Все мои чувства говорят мне, что это просто плохой код, и нужно повторить.

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

Каждая запись в БД не имеет отношения, код ниже просто смотрит на имя виджета и работает, если онродитель или нет на основе:

примеров widgetName

1 = Соответствие:

2 = Соответствие: Библиотека документов:

3 = Соответствие:Библиотека документов: Все фирмы

, поэтому выше сказано, что виджет 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>

1 Ответ

1 голос
/ 20 мая 2011

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

...