多くの場合、開発者は、帽子のコラージュ、哲学者のことわざなど、情報をランダムに表示する特定の要素をサイトにインストールするタスクに直面しています。 タスクは簡単ですが、通常のプログラミング言語では使用できますが、使用できない場合はどうでしょうか? このようなタスクでのユーザーの設定に応じて
Javaスクリプトはカウントされません、コーシャではありません。
SSIが助けになりますが、正直なところ、これらは実行すべきタスクではありません。
だから私たちが持っていることと何ができるか:
- SSIはフォルダーからファイル(要素)のリストを取得できないため、コードでリストを動的にリストしません。
- SSIには配列がないため、変数の擬似配列を作成します。
- SSIには数学関数はありませんが、連結と正規表現があります。
- 数学はありませんが、時間はありますが、数秒から乱数を選択できます(ちなみに、多くのプログラミング言語のrand関数はときどき機能します)。
- SSIでランダムサンプリング範囲を指定することはできないため、範囲は1ダース(10要素)以内の秒、1分(60要素)内、100(100要素)内などになります。
- SSIにはループがないという事実のため、スクリプトは1パスで線形である必要があり、コピー/過去の束があります。
これらは物です。 エレメントの数でエレメントを制限することはそれほど怖いことではありませんが、宇宙船を作るのではなく、松葉杖を作ります。 より多くの添加物、要素の完全なリスト、すなわち スペースなし。 途中で、アルゴリズムが表示されます。
- どの要素がどの要素であるかをチェックします。
- 不足している要素を既存の要素のシーケンスで埋めます。
- SSIには数学関数はありませんが、連結と正規表現があります。
- 秒に対応する対応する要素を選択します。
これを外部コンポーネントとして使用します。 リストを定義し、コンポーネントを呼び出し、変数を取得します:コード(1)
<!-リスト変数を宣言する->
<!-#set var = "RND_0" value = "Value 0"->
<!-#set var = "RND_1" value = "Value 1"->
<!-#set var = "RND_2" value = "Value 2"->
<!-コンポーネントを呼び出す->
<!-#include virtual = "/ rnd.shtml"->
<!-ここにランダムな値があります->
[<!-#echo var = "RND_X"->]
コンポーネントを10要素で実行することをお勧めします。14KBのボリュームがあり、60要素では既に500 KBを超えています(最適化についてさらに検討する必要があります)コンポーネント:コード(2)
<!-
既存の疑似リストの追加変数を宣言します。
中古品
->
<!-#set var = "RND_LIST_INDEX" value = "x"->
<!-#set var = "RND_LIST_INDEX_TMP" value = "x"->
<!-
既存の要素の変数を埋め、追加を宣言します
変数の存在の変数「フラグ」。 サイクルがないため、
このような長いコピーペーストを作成する必要があります。
->
<!-#if expr = "$ RND_0"->
<!-#set var = "RND_LIST_INDEX" value = "$ {RND_LIST_INDEX} 0"->
<!-#set var = "RND_0_EX" value = "1"->
<!-#else->
<!-#set var = "RND_0_EX" value = "0"->
<!-#endif->
<!-#if expr = "$ RND_1"->
<!-#set var = "RND_LIST_INDEX" value = "$ {RND_LIST_INDEX} 1"->
<!-#set var = "RND_1_EX" value = "1"->
<!-#else->
<!-#set var = "RND_1_EX" value = "0"->
<!-#endif->
<!-#if expr = "$ RND_2"->
<!-#set var = "RND_LIST_INDEX" value = "$ {RND_LIST_INDEX} 2"->
<!-#set var = "RND_2_EX" value = "1"->
<!-#else->
<!-#set var = "RND_2_EX" value = "0"->
<!-#endif->
<!-#if expr = "$ RND_3"->
<!-#set var = "RND_LIST_INDEX" value = "$ {RND_LIST_INDEX} 3"->
<!-#set var = "RND_3_EX" value = "1"->
<!-#else->
<!-#set var = "RND_3_EX" value = "0"->
<!-#endif->
<!-#if expr = "$ RND_4"->
<!-#set var = "RND_LIST_INDEX" value = "$ {RND_LIST_INDEX} 4"->
<!-#set var = "RND_4_EX" value = "1"->
<!-#else->
<!-#set var = "RND_4_EX" value = "0"->
<!-#endif->
<!-#if expr = "$ RND_5"->
<!-#set var = "RND_LIST_INDEX" value = "$ {RND_LIST_INDEX} 5"->
<!-#set var = "RND_5_EX" value = "1"->
<!-#else->
<!-#set var = "RND_5_EX" value = "0"->
<!-#endif->
<!-#if expr = "$ RND_6"->
<!-#set var = "RND_LIST_INDEX" value = "$ {RND_LIST_INDEX} 6"->
<!-#set var = "RND_6_EX" value = "1"->
<!-#else->
<!-#set var = "RND_6_EX" value = "0"->
<!-#endif->
<!-#if expr = "$ RND_7"->
<!-#set var = "RND_LIST_INDEX" value = "$ {RND_LIST_INDEX} 7"->
<!-#set var = "RND_7_EX" value = "1"->
<!-#else->
<!-#set var = "RND_7_EX" value = "0"->
<!-#endif->
<!-#if expr = "$ RND_8"->
<!-#set var = "RND_LIST_INDEX" value = "$ {RND_LIST_INDEX} 8"->
<!-#set var = "RND_8_EX" value = "1"->
<!-#else->
<!-#set var = "RND_8_EX" value = "0"->
<!-#endif->
<!-#if expr = "$ RND_9"->
<!-#set var = "RND_LIST_INDEX" value = "$ {RND_LIST_INDEX} 9"->
<!-#set var = "RND_9_EX" value = "1"->
<!-#else->
<!-#set var = "RND_9_EX" value = "0"->
<!-#endif->
<!-
ここで、変数がリストされている場合、順番にリスト変数の値を設定します
値なし。 設定しなかった場合は値を設定します
前に、厳密に定義されたシーケンスがあるため
0から9
->
<!-#if expr = "$ RND_0_EX = 0 && $ RND_0_EX = 1 && $ RND_LIST_INDEX_TMP!= / 0 /"->
<!-#set var = "RND_0" value = "$ RND_0"->
<!-#set var = "RND_LIST_INDEX_TMP" value = "$ {RND_LIST_INDEX_TMP} 0"->
<!-#elif expr = "$ RND_0_EX = 0 && $ RND_1_EX = 1 && $ RND_LIST_INDEX_TMP!= / 1 /"->
<!-#set var = "RND_0" value = "$ RND_1"->
<!-#set var = "RND_LIST_INDEX_TMP" value = "$ {RND_LIST_INDEX_TMP} 1"->
<!-#elif expr = "$ RND_0_EX = 0 && $ RND_2_EX = 1 && $ RND_LIST_INDEX_TMP!= / 2 /"->
<!-#set var = "RND_0" value = "$ RND_2"->
<!-#set var = "RND_LIST_INDEX_TMP" value = "$ {RND_LIST_INDEX_TMP} 2"->
<!-#elif expr = "$ RND_0_EX = 0 && $ RND_3_EX = 1 && $ RND_LIST_INDEX_TMP!= / 3 /"->
<!-#set var = "RND_0" value = "$ RND_3"->
<!-#set var = "RND_LIST_INDEX_TMP" value = "$ {RND_LIST_INDEX_TMP} 3"->
<!-#elif expr = "$ RND_0_EX = 0 && $ RND_4_EX = 1 && $ RND_LIST_INDEX_TMP!= / 4 /"->
<!-#set var = "RND_0" value = "$ RND_4"->
<!-#set var = "RND_LIST_INDEX_TMP" value = "$ {RND_LIST_INDEX_TMP} 4"->
<!-#elif expr = "$ RND_0_EX = 0 && $ RND_5_EX = 1 && $ RND_LIST_INDEX_TMP!= / 5 /"->
<!-#set var = "RND_0" value = "$ RND_5"->
<!-#set var = "RND_LIST_INDEX_TMP" value = "$ {RND_LIST_INDEX_TMP} 5"->
<!-#elif expr = "$ RND_0_EX = 0 && $ RND_6_EX = 1 && $ RND_LIST_INDEX_TMP!= / 6 /"->
<!-#set var = "RND_0" value = "$ RND_6"->
<!-#set var = "RND_LIST_INDEX_TMP" value = "$ {RND_LIST_INDEX_TMP} 6"->
<!-#elif expr = "$ RND_0_EX = 0 && $ RND_7_EX = 1 && $ RND_LIST_INDEX_TMP!= / 7 /"->
<!-#set var = "RND_0" value = "$ RND_7"->
<!-#set var = "RND_LIST_INDEX_TMP" value = "$ {RND_LIST_INDEX_TMP} 7"->
<!-#elif expr = "$ RND_0_EX = 0 && $ RND_8_EX = 1 && $ RND_LIST_INDEX_TMP!= / 8 /"->
<!-#set var = "RND_0" value = "$ RND_8"->
<!-#set var = "RND_LIST_INDEX_TMP" value = "$ {RND_LIST_INDEX_TMP} 8"->
<!-#elif expr = "$ RND_0_EX = 0 && $ RND_9_EX = 1 && $ RND_LIST_INDEX_TMP!= / 9 /"->
<!-#set var = "RND_0" value = "$ RND_9"->
<!-#set var = "RND_LIST_INDEX_TMP" value = "$ {RND_LIST_INDEX_TMP} 9"->
<!-#endif->
<!-
ここで、リストがすでに満たされているかどうか、およびシーケンスが
最初にインストールする
->
<!-#if expr = "$ RND_LIST_INDEX_TMP = $ RND_LIST_INDEX"->
<!-#set var = "RND_LIST_INDEX_TMP" value = "x"->
<!-#endif->
<!-
次に、すべての順序で、変数ごとにまったく同じブロック
0〜9の範囲。各ブロックの後に完全性をチェックすることを忘れないでください
シーケンス。
->
<!-#if expr = "$ RND_1_EX = 0 && $ RND_0_EX = 1 && $ RND_LIST_INDEX_TMP!= / 0 /"->
<!-#set var = "RND_1" value = "$ RND_0"->
<!-#set var = "RND_LIST_INDEX_TMP" value = "$ {RND_LIST_INDEX_TMP} 0"->
<!-#elif expr = "$ RND_1_EX = 0 && $ RND_1_EX = 1 && $ RND_LIST_INDEX_TMP!= / 1 /"->
<!-#set var = "RND_1" value = "$ RND_1"->
<!-#set var = "RND_LIST_INDEX_TMP" value = "$ {RND_LIST_INDEX_TMP} 1"->
<!-#elif expr = "$ RND_1_EX = 0 && $ RND_2_EX = 1 && $ RND_LIST_INDEX_TMP!= / 2 /"->
...
<!-
要素のリスト全体に入力されているため、秒を基準にしたいものを選択できます。
->
<!-#config timefmt = "%S"->
<!-#set var = "NUM_SEC" value = "$ DATE_LOCAL"->
<!-#if expr = "$ NUM_SEC = / 0 $ /"->
<!-#set var = "RND_X" value = "$ RND_0"->
<!-#elif expr = "$ NUM_SEC = / 1 $ /"->
<!-#set var = "RND_X" value = "$ RND_1"->
<!-#elif expr = "$ NUM_SEC = / 2 $ /"->
<!-#set var = "RND_X" value = "$ RND_2"->
<!-#elif expr = "$ NUM_SEC = / 3 $ /"->
<!-#set var = "RND_X" value = "$ RND_3"->
<!-#elif expr = "$ NUM_SEC = / 4 $ /"->
<!-#set var = "RND_X" value = "$ RND_4"->
<!-#elif expr = "$ NUM_SEC = / 5 $ /"->
<!-#set var = "RND_X" value = "$ RND_5"->
<!-#elif expr = "$ NUM_SEC = / 6 $ /"->
<!-#set var = "RND_X" value = "$ RND_6"->
<!-#elif expr = "$ NUM_SEC = / 7 $ /"->
<!-#set var = "RND_X" value = "$ RND_7"->
<!-#elif expr = "$ NUM_SEC = / 8 $ /"->
<!-#set var = "RND_X" value = "$ RND_8"->
<!-#elif expr = "$ NUM_SEC = / 9 $ /"->
<!-#set var = "RND_X" value = "$ RND_9"->
<!-#else->
<!-#set var = "RND_X" value = "$ RND_0"->
<!-#endif->
<!-
重要!!!
リストをリセットすることをお勧めします。 変数はすべてグローバルであり、
同じページでコンポーネントを複数回使用して、
リストを作成すると、リストが混在する場合があります。 機会を残しませんが
それをゼロにします。
->
<!-#if expr = "$ RND_DO_NOT_CLEAN_LIST"->
<!-#set var = "RND_DO_NOT_CLEAN_LIST" value = ""->
<!-#else->
<!-#set var = "RND_0" value = ""->
<!-#set var = "RND_1" value = ""->
<!-#set var = "RND_2" value = ""->
<!-#set var = "RND_3" value = ""->
<!-#set var = "RND_4" value = ""->
<!-#set var = "RND_5" value = ""->
<!-#set var = "RND_6" value = ""->
<!-#set var = "RND_7" value = ""->
<!-#set var = "RND_8" value = ""->
<!-#set var = "RND_9" value = ""->
<!-#endif->
<!-
実際には、ランダムな値は変数RND_Xにあります
->
もちろん、要素を取得する可能性は要素の総数に強く依存するため、3つの9要素のリストについては
- RND_0 =>値0;
- RND_1 =>値1;
- RND_2 =>値2;
- RND_3 =>値3;
- RND_4 =>値4;
- RND_5 =>値5;
- RND_6 =>値6;
- RND_7 =>値7;
- RND_8 =>値8;
- RND_9 =>値0;
ご覧のとおり、変数RND_0を表示する確率は1/5であり、他のすべては1/10です。さらに、コンポーネントが完了すると、多くの空白行が残りますが、これはコンポーネントのすべての行を1つに接着することで修正できます。コンポーネント自体は
ここからダウンロードでき
ます 。
オリジナル