【问题标题】:Relative path to CSS file?CSS文件的相对路径?
【发布时间】:2013-03-30 22:13:51
【问题描述】:

有没有办法让 CakePHP 的 css 方法发出相对于当前文档的路径?

即,使用此代码:

$this->Html->css('tutorial'); 

而不是生成

<link rel="stylesheet" type="text/css" href="/Tutorial/css/tutorial.css" />

它会生成类似的东西

<link rel="stylesheet" type="text/css" href="../../css/tutorial.css" />

我知道这很愚蠢,但我正在寻找可以使用 wget 检索,然后离线查看的东西。我已经告诉 CakePHP 处理 .html 扩展名(使用 Router::parseExtensions('html');),然后设置到控制器/动作的路由,看起来像静态 HTML 文件的目录结构。我正在寻找一种方法来生成与页面相关的 URL,以便当我保存文件(使用 wget)时,它们在从硬盘驱动器读取时仍然可以工作。

正如 thaJeztah 在下面指出的那样,这在 CakePHP 中是不可能的。因为 CakePHP 将 URL 抽象地映射到控制器和动作,它实际上不再有任何“提供文件”的概念(除了在 /pages/subdirs 等中),所以对 CakePHP 唯一有意义的是提供一个 URL从根目录开始,一直到 .CSS 文件。 (非常感谢 thaJeztah 指出这一点!)

【问题讨论】:

  • 它们都是相对路径。
  • css("../../tutorial") 有用吗?
  • 嗯。以“/”开头的 URL 显然是相对的。我在考虑“相对于当前文档”

标签: cakephp


【解决方案1】:

来自API

如果 $path 以 '/' 为前缀,则路径将相对于您的应用程序的 webroot。否则,路径将相对于您的 CSS 路径

所以你可以用/ 开始路径,然后从那里指向,这样你就不需要在目录中倒退。

感谢this answer 指出这一点

【讨论】:

  • 我正在寻找相对于文档的路径(而不是相对于 webroot 文件夹或 CSS 路径)
  • 我明白,但我的想法是你可以输入相对于 webroot 的路径,而不必从 CSS 文件夹返回目录
  • 我知道这很愚蠢,但我正在寻找可以使用 wget 检索,然后离线查看的东西。所以它需要与文档相关。
  • 另外 - 谢谢你的建议!我非常感谢您对此的帮助! :)
  • 使用“绝对”路径(即相对于“根”)的原因是,如果您在 URL 中添加更多参数,CSS 路径将变得无效,例如,对于此请求; /controller/action/1 路径应该是 ../../css/styles.css。但是,对于这个请求:/controller/action/1/page:2/sort:name/,CSS 的路径必须是 ../../../../../css/styles.css。因此,使用“绝对”URL 是首选方式,确保路径始终正常工作
【解决方案2】:

附带说明一下,您实际上可以使用“wget”命令获取网站的副本。 (Windows 甚至还有一个不错的“Visual WGet”,它为所有命令行选项提供了一个友好的 GUI)。 wget 将下载所有文件,并且(如果您使用 -k / --convert-links 选项)会将所有链接修复为相对(相对于每个文档),以便它们脱机工作。

等到 wget 完全完成很重要,因为 wget 会执行这种奇怪的两阶段操作,它首先获取所有文件,然后返回并修复链接

【讨论】:

    猜你喜欢
    • 2011-02-12
    • 1970-01-01
    • 2019-04-21
    • 2014-08-22
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    相关资源
    最近更新 更多