The Section class handles configuration, publication, and other management
of website sections.
Formally, a section is a group of pages with similar publication and
access control attributes. All static pages in a section publish into
the same directory, and all member-only pages are accessible by the
same group of members.
Many small websites are configured as a single section; therefore the
terms ``section'', ``website'', and ``site'' are sometimes used
interchangeably.
ExSite::Section is part of the ExSite content stack, so it inherits
from ExSite::Page, which in turn inherits from ExSite::Content,
ExSite::ContentData, and ExSite::ContentBase.
Note that sections have somewhat different behaviours, depending on their
type:
- stand-alone website
-
``Stand-alone'' means the section must explicitly specify its
publication folder (as a complete directory path), and its domain
name.
- native website
-
``Native'' means the section implicitly infers its publication path and
domain name from the parent section. If there is no parent, then these
are inferred from the ExSite system configuration. The publication
directory is simply a directory name.
- website template
-
A website template is a model section, used to initialize new sections
with the same pages that the website template has. Website templates
do not publish.
(This method is actually inherited from ExSite::ContentBase.)
Instantiate and/or configure a section object. %option includes the
the configuration parameters, described below.
Usage:
my $section = new ExSite::Section(%option);
$section->setup(%option);
$section->setupSection(%option);
setup and setupSection are synonymous; they are used to setup or
reconfigure an existing Section object. new() instantiates a new section
object (this method is actually inherited from ExSite::ContentBase).
%option is used to pass the section description information that
allows the object to be configured. It can include the following section
description parameters:
- id
-
The numeric section ID will be used to fetch the section description from
the database.
- section
-
The section record can be passed as a hash reference, if it has already been
fetched.
If the section is not set up with an actual section description, the object
will have limited functionality. The setup methods are normally invoked
automatically by the class constructor method new(), which receives the
same %option parameters.
Returns the publication name of the section. This is only meaningful
for native websites.
Returns the full disk path where the section's files will be published.
The disk path depends on the section's type and relationship to its
parent section.
(DEPRECATED) Returns the path relative to the webroot where the
section's files will be found.
Returns the URL to the section. The URL references the section
directory, which normally defaults to the index.html or equivalent
file published in that directory. The URL includes the hostname
and protocol information.
Returns just the machine name part of the URL, eg. ``www.mydomain.com''.
Sections can be nested to any depth. This method returns an array of
section objects representing all sections in this path, from the root
section to the current section.
Returns the sectionpath() as a simple string, of the format
``/section1/section2/...''. Native sections in the path will be named
for their publication location; stand-alone sections will be named
using their section ID. For instance:
/native1/2/native3
This might represent a native website ``native3'' that is a child of a
stand-alone website (section ID 2), which is a child of a native
website ``native1''. Note that this in turn may be a child of a native
website with a blank publication directory. (The root section in a
system is typically a native website with no publication directory,
since it publishes to the default directory specified by the
webserver.)
Returns an array of page objects for all of the active pages in the
section.
Returns an ExSite::Tree object containing all of the section's
pages organized into a site map. The site map ignores the page
visibility attribute that determines whether to include the pages in
displayed site maps and menus, so code that constructs such menus
should consider the page's visibility when deciding whether to show
each page.
Returns an array of library records (not objects) that are accessible
to the current section. This includes libraries in the current
section, shared libraries in the the sectionpath, and public libraries
anywhere in the system.
Returns an array of content objects for all of the content in all of
the libraries returned by the previous method.
Returns all templates available to the section, as an array of
page records. This may include templates from other sections, depending
on their privacy settings and relationship to the current section.
my @templates = $section->get_templates(%option)
%option can specify:
- section_id
-
This is the section to search under, if not the current section.
- mode
-
This is an integer that determines which templates will be selected
for inclusion:
- ``-1''
-
select all templates on the system (administrators only, otherwise
treated as 0)
- ``0''
-
select templates useable by this site (default) (use when changing
template of a site)
- ``1''
-
select templates useable by children of this site
(use when creating a child site)
- ``2''
-
select public templates only
(use when creating a new independent site)
$section->set_template($template)
Changes the graphic design template for the section to $template (which
may be a page ID, or a page hashref). If allowed, the section's default
template is changed, and all of the regular pages are changed to use the
template. Nothing is returned.
If not allowed, an error message is returned, which can be issued
directly to the browser.
Returns an array of content records, representing model page bodies that
can be used by the current section. These can be used to initialize the
body of any page in the current section.
Returns an array of services running on this section. A service is
a special record connecting a section to a DCD (plug-in). It is used
for authorizing access to restricted-access DCDs, and finding special
service pages that should be used to handle all requests to a DCD.
Finds pages using a particular DCD (plug-in).
my @pages = $section->find_dcd($module);
Returns an array of page records representing those pages that contain
a tag invoking the DCD $module in the newest revision of their content.
WARNING: you need write access to the section's publication area to
publish files there. The webserver normally does not have this
access. Negotiating this access is normally done by the publish
program (ie. publish.cgi), which has special permissions. If you do
not have these permissions, then you have to ask publish.cgi to do
this task on your behalf, using ExSite::Util::run_publisher().
$section->publish($opt);
Creates the section directories on disk, and publishes all publishable
pages and content to these directories. If $opt is set to
``nofiles'', then only the section's base directory is created, and
nothing is published to it. Otherwise, pages are recursively
published by instantiating page objects for each, and invoking the
publish() method on each.
If $config{search}{reindex_on_publish} is TRUE, then the section's
search index will also be rebuilt at this time.
The output of the publish method is printed direct to stdout, so that
progress can be monitored in real time. Otherwise for large sections,
long delays can be experienced as the lengthy publish output is
buffered until completion. This is why publish progress screens are
not templated.
Removes a section's files from disk. Recursively unpublishes each
page by callings its unpublish() method, and recursively
unpublishes child sections as well.
my @errors = $section->validate($sectiondata);
if (@errors == 0) { # section is OK }
Returns TRUE if the values in the the $sectiondata hashref comprise
a valid and legal page description. Returns an array of error
messages, which will be empty if the section data validates.
$section->make($sectiondata,$template,$approve_flag);
$section->install($sectiondata,$template);
Creates a new section using the attributes in the $sectiondata hashref.
The make() and make_section() versions perform validation and
permission checks on the section data first. The install() method
does the actual installation. $approve_flag can be used to pre-authorize
the section creation; use this if allowing unprivileged users to create
new sections on the system.
$template, if defined, is a section ID that points to a website template.
This is used to initialize the new section with preconfigured pages.
Removes the current section from the system. Records are moved to the
trash bin, and may be recovered from there. (However, large sections'
trashballs may exceed the query size limit of the database.) Attempts
to unpublish its files, as well.