2014-02-05 1 views
0

У меня есть запрос, содержащий ряд дат и другие сведения. В настоящее время, если запрос возвращает 4 дат, скажите (2/27/2014, 2/28/2014, 3/1/2014, 3/2/2014), мой код проходит через все дни и помещает соответствующие элементы в нужный день на панели. Таким образом, он генерирует 4 панели, каждая из которых содержит одну дату.Как изменить CFLoop на выходные данные по дате

Как настроить код, чтобы он выводил 2 панели (по 2 дат каждая), вместо 4 панелей, каждая из которых содержит одну дату? Благодарю.

old_date = ""; 
<cfloop query="getItinerary"> 
    <cfset cur_date = dateFormat(start_date,"m/d/yy")> 
    <cfif old_date NEQ cur_date> 
    <cfif old_date NEQ ""> 
     <cfoutput> 
      CODE TO END PANEL AND START A NEW ONE  
      </cfoutput> 
    </cfif> 
    <cfoutput> 
     ITINERARY ITEM DATE  
    </cfoutput>  
    </cfif> 

    <cfoutput> 
    ITINERARY ITEM INFO DETAILS 
    </cfoutput> 
</cfloop> 
    <cfoutput> 
     CODE TO END PANEL 
    </cfoutput> 
+0

Не могли бы вы предоставить больше своего выходного (HTML) кода? У меня есть решение, но я хотел бы предоставить его в контексте вашего фактического кода вывода, если это возможно. OTW, я хотел бы видеть, что в полной мере представляет собой «панель», содержащую «две даты». Помогли бы даже некоторые образцы желаемого вывода. –

ответ

0

Я не думаю, что этот вопрос был полностью отвечен полностью, поэтому я попробую его. Что вы хотите сделать, это использовать оператор модуля, чтобы разбивать ваши данные на куски, в данном случае панели. Это может показаться прямым, но это может быть сложно, потому что ColdFusion имеет базовый индекс 1. Таким образом, использование логики, которая будет работать на других языках, таких как Java, которые используют базовый индекс нуля, работает не так, как ожидалось. Вот код, который, я считаю, вы ищете:

<!---Note that CMFL/ColdFusion programming is not my thing so the syntax may be a bit off, however the logic should work but I'm sure an actual ColdFusion programmer can write more optimal code---> 

<!---we start by setting a locally scoped variable to use as a counter in base 0 ---> 
<cfset var iCount = 0> 
<!--- loop over all the items in the query ---> 
<cfloop query="getItinerary"> 
    <!--- if the current value of iCount is divisible by 2 then proceed---> 
    <cfif iCount MOD 2 EQ 0> 
     <!---first time around 0 mod 2 = 0---> 
     <cfif iCount EQ 0> 
      <!--- insert the opening panel tag---> 
      [insert panel opening tag(s)] 
     <cfelseif iCount < getItinerary.recordCount> 
      <!---its not the first panel and it is not the last record ---> 
      [insert closing tag(s) of previous panel] 
      [insert opening tag(s) of next panel] 
     </cfelse>    
     </cfif> 
    </cfif> 
    <cfoutput> 
     <!--- insert the date you would like listed within the panel ---> 
     #dateFormat(getItinerary.start_date,"m/d/yy")# 
    </cfoutput> 
    <cfset iCount = iCount + 1> 
    <!---check if that was the last record, if so, close last the panel---> 
    <cfif iCount EQ getItinerary.recordCount> 
     [insert panel closing tag(s)] 
    </cfif> 
</cfloop> 

Обратите внимание, что в приведенном выше коде предполагается, что существует хотя бы одна запись. Если никаких записей нет, добавьте код соответственно. Также использование mod 2 с индексом base 1 даст вам неправильное количество дат на первой панели. Кроме того, mod 3 даст вам две даты на первой панели и 3 даты на всех остальных панелях (хотя в этом случае с лимита, если 4, базовый 1 mod 3 может работать, но он сломается, если предел был изменен).

+0

Спасибо за сообщение! работал – user1094441

2

Вы пробовали что-то вроде этого для вас? Он будет отображать 2 набора результирующих записей за раз.

<cfif getItinerary.CurrentRow MOD 3> 
... 
+3

Мод 3? Разве вы не имеете в виду мод 2? –

+0

Использовал это как хорошо ... Спасибо – user1094441

Смежные вопросы