如何使用JS代码中嵌入的PHP变量从PHP文件输出Javascript?

时间:2012-10-31 19:56:22

标签: php javascript

我想将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";
}

注意$fieldname PHP变量。

这个想法是将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 个答案:

答案 0 :(得分: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");
}

答案 1 :(得分:1)

正如有人已经提到的,一个JS文件就像HTML一样,反过来就像一个PHP文件。所以创建像这样的javascript文件

<?php
//my_script.php
?>

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

然后,在你的php:

$bar = 'some value';
include('my_script.php');

答案 2 :(得分:0)

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

答案 3 :(得分:0)

在nutsehll中,输出js与输出html相同。您可以嵌入php变量,但是在转义引号和文字与引用时,您遵守相同的规则。它很快就会变得丑陋乏味。

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

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

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

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

$output = " var help = function() { alert('blah blah $fieldname') } "