【问题标题】:Clean links to PHP-generated JavaScript and CSS干净的指向 PHP 生成的 JavaScript 和 CSS 的链接
【发布时间】:2010-11-02 07:27:08
【问题描述】:

背景: 当使用 PHP 或任何类似的东西生成 HTML 内容时,可以将指向 JavaScript 和 CSS 的链接封装在标签内,而实际上不必包含 CSS 和 JavaScript “内联”其余的内容。您所要做的就是创建一个指向该文件的链接。

示例: {script type="text/javascript" src="./js/fooscript.js"}{/script}

问题: 但是,如果您的 PHP 需要动态生成部分或全部 JavaScript 代码,则上述方法不起作用。有没有办法像上面那样有一个干净的“单行”链接,但仍然使用动态生成的 JavaScript?

显然,一种方法是让 PHP 自动生成 JavaScript 并将其写入文件;然而,由于各种原因,这种方法是不可取的。我想知道是否有一个我还没有想到的替代技巧。

【问题讨论】:

    标签: php javascript css templates scripting


    【解决方案1】:

    .htaccess 文件放入您的/js/ 文件夹,并将.js 扩展名添加到PHP,如下所示:

    AddHandler application/x-httpd-php .js
    

    换句话说,让 PHP 将所有 .js 文件解析为 PHP 文件。因此,您的脚本实际上是服务器端输出 JavaScript 的 PHP 文件。对样式表做同样的事情,显然只使用 .css 扩展名。

    注意:我从未尝试在单独的 .htaccess 文件中执行此操作。如果它不起作用,只需将其放入您的全局 Apache 配置中。

    【讨论】:

    • 我认为您的意思是 AddHandler 而不是 AddType。 AddType 设置传出的 mimetype 标头。
    • 糟糕,你是对的,感谢您的纠正。我有一段时间没有这样做了。 :)
    • "虽然这会让 PHP 解析服务器上的所有 JavaScript/CSS 文件" 不是必须的。只需将其粘贴在您提供 php js 文件的目录的 标记中。
    【解决方案2】:

    您可以在 JavaScript 和 CSS 调用中使用 .php 文件。它并不漂亮,任何查看您的源代码的人都知道它是一个脚本,但它省去了在服务器上进行配置的麻烦。另外,如果您正在制作动态 JavaScript,我建议您在末尾添加一个时间戳,这样浏览器就不会缓存它。

    示例。

    <script src="myjavascript.php?a=20090611-021213"></script>
    

    【讨论】:

    • 如果您确实使用这种方法,请确保添加适当的“Content-type”标头。
    【解决方案3】:

    根据我的经验,您很少需要(也很少应该)动态生成整个脚本。例如,在 javascript 中,您可能需要将一些数据(如用户信息或设置)动态获取到 javascript 中,但脚本的其余部分(类/函数/DOM 操作)在所有用户中都是静态的。

    通常在这种情况下,您只想将动态内容“内联”,从 PHP 动态输出,然后将 js(不需要动态生成的 95%)作为外部脚本包含在内。最明显的原因是缓存 js/css。

    通过查看 reddit.com 将用户数据导入 javascript 的源代码,考虑 reddit.com 是如何做到的。

    var reddit = {
        /* is the user logged in */ logged: 'username',
        /* the subreddit's name (for posts) */ post_site: "",
        /* are we in an iframe */ cnameframe: false,
        /* this page's referer" */ referer: "",
        /* the user's voting hash */ modhash: 'lzbcszj9nl521385b7e075e9750ee4339547befc6a47fa01e6',
        /* current domain */ cur_domain: "reddit.com", ...
    }
    

    他们的其余js在外部文件中找到。

    【讨论】:

    • 为了不必滚动阅读,我重新格式化了代码。
    • +1 你真的应该让用户尽可能多地缓存
    • 好答案。从设计的角度来看,这允许良好的 MVC 分离和封装 +1
    【解决方案4】:

    你可以使用 mod_rewrite 让某些 php 文件被视为 CSS/JS

    例如/css/screen-style.css 指向 css.php?friendly_id=screen-style

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-28
      • 1970-01-01
      • 1970-01-01
      • 2019-02-10
      • 1970-01-01
      • 2011-02-15
      • 1970-01-01
      相关资源
      最近更新 更多