Skip to content

条件和循环

条件渲染

有时需要按需在页面渲染内容,zin 支持 if 语句和三元表达式来实现,下面分别进行介绍。

if 语句 + 中间变量

php
/* $canClose 决定是否渲染关闭按钮 */
$canClose = true;

/* $closeBtn 作为中间变量用于存储最终渲染的内容 */
$closeBtn = null;

/* 使用 if 进行判断,动态设置 $closeBtn 的值 */
if($canClose) $closeBtn = btn(set::icon('close'));

div
(
    $closeBtn
);
html
<div>
  <button type="button" class="btn"><i class="icon icon-close"></i></button>
</div>

三元表达式

php
/* $canClose 决定是否渲染关闭按钮 */
$canClose = true;

/* 在页面声明中使用 */
div
(
    /* 使用三元表达式 */
    $canClose ? btn(set::icon('close')) : null
);
html
<div>
  <a class="btn"><i class="icon icon-close"></i></a>
</div>

提示

zin 部件方法内的 nulltruefalse 都将不会渲染任何内容,详情参考 部件 文档。

列表渲染

将一个原始的数据数组渲染为一个列表是非常常见的,在 zin 中支持 foreacharray_map 两种方式来实现,下面分别进行介绍。

foreach 循环 + 中间变量

php
/* 原始数据数组 */
$links = array
(
    array('title' => '首页', 'url' => '/'),
    array('title' => '关于', 'url' => '/about'),
    array('title' => '联系', 'url' => '/contact'),
);

/* $items 作为中间变量存储最终渲染的内容 */
$items = [];

/* 使用 foreach 循环 */
foreach($links as $link)
{
    $items[] = item(set::text($link['title']), set::url($link['url']));
}

/* 在页面声明中使用 */
toolbar($items);
html
<div class="toolbar">
  <a class="btn toolbar-item" href="/">首页</a>
  <a class="btn toolbar-item" href="/about">关于</a>
  <a class="btn toolbar-item" href="/contact">联系</a>
</div>

array_map

array_map 是 php 内置方法,可以为数组的每个元素应用回调函数,当然也可以将一个原始数据数组映射为一个 zin 渲染结果数组。下面介绍用法:

php
/* 原始数据数组 */
$links = array
(
    array('title' => '首页', 'url' => '/'),
    array('title' => '关于', 'url' => '/about'),
    array('title' => '联系', 'url' => '/contact'),
);

/* 定义渲染方法供 array_map 调用 */
function buildToolbarItem($link)
{
    return item(set::text($link['title']), set::url($link['url']));
}

/* 在页面声明中使用 */
toolbar
(
    array_map('buildToolbarItem', $links)
);
html
<div class="toolbar">
  <a class="btn toolbar-item" href="/">首页</a>
  <a class="btn toolbar-item" href="/about">关于</a>
  <a class="btn toolbar-item" href="/contact">联系</a>
</div>

提示

建议所有返回 zin 渲染内容的方法名称都以 buildXxxXxxxx 的形式定义,例如 buildProjectListbuildTodoCheckbox 等。

https://zentao.net