如何在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:
- 在管道的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);
- 在ISML中直接使用该属性:
<div class="base_modal ${isAssetOnline ? '' : 'd-none'}"> <iscontentasset aid="my_asset" /> </div>
关键说明
- 必须先确认资产实例存在(
targetAsset != null),避免空指针异常 - 沙箱环境中修改资产
online属性为no后,isOnline()会返回false,此时模态框会被添加d-none类隐藏,避免显示空内容
内容的提问来源于stack exchange,提问作者ece
相关产品推荐
相关产品推荐

