0

ユーザーのサイトに、サーバーからスクリプトを要求する 1 行のコードがあります。

<script src="myserver.com/getjs?user=1"></script>

php は js を提供し、ユーザーの ID をコードに挿入します。

(function(){
    var userid = 1; //written out from $_GET['user']
    ...js code...
})();

ここで、ユーザーの ID に応じて異なる js を出力したいと考えています。多くの異なる js ファイルを用意するのではなく、db にあるユーザー設定に基づいて送信されるコードを「モジュール化」して、ユーザーがサイトのコードを変更する必要がないようにする方法が必要です。これを行う唯一の方法は、次のように js ファイルを出力することです。

...first PHP will get some user settings from the db based on their userid...
...then the js is output...

(function(){
    var userid = 1; //written out from $_GET['user']

    <?php if( $userOption1 ){ ?>
        function _option1(userid){ //func required if option1 true
           ...func1 code...
        }
        _option1(userid); //ruin it in js
    <?php } ?>

    <?php if( $userOption2 ){ ?>
        function _option2(userid){ //func required if option2 true
           ...func2 code...
        }
        _option2(userid); //run it in js
    <?php } ?>

    ...and so on...

})();

しかし、これを管理するためのより効率的な方法があるに違いないと確信しています。これを行う理由の一部は、各ユーザーのコードをできるだけ小さく保つことですが、主な理由は、一部のユーザーが望まない機能を構築しているためです。各ユーザーにとって動的である必要があります。

助けてくれる人に感謝します!

4

1 に答える 1

1

Require.JS ( web サイト) を使用できます。オンデマンドで非同期にスクリプトをロードします。ライブラリをロードするには、次を使用できます。

<script data-main="js/loadScripts.php" src="libs/require.js"></script>

これは基本的に、読み込みが完了したら「loadScripts.php」javascript ファイルを実行するように Require.JS に指示します (はい、loadScripts.php は Javascript を返す必要があります。任意のユーザーのカスタム ライブラリを返すことができます)。

loadScripts.php 内では、次のようなことができます。

<?php
// Generate en array of loading scripts, you'll probably want to dynamically
// generate this array according to user access permissions or any other case
$scriptsToLoad = array("script1", "script2", "script3");

$loadingList = "[";
$argumentsList = "";

foreach ($scriptsToLoad AS $script)
{
    $loadingList .= "\"{$script}\", ";
    $argumentsList .= "{$script}, ";
}
$loadingList = substr($loadingList, 0, strlen($loadingList) - 2);
$loadingList .= "]";

$argumentsList = substr($argumentsList, 0, strlen($argumentsList - 2);

echo "require({$loadingList}, function({$argumentsList}) {});\n";
?>

私はこれをテストしていませんが、その Web サイトを読んでアイデアを得ることができます。スクリプトは「.js」なしで呼び出され、loadScripts の同じフォルダーにある必要があることに注意してください (subfoldername/scriptNameファイルをロードするように呼び出して、サブフォルダー内に置くことができますjs/subfoldername/scriptName.js)。

argumentsList は、ロードされたモジュールを含む変数を定義します。モジュールは次のように定義されます。

$(function() {
    // Stuff...
    var module = {
        doSomething: function() {
            // .......
        },

        anyValueYouWant: 5
    };

    return module;
});

もちろん、モジュールを定義する方法はたくさんあります。API ドキュメントを読む必要があります。お役に立てれば。

于 2013-07-24T10:51:15.727 に答える