Provided by: aolserver4-dev_4.5.1-16_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