如果我使用dataextension扩展它,我可以为数据对象添加额外的功能。例如,我有一个从具有库存保留功能的模块扩展的Item。假设该项目也从其他几个模块扩展而来。
使用库存保留功能进行扩展后,我想在前端显示项目的可用性,例如绿色/红色点。如何在我的模板中为详细信息页面(ItemPage.ss)获取此点的标记,并为项目概述页面中的include(Item.ss)而不用覆盖整个模板。只是添加这一部分,就像我在基类上扩展函数的方式一样?
答案 0 :(得分:1)
这可能是一种向原始模板添加额外标记的方法。
内部数据对象或全局数据对象扩展程序
public function ExtraTemplateHTML($position) {
$html = null;
foreach($this->owner->extend('updateExtraTemplateHTML') as $positionBlocks) {
if(isset($positionBlocks[$position])) {
foreach($positionBlocks[$position] as $htmlBlock) {
$html .= $htmlBlock->getValue();
}
}
}
return $html;
}
特定数据对象扩展程序
public function updateExtraTemplateHTML($htmlBlocks) {
$viewer = new SSViewer(__CLASS__);
$html = $viewer->process($this->owner);
$htmlBlocks['bottom'][] = $html;
$topHtml = HTMLText::create();
$topHtml->setValue(123);
$htmlBlocks['top'][] = $topHtml;
return $htmlBlocks;
}
原始模板
$ExtraTemplateHTML(top)
...
...
$ExtraTemplateHTML(bottom)
扩展模板
只需为您的扩展程序编写一个新模板,其中包含您要添加的内容。
答案 1 :(得分:0)
您无法部分更改模板,您只能将模板替换为另一个模板。所以,记住这一点,你应该保持模块化架构的许多逻辑包含。
扩展现有内容的另一种可能方法是使用DOM和javascript。但你应该考虑副作用。例如,如果您添加额外的文字内容,那么抓取工具就无法看到它,并会影响您的搜索引擎优化。但是对于装饰性增强,例如添加额外的彩色圆点,这种方法将起作用。