我的Silverstripe CMS中有一个URLSegment字段,我希望在那里有大写的链接。但保存后,Silverstripe将其更改为小写字符串。我无法找到触发此行为的位置。有谁知道,如何预防?
答案 0 :(得分:2)
课程URLSegmentFilter
is responsible for the lower case conversion of the URLSegment,调用mb_strtotlower
。 URLSegmentFilter
通过Sitetree
's generateURLSegment
function调用SiteTreeURLSegmentField
。
要消除这一点的重要部分是generateURLSegment
函数实际上调用了Silverstripe的扩展系统,所以如果你做SiteTree
的数据扩展,你只需要指定一个名为{{1的函数并且在Silverstripe的基础上进行自己的处理。
从我上面链接的代码中,传递到updateURLSegment
函数的第一个参数将是URL的过滤(和小写)版本,第二个参数将是未触及的值。
执行此操作时,我会小心确保您重新实现updateURLSegement
所做的所有其他过滤代码(减去小写调用),否则可能会破坏系统中的无效字符。
对此,我会谨慎地做这个改变。在URL中具有不同的大小写对任何人都没有帮助,一些用户会认为URL是区分大小写的,对于某些系统来说很容易。我不知道Silverstripe是否会遇到这个问题,我没有遇到过我所做过的或帮助过各种各样的项目。
另一个快速的事情是,还有另一种方法可以使用Silverstripe的Object::useCustomClass
function实现类似的更改并完全覆盖URLSegmentFilter
,尽管只使用它作为最后的手段。