# <stl:if> 条件判断
<stl:if
type="测试类型"
op="测试操作"
value="测试值"
yes="判断成功输出值"
no="判断失败输出值"
context="所处上下文"
onBeforeSend="动态判断发送前执行的JS代码"
onSuccess="动态判断成功后执行的JS代码"
onComplete="动态判断结束后执行的JS代码"
onError="动态判断失败后执行的JS代码"
>
</stl:if>
# 说明
通过 stl:if 标签在模板中根据条件判断显示内容
stl:if 通常作为显示的判断条件,如果条件满足则显示,条件不满足则不显示。
stl:if 标签内可以嵌入任意代码,当条件满足时将显示嵌入的代码。如果需要根据测试是否成功显示不同的结果,需要使用子标签 <stl:yes> 和 <stl:no> ,测试条件成功时将显示 <stl:yes> 中的内容,测试条件失败时将显示 <stl:no> 中的内容。
type 属性指定测试类型,如测试栏目名称、模板名称、当前栏目是否属于指定栏目级别等。
如果需要判断自定义内容属性"XYZ",也可以将 type 设置为" XYZ",系统将根据上下文判断栏目或内容的字段"XYZ"的值。
op 属性为测试操作,如是否值等于、不等于、大于、小于、属于等。
value 属性指定测试值,如 op="Equals" value="123"(判断指定条件的值是否等于 123)。
如果 type 为"AddDate"或"LastEditDate",value 可以采用时间段格式"数字+日期符号",如"1y"、"3m"或"10d",分别代表一年、三个月及十天内添加或编辑的内容。
<stl:if> 标签对应的实体为{stl:if},使用实体写法时,需用同时使用属性 yes
或者 no
,用以告诉系统当判断成功或失败时显示的值。
# 子标签
下表显示此标签所有的子标签。
子标签 | 说明 |
---|---|
stl:yes | 测试成功显示模板,可以省略,可使用属性 yes 替代 |
stl:no | 测试失败显示模板,可使用属性 no 替代 |
# 属性
属性 | 说明 |
---|---|
type | 测试类型 |
op | 测试操作 |
value | 测试值 |
yes | 判断成功输出值 |
no | 判断失败输出值 |
context | 所处上下文 |
# type - 测试类型
设置用于 if 测试的类型。
"IsUserLoggin"
用户是否已登录"IsAdministratorLoggin"
管理员是否已登录"IsUserOrAdministratorLoggin"
用户或管理员是否已登录"UserGroup"
用户组"ChannelName"
栏目名称"ChannelIndex"
栏目索引"TemplateName"
模板名称"TemplateType"
模板类型,可能的 value 值:"IndexPageTemplate"
首页模板"ChannelTemplate"
栏目模板"ContentTemplate"
内容模板"FileTemplate"
单页模板
"TopLevel"
栏目级别"UpChannel"
上级栏目"Current"
当前栏目或上级栏目"UpChannelOrSelf"
当前栏目或上级栏目"Self"
当前栏目"GroupChannel"
栏目组名称"GroupContent"
内容组名称"IsTop"
内容属性为置顶"IsRecommend"
内容属性为推荐"IsHot"
内容属性为热点"IsColor"
内容属性为醒目"Channels"
判断子栏目数量,也可用于判断是否存在子栏目"Contents"
判断内容数量,也可用于判断是否存在内容"ImageContents"
判断图片内容数量,也可用于判断是否存在图片内容"Images"
判断图片数量,也可用于判断是否存在图片"Videos"
判断视频数量,也可用于判断是否存在视频"Files"
判断附件数量,也可用于判断是否存在附件"AddDate"
添加时间"LastEditDate"
最后编辑时间(仅用于判断内容)"ItemIndex"
当前项序号"OddItem"
是否为奇数项"自定义字符串"
栏目或内容的字段名称
# op - 测试操作
设置用于 if 测试的比较操作。
"Empty"
值为空"NotEmpty"
值不为空"Equals"
值等于"NotEquals"
值不等于"GreatThan"
值大于"LessThan"
值小于"In"
值属于"NotIn"
值不属于"Contains"
值包含"NotContains"
值不包含
# value - 测试值
设置用于 if 测试的比较值。
# yes - 判断成功输出值
设置用于 if 测试成功时需要显示的值。
# no - 判断失败输出值
设置用于 if 测试失败时需要显示的值。
# context - 所处上下文
"Content"
内容"Channel"
栏目"SqlContent"
获取数据库数据
# Js脚本事件
<stl:if> 标签动态判断是由Ajax来实现的,页面通过Js发起动态请求,服务器返回请求结果并显示在页面中。
动态内容由于通过Ajax加载,会有一定的延迟,我们可以通过定义Ajax事件来进行精确控制。
这是Ajax事件的完整列表,以及它们被触发的顺序。每个动态请求都会触发事件。
TIP
Js脚本事件可以是一段可运行的Js代码,也可以是一个Js函数,如果是函数,请在函数名后加()以确保函数能够运行。
# onBeforeSend
这个事件是在Ajax请求启动之前触发的,它允许你再动态访问之前进行预处理操作。
在此事件中可以直接调用以下参数:
- containerId:动态加载完毕后将更新的HTML 元素的Id
# onSuccess
此事件仅在请求成功时调用(服务器没有错误,数据没有错误)。
在此事件执行完毕后,页面才会更新数据,可以通过 onSuccess 事件对返回的数据进行调整。
在此事件中可以直接调用以下参数:
- containerId:动态加载完毕后将更新的HTML 元素的Id
- data:返回的结果数据
- status:返回的 HTTP 状态码
# onError
此事件仅在请求发生错误时调用(对于请求,永远不能同时有错误和成功回调)。
在此事件中可以直接调用以下参数:
- containerId:动态加载完毕后将更新的HTML 元素的Id
- err:错误信息
- status:返回的 HTTP 状态码
# onComplete
不管请求是否成功,都会调用此事件。这个事件是最后触发的,可以通过 onComplete 事件对已更新的页面元素进行调整。
- containerId:动态加载完毕后将更新的HTML 元素的Id
- err:错误信息
- data:返回的结果数据
- status:返回的 HTTP 状态码
# 示例
# 判断循环栏目是否为当前栏目
下面的例子判断栏目是否为当前栏目或者当前栏目的上级栏目,如果是则增加 class 类。
<stl:channels topLevel="1">
<stl:if type="Current">
<stl:yes>
<li class="active"><stl:a></stl:a></li>
</stl:yes>
<stl:no>
<li><stl:a></stl:a></li>
</stl:no>
</stl:if>
</stl:channels>
我们可以使用实体的写法简化,以下写法与上面的写法效果是一样的:
<stl:channels topLevel="1">
<li class="{stl:if type=current yes=active}"><stl:a></stl:a></li>
</stl:channels>
# 判断值是否为空
下面的例子判断内容副标题是否为空,如果不为空将显示带有副标题的行。
<stl:if type="SubTitle" op="NotEmpty">
<strong>副标题:</strong><stl:content type="SubTitle"></stl:content>
</stl:if>
# 判断当前栏目名称
<stl:if type="ChannelName" op="In" value="栏目1,栏目2">
<stl:yes> <p>true</p> </stl:yes>
<stl:no> <p>false</p> </stl:no>
</stl:if>
# 根据模板类型显示不同内容
下面的例子判断当前模板是不是内容模板。
<stl:if type="TemplateType" op="Equals" value="ContentTemplate">
<stl:yes>
这是内容页面
</stl:yes>
<stl:no>
这不是内容页面
</stl:no>
</stl:if>
# 根据模板名称显示不同内容
下面的例子根据当前模板的模板名称显示不同的内容。
<stl:if type="TemplateName" op="Equals" value="系统首页模板">
<stl:yes>
<li><A href="/" class="current">首 页</A></li>
</stl:yes>
<stl:no>
<li>我不是首页</li>
</stl:no>
</stl:if>
# 突出显示 10 天内更新的内容
下面的例子显示整个站点中最新更新的 20 篇内容,并突出显示 10 天内更新的内容。
<stl:contents topLevel="0" totalNum="20" order="LastEditDate" scope="All">
<stl:if type="LastEditDate" op="LessThan" value="10d">
<stl:yes>
<li><stl:a target="_blank" style="color:#F00;"></stl:a></li>
</stl:yes>
<stl:no>
<li><stl:a target="_blank"></stl:a></li>
</stl:no>
</stl:if>
</stl:contents>
# 判断用户是否登录
下面的例子根据用户是否登录显示不同的内容
<stl:if type="IsUserLoggin">
<stl:yes>
欢迎"{user.displayName}"
<stl:a href="{stl.HomeUrl}">用户中心</stl:a>
<stl:a href="{stl.LogoutUrl}">退出</stl:a>
</stl:yes>
<stl:no>
<stl:a href="{stl.LoginUrl}">登陆</stl:a>
<stl:a href="{stl.RegisterUrl}">注册</stl:a>
</stl:no>
</stl:if>
# 判断是否存在子栏目
下面的例子显示导航栏列表,如果栏目不存在子栏目,则显示本栏目链接,否则显示子栏目链接列表
<stl:channels topLevel="0" group="主导航">
<div class="footer-nav-item">
<stl:a>{Channel.Title}</stl:a>
<stl:if type="channels">
<stl:yes>
<ul>
<stl:channels>
<li>
<stl:a><span>{Channel.Title}</span></stl:a>
</li>
</stl:channels>
</ul>
</stl:yes>
<stl:no>
<ul>
<li>
<stl:a><span>{Channel.Title}</span></stl:a>
</li>
</ul>
</stl:no>
</stl:if>
</div>
</stl:channels>