Once a search has been done, there needs to be a way of presenting the
output. By default, the SpecialPage search is used -- it is set to results
in the distribution demo -- but any number of search pages can be specified
by passing the value in the search form, specified in the variable mv_search_page.
On the search page, some special MiniVend tags are used to format the otherwise standard
HTML. Each of the iterative tags is applied to every code returned from the search -- this is normally the product code, but could be a key to any of the arbitrary databases. The value placed by the
[item-code]
tag is set to the first field returned from the search.
The basic structure looks like this:
[search-region] [search-list] your iterating code, once for each match [/search-list] [no-match] Text / tags to be output if no matches found (optional but recommended) [/no-match] [more-list] More / paging area (optional) [/more-list] [/search-region]
TIP
FOR
MV3
PORTS:
A
[search-list][/search-list]
must always be surrounded by a
[search-region][/search-region]
pair. This is a change from Minivend 3.
The example tags shown have an item-
prefix, which is the default. You can set any prefix you want with the prefix
parameter to [search-region]
:
[search-region prefix=my] [search-list] SKU: [my-code] Title: [my-data products title] [/search-list] [/search-region] The standard set of Minivend iterative MML tags are available. They are interpolated in this order:
[item-alternate N] true [else] false [/else] [/item-alternate] [if-item-param named_field] true [else] false [/else] [/if-item-param] [item-param named_field] [if-item-pos N] true [else] false [/else] [/if-item-pos] [item-pos N] [if-item-field products_field] true [else] false [/else] [/if-item-field] [item-field products_column] [item-increment] [item-accessories] [item-code] [item-description] [if-item-data table column] true [else] false [/else] [/if-item-data] [item-data table column] [item-price N* noformat=1*] [item-calc] [/item-calc] [item-change marker] [condition]variable text[/condition] true [else] false [/else] [/item-change marker] [item-last] condition [/item-last] [item-next] condition [/item-next]
NOTE: those that reference the shopping cart do not apply, i.e. [item-quantity], [item-modifier ...] and friends.
This is slow, and it is far better to pre-sort your return in the search specification.
[search-list][/search-list]
.
Along with the companion [/item-change marker]
, surrounds a region which should only be output when a field (or other
repeating value) changes its value. This allows indented lists similar to
database reports to be easily formatted. The repeating value must be a tag
interpolated in the search process, such as [item-field field]
or [item-data database field]
.
Of course, this will only work as you expect when the search results are properly sorted.
The marker
field is mandatory, and is also arbitrary, meaning that you can select any
marker you wish as long as it matches the marker associated with [/item-change marker]
. The value to be tested is contained within a [condition]value[/condition]
tag pair. The [item-change marker]
tag also processes an [else] [/else]
pair for output when the value does not change. The tags may be nested as
long as the markers are different.
Here is a simple example for a search list that has a field category and
subcategory
associated with each item:
<TABLE> <TR><TH>Category</TH><TH>Subcategory</TH><TH>Product</TH></TR> [search-list] <TR> <TD> [item-change cat] [condition][item-field category][/condition] [item-field category] [else] [/else] [/item-change cat] </TD> <TD> [item-change subcat] [condition][item-field subcategory][/condition] [item-field subcategory] [else] [/else] [/item-change subcat] </TD> <TD> [item-field name] </TD> [/search-list] </TABLE>
The above should put out a table that only shows the category and
subcategory once, while showing the name for every product. (The
will prevent blanked table cells if you use a border.)
[item-change marker]
.
[more-list]
and [/more-list]
element pair.
[more_list]
and [/more_list]
elements is stripped.
Use in conjunction with the [more]
element to place pointers to additional pages of matches.
If the optional arguments next_img
, prev_img
, and/or page_img
are present, they represent image files that will be inserted instead of
the standard 'Next', 'Previous', and page number. If prev_img
is none
, then no previous link will be output. If page_img
is
none
, then no links to pages of matches will be output. These are URLs, are
substituted for with ImageDir and friends, and will be encased in
IMG tags. Lastly, border
is the border number to put.
In addition, if page_img
is used, it will be passed an argument of the digit that is to be
represented. This would allow an image generator program to be used,
generating page numbers on the fly. The border
and border_selected
values are integers indicating the border that should be put around images
in the page_img
selection. The <border_selected> is used for the current page if set.
Examples:
[more-list next.gif prev.gif page_num.cgi 3]
causes anchors of:
Previous <IMG SRC="prev.gif" Border=3> Page 1 <IMG SRC="/cgi-bin/page_num.cgi?1"> Page 2 <IMG SRC="/cgi-bin/page_num.cgi?2"> Next <IMG SRC="next.gif" Border=3>
[more-list next.gif prev.gif page_num.cgi]
causes anchors of:
Previous <IMG SRC="prev.gif"> Page 1 <IMG SRC="/cgi-bin/page_num.cgi?1"> Page 2 <IMG SRC="/cgi-bin/page_num.cgi?2"> Next <IMG SRC="next.gif">
[more-list next.gif prev.gif 0 0]
causes anchors of:
Previous <IMG SRC="prev.gif" Border=0> Page 1 <IMG SRC="/cgi-bin/page_num.cgi?1"> Page 2 <IMG SRC="/cgi-bin/page_num.cgi?2"> Next <IMG SRC="next.gif" Border=0>
If you wish to set custom text for the ``Previous'' and ``Next'' usually
used, then you can define the next_img, prev_img, and page_img with
[next-anchor][/next-anchor]
, [prev-anchor][/prev-anchor]
and
[page-anchor][/page-anchor]
. The string
$PAGE$ will be replaced with the page number in the
latter. The same example:
[more-list 0 0 0] [next-anchor] Forward [/next-anchor] [prev-anchor] Back [/prev-anchor] [page-anchor] Page $PAGE$ [/page-anchor] [more] [/more-list]
will display U<Forward Page 1 Page 2 Back> for 2 pages.
As shown, you must pass a 0 for the arguments of each to tell MiniVend to look for the assignments.
If you have many pages of matches and don't wish to have all displayed at
once, you can set [decade-next][/decade-next]
and [decade-prev][/decade-prev]
. If you set them empty, a search with 31 pages will display pages 21-30
like
Previous 1 2 3 4 5 6 7 8 9 10 [more>>] Next
and pages 11-20 like:
Previous [<<more] 11 12 13 14 15 16 17 18 19 20 [more>>] Next
If you set them to [decade-next](higher)[/decade-next]
and
[decade-prev](lower)[/decade-prev]
you will see:
Previous (lower) 11 12 13 14 15 16 17 18 19 20 (higher) Next
Of course image-based anchors can be used as well.
[more-list]
.
Previous 1 2 3 4 5 6 Next
The current page will not be a hyperlink. Every time the new link is
pressed, the list is re-built to correspond to the current page. If there
is no Next
or Previous
page, that link will not be shown.
See the fr_resul.html
or search.html
files for examples. Make sure you insert this item between a [more-list]
and [/more-list]
element pair.