문제

요소 배열을 생성하는 PHP 페이지가 있습니다. 단순성을 위해 숫자 순서의 숫자 1-5를 포함한다고 가정 해 봅시다. 이 숫자는 똑같이 (또는 가능한 한 동일하게) 두 열로 나뉘어야합니다 (HTML 테이블 사용) :

1   4
2   5
3

열의 수는 향후에 변경 될 수 있습니다. 이것은 프레젠테이션 수준의 변화이기 때문에 템플릿 파일에서만 변경하여 달성 할 수있는 것이되어야한다고 가정합니다. 요소 분할을 열로 처리 해야하는 것은 똑똑하다는 것을 나에게 제안합니다.

Smarty (및 방법)로이를 달성 할 수있는 방법이 있습니까? 아니면 PHP 파일이 모든 작업을 수행하도록해야합니까?

도움이 되었습니까?

해결책

Smarty에서 할 수는 있지만 HTML과 CSS는 실제로 열을 지원하지 않기 때문에 고통입니다. 배열에 몇 개의 항목이 있는지 파악하고 먼저 {섹션} 태그를 사용하여 먼저 항목의 전반전 (반올림)을 잡고 한 열에 표시 한 다음 별도의 {섹션}을 표시하여 두 번째를 잡습니다. 항목의 절반 (반올림)을 두 번째 열에 놓습니다.

{section}의 경우 시작할 배열 인덱스와 원하는 항목 수를 지정할 수 있습니다. 배열의 항목 수를 다른 변수로 설정하면이를 계산할 수 있습니다.

당신은 이런 식으로 코드를 시도 할 수 있습니다 - 그러나 나는 해당 계산을 테스트하지 않았으므로 잘못 될 수 있습니다 ...

<td>
  {section name=myitem loop=$items max=(($itemcount/2)+0.499)}
    {$items[myitem]}
  {/section}
</td>
<td>
  {section name=myitem loop=$items start=(($itemcount/2)+0.499)}
    {$items[myitem]}
  {/section}
</td>

다른 팁

여기에서 foreach 및 반복을 사용하는 내 솔루션 :

<ul>
{foreach from=$items item=item name=firstFE}
            {if $smarty.foreach.firstFE.index lt ($items|@count / 2)}
               <li>{$item->title}</li>
            {/if}
{/foreach}
</ul><ul>
{foreach from=$items item=item name=secFE}
            {if $smarty.foreach.secFE.index gte ($items|@count / 2)}
               <li>{$item->title}</li>
            {/if}
{/foreach}
</ul>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top