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 スニペット以外は保守が困難です。間違いの余地がたくさんあります。

第二に、このように物事を混同すると、エディターは構文のチェックと強調表示の点であまり役に立ちません。

第 3 に、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 と同じで、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

残念ながら、実際にはそうではありません。少なくとも、すぐに使えるわけではありません。タスクをより簡単に、またはより正気にするバックボーンなどの賢いソリューションがいくつかありますが、書き直しが必要になる場合もあります。

于 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 に答える