[ic] Did you know about [output] and [unpack]? (Part of a series)

Mike Heins mike at perusion.com
Sat May 28 13:45:03 EDT 2005


OVERVIEW
  Interchange can simply read an HTML page and output it to the HTTP
  server. Without ITL tag substitution, though, you might as well just use
  an HTTP server.

  In the simplest form, an ITL page is an HTML page with a few ITL tags in
  it. The following is an example:

     <html>
     <head><title>A page</title></head>
     <body>

      [if value fname]
          I recognize you! Hi, [value fname].
      [else]
          Welcome, stranger.
      [/else]
      [/if]

        Some static page content.

      </body>
      </html>

  This is difficult to deal with on a large scale, though. Were the page
  to get more complex with complicated style, you would not want to have
  to rewrite and maintain sections of each page that are identical.

  In practice, most HTML pages have a content area that changes, and that
  would be contained within some wrapping HTML. To simplify this wrapping,
  Interchange uses a TOP and BOTTOM templating approach.

  Therefore, an Interchange page as shown in the demos takes the form:

     [set page_title]A page[/set]

     @_NOLEFT_TOP_@

      Some page content. 
      [if value fname]
          I recognize you! Hi, [value fname].
      [else]
          Welcome, stranger.
      [/if]

     @_NOLEFT_BOTTOM_@

  The "@_NOLEFT_TOP_@" is an Interchange Variable which can contain some
  common elements for a page. By naming convention, this page would be
  called the "noleft" template.

  The [set page_title] ... [/set] sets an Interchange scratch variable so
  that it can be referenced later in the page.

About Variable Replacement
  Variable substitution is a simple and often used feature of Interchange
  templates. It allows you to set a variable to a particular value set up
  in a database or configuration files. Then, by placing that variable
  name on a page, you invoke that value to be used. Before anything else
  is done on a template, all variable tokens are replaced by variable
  values. There are three types of variable tokens:

  __VARIABLENAME__ is replaced by the catalog variable called
  VARIABLENAME.

  @@VARIABLENAME@@ is replaced by the global variable called VARIABLENAME.

  @_VARIABLENAME_@ is replaced by the catalog variable VARIABLENAME if it
  exists; otherwise, it is replaced by the global variable VARIABLENAME.

  In Interchange page templates, these variable values are used to hold
  the relatively-unchanging parts of the page -- i.e. the template.

Page flow
  In the latest version of Interchange, 5.3.1 as of this writing, there is
  this flow for an interchange page.

  1.  Page is read as a result of a request.

  2.  Variable substitution is done.

  3.  Page is parsed by the Interchange page interpolation routines. The
      "[output ..]" tag sends page output to arbitrary buffers.

  4.  Page output is remapped to a template -- usually located in
      include/layout -- and sent to the HTTP server.

  The [output ..] tag allows you to set a page region out of sequence. If
  output is always sequential, you must obviously set the page title
  before you output the <head> region of your page. Using Interchange's
  [output] allows you to set the title any time before the final unpacking
  of the layout.

The [output] and [unpack] tags
  The [output] tag routes all subsequent output to a named region, until
  such time as you change that with another [output] tag.

  Here is a small example of how to create a page using this approach.

     [output name=foo]
       Send this to the foo output.

     [output name="footer"]
       Send this to the footer output.

     [output name="title"]
       Send this to the title output.
  
     [output name="bar"]
       Send this to the bar output.

     [output name=""]
       Revert to the default output.

  The unnamed output area is the default output, and is selected to begin
  with.

  To unpack output from the buffers, you use the unpack tag:

      [unpack]
      <html>
      <head>
          <title>{{TITLE}}</title>
      </head>
      <body>

      <div style="border: 1px solid black">
          {{BAR}}
      </div>

      {{:DEFAULT}}

      <div style="border: 1px solid black">
      {{FOO}}
      </div>

      <address>{{FOOTER}}</address>
      </body>
      [/unpack]

  Note the {{SECTION}} markers. These are used by the [unpack] tag to find
  where to place the output from the various sections. (It should be
  obvious that {{FOO}} will receive the output of the [output name=foo],
  but sometimes we should actually confirm the obvious.)

Summary
  Interchange 5.x can be powerfully used as a templating system for
  managing content. Once you have templates properly set up, maintaining
  pages is pretty easy.

  Learn to use the [output ...] tag and the [unpack ..] templating
  approach, and it can simplify quite a few things.

-- 
Mike Heins
Perusion -- Expert Interchange Consulting    http://www.perusion.com/
phone +1.765.647.1295  tollfree 800-949-1889 <mike at perusion.com>

"Even if you're on the right track, you'll get run over if you just
sit there." -- Will Rogers


More information about the interchange-users mailing list