Destoon 模板引擎的 {loop} 標籤支援計數器變數,但預設從 0 開始。需求常見:顯示排名、序號,需從 1 開始。本文詳解三種實現方式與避坑指南。
{loop $tags $k $t}
原理: {loop $tags $k $t} 中 $k 為數值索引(0-based),直接在輸出處 {php echo $k + 1;} 即可,最簡潔、無副作用。
{php $i = 0;}
{loop $tags $t}
{php $i++;}
注意: {php} 區塊中的變數作用域為模板編譯後的 PHP 函數內部,$i 需在 {loop} 前初始化,迴圈內遞增。
若需支援分頁(第 2 頁從 11 開始),需在標籤參數傳入偏移:
{php $offset = ($page - 1) * 10;}
{loop $tags $k $t}
| 錯誤寫法 | 問題 | 修正 |
|---|---|---|
{loop $tags $i $t}{$i++} | 模板引擎不支援後綴運算符輸出,且 $i++ 回傳遞增前的值 | 用 {php echo $i + 1;} 或 {php $i++; echo $i;} |
{loop $tags $i $t}imgUrl[{$i++}] | 同上,且 JS 陣列索引會跳號 | JS 端用 push() 或 PHP 端組好陣列再 json_encode |
直接用 {$k} 不加 1 | 顯示 0, 1, 2... 不符合直覺 | {php echo $k + 1;} |
/* CSS */
.rank-list {
counter-reset: rank;
}
.rank-list li::before {
counter-increment: rank;
content: counter(rank) ". ";
font-weight: bold;
color: #e4393c;
}
/* 模板 */
優點: 分頁、篩選、動態增刪皆自動正確,零後端計算,SEO 友善(內容結構不變)。
{php echo $k + 1;} 最直接$offset + $k + 1counter 最優雅array_values() 重建索引後 json_encode