Provided by: aolserver4-dev_4.5.1-18_amd64 bug

NAME

       ns_adp_registeradp,  ns_adp_registerproc, ns_adp_registerscript, ns_adp_registertag, ns_register_adptag -
       ADP registered tags

SYNOPSIS

       ns_adp_registeradp tag ?endtag? adp
       ns_adp_registerproc tag ?endtag? proc
       ns_adp_registerscript tag ?endtag? script
       ns_adp_registertag tag ?endtag? adp
       ns_register_adptag tag ?endtag? script
_________________________________________________________________

DESCRIPTION

       These commands enable definition of HTML tags within an ADP file which are expanded and evaluated by  the
       server  before  returning  output  to  the client.  Tags are defined as eitehr a single tag with options,
       e.g., <mytag a=b c=d> or as an opening/closing tag pair, e.g., <mytag> text </mytag>.  This  approach  is
       an alternative to direct calls via the <% script %> syntax as described in the ns_adp man page.

       ns_adp_registeradp tag ?endtag? adp

       ns_adp_registertag tag ?endtag? adp
              These  commands  are  identical and register an ADP code fragment to be invoked when the specified
              tag is encountered while parsing an ADP.  The tag argument specifies the  tag  that  will  trigger
              invocation of the ADP fragment, which is specified by the adp argument.

              If the endtag argument is specified, then the ADP fragment will be invoked with two arguments: The
              first  will  be  the  enclosed  content,  and  the  second  will be the name of an ns_set with any
              attributes specified in the tag.  If no endtag argument is specified, the ADP fragment  will  only
              be  passed  the  name  of  the  ns_set.   The  arguments may be retrieved using ns_adp_bindargs or
              ns_adp_argc and ns_adp_argv.

              When the ADP fragment is invoked, its result is inserted in the output instead of the tag (or,  if
              the endtag was specified, in place of the tag, end tag, and the enclosed content).

              Note:  Care  must  be  taken when using this function from inside an ADP, because the adpstring is
              likely to contain script delimiters (<% ... %>) which will prematurely terminate script fragments.
              It is probably easier to restrict use of this function to .tcl files.

       ns_adp_registerproc tag ?endtag? proc
              This commands register a Tcl procedure to be evaluated when the given tag is encountered.  The tag
              argument specifies the tag that will trigger a  call  to  the  procedure  specified  by  the  proc
              argument.

              The  procedure  will be called with a variable number of arguments, one for each of the attributes
              provided in the tag.  If the endtag argument is specified, the procedure will also receive a final
              argument with the contents of the text enclosed between the tags.  No evaluation  of  the  content
              will be performed, it will be passed as a single text block.

              When the procedure is invoked, its result is inserted in the output instead of the tag (or, if the
              endtag was specified, in place of the tag, end tag, and the enclosed content).

       ns_adp_registerscript tag ?endtag? script

       ns_register_adptag tag ?endtag? script
              These  commands  are  identical  and  register  a Tcl script to be evaluated when the given tag is
              encountered.  The tag argument specifies the tag  that  will  trigger  evaluation  of  the  script
              specified by the script argument.

              If the endtag argument is specified, then the script will be modified with two arguments appended:
              The  first  will  be  the  enclosed content, and the second will be the name of an ns_set with any
              attributes specified in the tag.  If no endtag argument is specified, the script will be  modified
              with just the name of the ns_set appended.

              When  the script is evaluated, its result is inserted in the output instead of the tag (or, if the
              endtag was specified, in place of the tag, end tag, and the enclosed content).

EXAMPLES

       The following is a simple way of handling conditional content in ADPs:

              proc remember {input tagset} {
                global _adp_memory
                set tagname [ns_set iget $tagset name]
                if {[string match "" $tagname]} {
                   set _adp_memory($tagname) $input
                   return ""
                } else {
                   return $input
                }
              }
              proc recall {name} {
                global _adp_memory
                if {[info exists _adp_memory($name)]} {
                   set parsecommand [list ns_adp_parse -string]
                   lappend parsecommand $_adp_memory($name)
                   ns_puts -nonewline [uplevel $parsecommand]
                } else {
                   ns_log Error "[ns_adp_argv 0]: Unable to recall
                }
              }

       If the preceding Tcl has been executed (perhaps during server startup), then the following  ADP  fragment
       displays the results of a database query in a table, or shows "No rows in result." if there are no rows:

              <%
                set rows {}
                set db [ns_db gethandle]
                ns_db exec "select somecolumn from sometable"
                set row [ns_db bindargs $db]
                while {[ns_db getrow $db $row] > 0} {
                   lappend rows [ns_set get $row "somecolumn"]
                }
                ns_db releasehandle $db
              %>
              <remember name="hasrows_header">
              <table>
              </remember>
              <remember name="hasrows_rows">
              <tr>
                <td><%=$column%></td>
              </tr>
              </remember>
              <remember name="hasrows_footer">
              </table>
              </remember>
              No rows in result.
              <remember name="norows">
              <%
                if {[llength $rows] > 0} {
                   recall "hasrows_header"
                   foreach row $rows {
                     set column $row
                     recall "hasrows_rows"
                   }
                   recall "hasrows_footer"
                } else {
                   recall "norows"
                }
              %>

       The following example demonstrates the use of ns_adp_registertag:

              ns_adp_registertag printdate {
                The current date is: <%=[ns_httptime [ns_time]]%>
              }
       Once defined, typically in a startup script, you could simple include the "<printdate>" tag to append the
       text with current date into the output buffer.

SEE ALSO

       ns_adp(1), ns_adp_eval(n), ns_adp_safeeval(n), ns_adp_include(n)

KEYWORDS

       ADP, dynamic pages, registered tag

AOLserver                                              4.0                        ns_adp_registertag(3aolserver)