3

我想将 JS 代码片段从 PHP 文件中移出并移到它们自己的文件中,以使代码更清洁且更易于维护。例如,我有这个功能:

function load_script($fieldname)
{
  return
  'var help = function () {alert(' . '"EDITOR HELP:\n\n' . 
                                     'blah blah.\n\n' . 
                                     'more blah blah.\n\n' . 
                                     ');}' . "\n" .
  'var options = { handler: help, title: "Editor help" };' . "\n" .
  'var converter = Markdown.getSanitizingConverter();' . "\n" .
  'var editor = new Markdown.Editor(converter, "-'.$fieldname.'", options);' . "\n" .
  'editor.run();' . "\n";
}

注意$fieldnamePHP 变量。

这个想法是将 JS 部分存储在 .js 文件中。然后我将它作为纯文本读入,以便在 return 语句中输出。换句话说,是这样的:

function load_script($fieldname)
{
  $output = file_get_contents("load_script.js");
  return $output;
}

显然问题是这不会$fieldname用相应的值代替。

我目前对此的想法是$output通过字符串替换来运行:

function load_script($fieldname)
{
  $output = file_get_contents("load_script.js");
  $output = str_replace("some_unique_identifier", $fieldname, $output);
  return $output;
}

有更好的方法吗?

编辑:

我应该在这背后添加一些动机:

首先,给出的示例很难看,除了最简单的 JS 片段外,很难维护。犯错的空间很大。

其次,当您以这种方式混淆时,编辑器在检查语法和突出显示方面并不是很有帮助。

第三,让 JS 在自己的文件中运行可以更轻松地运行在整个站点上运行的缩小脚本(因此您不必手动维护缩小)。

4

4 回答 4

2

您可以使用模板引擎来执行此操作(例如 Smarty)。只需使用 PHP 变量所在的模板变量编写 JS 文件,然后通过 PHP 加载它们。

你甚至可以推出你自己的简单的。就像是:

// in JS file:
function myFunc() {
    alert("hello %s");
}

// in PHP file:
<?PHP
    //... code to open JS file and load into string....
    echo sprintf($contentsOfJSFile, "John Doe");
?>

RESULTING OUTPUT: 

function myFunc() {
    alert("hello John Doe");
}
于 2012-10-31T20:04:22.743 回答
1

正如有人已经提到的,JS 文件就像 HTML,而 HTML 又就像 PHP 文件。所以像这样创建你的javascript文件

<?php
//my_script.php
?>

<script>
 var foo = "<?= $bar ?>";
</script>

然后,在你的 php 中:

$bar = 'some value';
include('my_script.php');
于 2012-10-31T20:06:10.607 回答
0

不幸的是,不是真的,或者至少不是开箱即用的。有一些聪明的解决方案,比如 Backbone,它可能会让你的任务更容易或更理智,但也可能需要重写。

于 2012-10-31T20:01:18.237 回答
0

简而言之,输出js和输出html是一样的。您可以嵌入 php 变量,但就转义引号和文字与引用而言,您必须遵守相同的规则。它很快就会变得丑陋和乏味。

我做什么取决于JS和变量的数量。有时我为我所有的 js 制作字符串,然后将它们粘在一起,比如

$js_function_pt1 = "var help = function() { ..."
$js_function_pt2 = "..."

return $js_function_pt1 + $fieldname + $js_function_pt2 + ....

如果你可以在你的 js 中保留所有单引号,你就有一点额外的奢侈,因为你可以将你的 js 输出用双引号括起来,然后来自 php 的变量引用将被解释为变量并被评估。

$output = " var help = function() { alert('blah blah $fieldname') } "
于 2012-10-31T20:02:04.057 回答