在Silverstripe中使用自定义库预先添加所有资产和需求路径?

时间:2017-08-14 09:53:10

标签: php silverstripe

我有一个场景,我需要在我的网站上有一个页面,所有CSS,JS,图像和SVG引用都使用绝对URL(https)进行硬编码。目前,他们使用相对URL,例如。 <img src="$ThemeDir/images/image.jpg" />

有没有办法可以轻松地为这些引用添加自定义基本路径,可能会利用Silverstripe的URL处理功能?解决方案需要处理以下用途:

  • 通过Requirements::在父(Page)中插入的CSS和JS文件 控制器。我可以硬编码当前的要求 控制器,但要使用绝对URL作为继承的要求, 我需要block()他们,然后再添加新网址。

  • 图片已上传到CMS中的资源,并通过$Image.URL插入到模板中。

  • 模板中$ThemeDir引用的其他资源。用控制器中我自己的ThemeDir()函数覆盖它似乎不起作用。

如果无法做到这一点,我可以为备用页面维护一个完全独立的模板,我只是想我会看到是否有一个需要较少维护的解决方案。

谢谢!

1 个答案:

答案 0 :(得分:1)

我不认为这是一个简单/干燥的解决方案,因为它是一个如此边缘的案例。我到底是怎么做到的:

  • 在控制器中使用Requirements::clear(),然后需要父控制器组合CSS&amp; JS文件(通过实时模式生成) combine_files)使用https协议。这样我只引用父控制器中的各个CSS / JS文件
  • 在任何链接/图片引用的开头添加了$AbsoluteBaseURL。对于同一内容包含在页面上,添加了一个变量$Base,例如。用于在Footer.ss中添加网址的<% include Footer Base=$AbsoluteBaseURL %>。其他页面只包含部分而不声明变量,因此使用相对URL
  • 外部文件中的SVG精灵不能跨域工作,所以我在页面上嵌入了SVG(PHP中的get_file_contents)并创建了一个函数svgIcon(icon-name),它只向SVG输出哈希值{{ 1}}页面上的ID或引用SVG未嵌入的页面上的SVG精灵文件(和ID哈希)的完整路径。

希望对发现自己有同样问题的人有意义。