Silverstripe 控制回路内的逃逸场

Silverstripe 控制回路内的逃逸场,silverstripe,Silverstripe,刚刚接触SilverStripe并试图解释事情是如何运作的 我在页面中有一个字段,用于存储一些HTML代码。当您查看他们的“持有者”页面时,它会在每个子页面上循环并显示所有子页面。我遇到的问题是,当我输出值时,它正在转义它-所以我需要能够解码它 <% control Children %> <h2>$Title </h2> $ExtraHtmlBody <!-- This is escaping when outputting -->

刚刚接触SilverStripe并试图解释事情是如何运作的

我在页面中有一个字段,用于存储一些HTML代码。当您查看他们的“持有者”页面时,它会在每个子页面上循环并显示所有子页面。我遇到的问题是,当我输出值时,它正在转义它-所以我需要能够解码它

<% control Children %>
    <h2>$Title </h2>
    $ExtraHtmlBody <!-- This is escaping when outputting -->
 <% end_control %>

$Title
$ExtraHtmlBody

因此,我尝试在我的Page_控制器中添加一个函数,但似乎无法从控制循环中调用Page_控制器方法。我尝试将函数移动到Page类中,但它似乎没有$this->extra-htmlbody的任何数据。可能我做错了什么。

您的数据可能已经在数据库中转义了。你查过了吗

正如@munomono所说,如果您存储html,请使用
HTMLText
HTMLVarchar
。 您还可以尝试使用
$extrachtmlbody.RAW
禁用模板中的自动转义(风险自负)

这里有一些信息:


控制器功能问题可能只是范围问题,因为
更改了范围,
$Up
/
$Top
可能会有所帮助。但您可能根本不需要该函数。

以$db为单位的“ExtraHtmlBody”是什么数据类型?因为它包含HTML,所以可能应该是HTMLText或HTMLVARCAR。从Silverstripe 3.1开始,默认强制转换为文本。只是文字而已。我只是试着在我的课堂上改变它,然后再次编辑了页面,但仍然逃脱了。我需要做些什么来更新我在Page类中所做的更改吗?嗯,/dev/build-and-edit?啊,.RAW修复了它。不知道这个功能。嗯,这不是建议的,很可能是安全问题(但缩小了问题的范围)。因此使用
HTMLText
HTMLVarchar
@LouisW您是否尝试更改字段类型?记住在…无意冒犯@colimba之后运行
/dev/build
,但要确保不要生成标记为解决方案的错误引用。关于引用(希望不要进一步混淆),还可以设置静态$casting=array('extra-htmlbody'=>'HTMLText');但在这种情况下不需要它,因为它是HTMLText数据类型的默认值。因此,指向文档和安全页面的链接。