LOOP

### Index Up << >>

## LOOP

Loop lists can be used to construct arbitrary lists based on the contents of a database field, a search, or other value (like a fixed list).

Loop accepts a search parameter which will do one-click searches on a database table (or file).

To iterate over all keys in a table, use the idiom (`[loop search="ra=yes/ml=9999"] [/loop]`. `ra=yes` sets `mv_return_all`, which means ``match everything''. The `ml=9999` limits matches to that many records -- you normally don't want to use that many, but it is a reasonable default maximum. If you want to not use the text file for searching a Minivend DBM database, don't forget to use `st=db` (mv_searchtype).

Both can be sorted with `[sort table:field:mod -start +number]` modifiers. See SORTING.

[loop item item item] LIST [/loop]
  named attributes: `[loop prefix=label* list="item item item"* search="se=whatever"*]`

  Returns a string consisting of the LIST, repeated for every item in a comma-separated or space-separated list. Operates in the same fashion as the `[item-list]` tag, except for order-item-specific values. Intended to pull multiple attributes from an item modifier -- but can be useful for other things, like building a pre-ordained product list on a page.

  Loop lists can be nested by using different prefixes:

          [loop prefix=size list="Small Medium Large"]
              [loop prefix=color list="Red White Blue"]
                  [color-code]-[size-code]<BR>
              [/loop]
              <P>
          [/loop]

  This will output:

                      Red-Small
                      White-Small
                      Blue-Small

                      Red-Medium
                      White-Medium
                      Blue-Medium

                      Red-Large
                      White-Large
                      Blue-Large

  You can do an arbitrary search with the search=``args'' parameter, just as in a one-click search:

          [loop search="se=Americana/sf=category"]
              [loop-code] [loop-field title]
          [/loop]

  The above will show all items with a category containing the whole world ``Americana''.

[if-loop-data table field] IF [else] ELSE [/else][/if-loop-field]
  Outputs the IF if the field in table is non-empty, and the ELSE (if any) otherwise.

  NOTE: This tag does not nest with other `[if-loop-data ...]` tags.

[if-loop-field field] IF [else] ELSE [/else][/if-loop-field]
  Outputs the IF if the field in the products table is non-empty, and the ELSE (if any) otherwise.

  NOTE: This tag does not nest with other `[if-loop-field ...]` tags.

[loop-accessories]
  Evaluates to the value of the Accessories database entry for the item.

[loop-alternate N] DIVISIBLE [else] NOT DIVISIBLE [/else][/loop-alternate]
  Set up an alternation sequence. If the loop-increment is divisible by N, the text will be displayed. If an `[else]NOT DIVISIBLE TEXT[/else]` is present, then the NOT DIVISIBLE TEXT will be displayed.

  For example:

          [loop-alternate 2]EVEN[else]ODD[/else][/loop-alternate]
          [loop-alternate 3]BY 3[else]NOT by 3[/else][/loop-alternate]

[/loop-alternate]
  Terminate the alternation area.

[loop-change marker]
  Same as `[item-change]` but within loop lists.

[loop-code]
  Evaluates to the product code for the current item.

[loop-data database fieldname]
  Evaluates to the field name fieldname in the arbitrary database table database, for the current item.

[loop-description]
  Evaluates to the product description (from the products file) for the current item.

[loop-field fieldname]
  The [loop-field ...] tag is special in that it looks in any of the tables defined as ProductFiles, in that order, for the data, returning the value only if that key is defined. In most catalogs, where ProductFiles is not defined (i.e. the demo), `[loop-field title]` is equivalent to `[loop-data products title]`.

  Evaluates to the field name fieldname in the database, for the current item.

[loop-increment]
  Evaluates to the number of the item in the list. Used for numbering items in the list.

[loop-last]tags[/loop-last]
  Evaluates the output of the MiniVend tags encased inside, and if it evaluates to a numerical non-zero number (i.e. 1, 23, or -1) then the loop iteration will terminate. If the evaluated number is negative, then the item itself will be skipped. If the evaluated number is positive, then the item itself will be shown but will be last on the list.

            [loop-last][calc]
              return -1 if '[loop-field weight]' eq '';
              return 1 if '[loop-field weight]' < 1;
              return 0;
              [/calc][/loop-last]

  If this is contained in your `[loop list]` and the weight field is empty, then a numerical `-1` will be output from the `[calc][/calc]` tags; the list will end and the item will not be shown. If the product's weight field is less than 1, a numerical 1 is output. The item will be shown, but will be the last item shown.

[loop-next]tags[/loop-next]
  Evaluates the output of the MiniVend tags encased inside, and if it evaluates to a numerical non-zero number (i.e. 1, 23, or -1) then the loop will be skipped with no output. Example:

            [loop-next][calc][loop-field weight] < 1[/calc][/loop-next]

  If this is contained in your `[loop list]` and the product's weight field is less than 1, then a numerical `1` will be output from the `[calc][/calc]` operation. The item will not be shown.

[loop-price n* noformat*]
  Evaluates to the price for optional quantity n (from the products file) of the current item, with currency formatting. If the optional ``noformat'' is set, then currency formatting will not be applied.

### Index Up << >>