You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ISML文件中判断内容资产是否处于上线状态?

解决ISML中内容资产上线状态判断问题

直接调用isOnline()无效是因为<iscontentasset>标签不会自动将资产对象暴露到当前ISML上下文,你需要手动获取内容资产实例后再判断其在线状态,以下是可行方案:

方案1:在ISML内直接获取资产状态

通过<isscript>块调用Content Manager API获取资产并判断状态:

<isscript>
// 获取目标内容资产
var targetAsset = dw.content.ContentMgr.getContentAsset("my_asset");
// 判断资产存在且处于上线状态
var isAssetOnline = targetAsset && targetAsset.isOnline();
</isscript>

<!-- 根据状态控制模态框显示 -->
<div class="base_modal ${isAssetOnline ? '' : 'd-none'}">
    <iscontentasset aid="my_asset" />
</div>

方案2:通过后端管道传递状态

如果需要在多个页面复用这个逻辑,建议在管道(Pipeline)或控制器中提前获取状态,再传递到ISML:

  1. 在管道的Java代码中获取状态:
import com.demandware.content.ContentMgr;
import com.demandware.content.ContentAsset;

// 获取资产并判断上线状态
ContentAsset asset = ContentMgr.getContentAsset("my_asset");
boolean isAssetOnline = (asset != null) && asset.isOnline();
// 将状态存入请求属性
request.getHttpServletRequest().setAttribute("isAssetOnline", isAssetOnline);
  1. 在ISML中直接使用该属性:
<div class="base_modal ${isAssetOnline ? '' : 'd-none'}">
    <iscontentasset aid="my_asset" />
</div>

关键说明

  • 必须先确认资产实例存在(targetAsset != null),避免空指针异常
  • 沙箱环境中修改资产online属性为no后,isOnline()会返回false,此时模态框会被添加d-none类隐藏,避免显示空内容

内容的提问来源于stack exchange,提问作者ece

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 17:41:06