Smarty와 함께 요소를 열로 배열하십시오
-
20-08-2019 - |
문제
요소 배열을 생성하는 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>
제휴하지 않습니다 StackOverflow