<! - Declare list variables -> <! - # set var = "RND_0" value = "Value 0" -> <! - # set var = "RND_1" value = "Value 1" -> <! - # set var = "RND_2" value = "Value 2" -> <! - Call the component -> <! - # include virtual = "/ rnd.shtml" -> <! - Here is our random value -> [<! - # echo var = "RND_X" ->]I recommend doing the component on 10 elements, it is 14 KB in size, and 60 elements are already more than 500 KB, that's about it (although you need to think more about optimization). Component: Code (2)
<! - We declare additional variables for pseudo lists of existing and used items -> <! - # set var = "RND_LIST_INDEX" value = "x" -> <! - # set var = "RND_LIST_INDEX_TMP" value = "x" -> <! - Fill in the variable of existing elements and declare additional variable "flags" of the existence of variables. Since there are no cycles, You have to make such a long copy-paste. -> <! - # 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 -> <! - Now, in order to set the value of the variables of the list, if the variable no value. Set the value provided that we did not install it is up to this, due to the fact that we have a strictly defined sequence from 0 to 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 -> <! - Now we check if the list is already full and if the sequence is not necessary. install first -> <! - # if expr = "$ RND_LIST_INDEX_TMP = $ RND_LIST_INDEX" -> <! - # set var = "RND_LIST_INDEX_TMP" value = "x" -> <! - # endif -> <! - Then exactly the same blocks for each of their variables in order for the whole range from 0 to 9. Do not forget to check the occupancy after each block sequences. -> <! - # 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 /" -> ... <! - The entire list of items is full, you can select the desired relative to seconds. -> <! - # 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 -> <! - IMPORTANT!!! Now it is desirable to reset the list, because variables are all global and if we will use the component several times on the same page for different lists, there may be a mixture of lists. Although we leave the opportunity not reset it. -> <! - # 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 -> <! - Actually everything, a random value is in the variable RND_X ->Of course, the probability of obtaining elements depends strongly on the total number of elements, so for a list of three 9 elements, we get the sequence
Source: https://habr.com/ru/post/67818/
All Articles