[if type="type" term="field" op="op" compare="compare"]
[if type="!type" term="field" op="op" compare="compare"]
Allows conditional building of HTML based on the setting of various MiniVend session and database values. The general form is:
[if type term op compare] [then] If true, this is printed on the document. The [then] [/then] is optional in most cases. If ! is prepended to the type setting, the sense is reversed and this will be output for a false condition. [/then] [elsif type term op compare] Optional, tested when if fails [/elsif] [else] Optional, printed when all above fail [/else] [/if]
The [if]
tag can also have some variants:
[if explicit][condition] CODE [/condition] Displayed if valid Perl CODE returns a true value. [/if]
You can do some Perl-style regular expressions, and combine conditions:
[if value name =~ /^mike/i] This is the if with Mike. [elsif value name =~ /^sally/i] This is an elsif with Sally. [/elsif] [elsif value name =~ /^barb/i] [or value name =~ /^mary/i] This is an elsif with Barb or Mary. [elsif value name =~ /^pat/i] [and value othername =~ /^mike/i] This is an elsif with Pat and Mike. [/elsif] [else] This is the else, no name I know. [/else] [/if]
While the named parameter tag syntax works for [if ...]
, it is more convenient to use the positional syntax in most cases. The
only exception is if you are planning on doing a test on the results of
another tag sequence:
[if value name =~ /[value b_name]/] Shipping name matches billing name. [/if]
Oops! This will not work. You must do instead
[if type=value term=name op="=~" compare="/[value b_name]/"] Shipping name matches billing name. [/if]
or
[if type=value term=high_water op="<" compare="[shipping]"] Shipping cost is too high, charter a truck. [/if]
If you wish to do
AND and
OR operations, you will have to use
[if explicit]
. This allows complex testing and parsing of values.
There are many test targets available:
[if config CreditCardAuto] Auto credit card validation is enabled. [/if]
[if data products::size::99-102] There is size information. [else] No size information. [/else] [/if]
[if data products::size::99-102 =~ /small/i] There is a small size available. [else] No small size available. [/else] [/if]
[if discount 99-102] Item is discounted. [/if]
[condition]
[/condition]
tag pair, it will be used to make the comparison. Arguments can be passed
to import data from user space, just as with the [perl]
tag.
[if explicit] [condition] $country = '[value country]'; return 1 if $country =~ /u\.?s\.?a?/i; return 0; [/condition] You have indicated a US address. [else] You have indicated a non-US address. [/else] [/if]
This example is a bit contrived, as the same thing could be accomplished
with [if value country =~ /u\.?s\.?a?/i]
, but you will run into many situations where it is useful.
This will work for Variable values:
[if explicit "__MYVAR__"] .. [/if]
[if file /home/user/www/images/[item-code].gif] <IMG SRC="[item-code].gif"> [/if]
or
[if type=file term="/home/user/www/images/[item-code].gif"] <IMG SRC="[item-code].gif"> [/if]
The file test requires that the SafeUntrap directive contains
ftfile
(which is the default).
[if items]You have items in your shopping cart.[/if] [if items layaway]You have items on layaway.[/if]
[if ordered 99-102] ... [/if] Checks the status of an item on order, true if item 99-102 is in the main cart.
[if ordered 99-102 layaway] ... [/if] Checks the status of an item on order, true if item 99-102 is in the layaway cart.
[if ordered 99-102 main size] ... [/if] Checks the status of an item on order in the main cart, true if it has a size attribute.
[if ordered 99-102 main size =~ /large/i] ... [/if] Checks the status of an item on order in the main cart, true if it has a size attribute containing 'large'. THE CART NAME IS REQUIRED IN THE OLD SYNTAX. The new syntax for that one would be:
[if type=ordered term="99-102" compare="size =~ /large/i"]
To make sure it is exactly large, you could use:
[if ordered 99-102 main size eq 'large'] ... [/if]
[if ordered 99-102 main lines] ... [/if] Special case -- counts the lines that the item code is present on. (Only useful, of course, when mv_separate_items or SeparateItems is defined.)
[if salestax [value state] > 0] There is salestax for your state. [else] No salestax for your state. [/else] [/if]
Key matching is case-insensitive.
[set name]value[/set]
element.
[if scratch mv_separate_items] Ordered items will be placed on a separate line. [else] Ordered items will be placed on the same line. [/else] [/if]
[if validcc no type exp_date]
. Evaluates to true if the supplied credit card number, type of card, and expiration date pass a validity test. Does a
LUHN-10 calculation to weed out typos or phony card numbers.
mv_
are MiniVend special values, and should be tested/used with caution.
The field term is the specifier for that area. For example,
[if session frames]
would return true if the frames
session parameter was set.
As an example, consider buttonbars for frame-based setups. It would be nice to display a different buttonbar (with no frame targets) for sessions that are not using frames:
[if session frames] [buttonbar 1] [else] [buttonbar 2] [/else] [/if]
Another example might be the when search matches are displayed. If you use
the string [value mv_match_count] titles found
, it will display a plural for only one match. Use:
[if value mv_match_count != 1] [value mv_match_count] matches found. [else] Only one match was found. [/else] [/if]
The op term is the compare operation to be used. Compare operations are as in Perl:
== numeric equivalence eq string equivalence > numeric greater-than gt string greater-than < numeric less-than lt string less-than != numeric non-equivalence ne string equivalence
Any simple perl test can be used, including some limited regex matching.
More complex tests are best done with [if explicit]
.
[if ..]
tag is used as the conditionally substituted text. If nesting [if ...]
tags you should use a [then][/then]
on any outside conditions to ensure proper interpolation.
[elsif type="type" term="field" op="op" compare="compare"]
Additional conditions for test, applied if the initial [if ..]
test fails.
[if explicit]
tag. Allows an arbitrary expression
in Perl to be placed inside, with its return value interpreted as the result of the
test. If arguments are added to [if explicit args]
, those will be passed as arguments are in the [perl]
construct.