|
The Pedserve system does not use any static HTML pages - it generates all the HTML on-the-fly. Though please note it is easy to merge a Pedserve-driven database into an existing website of static pages, including adding in links to your static pages from the Pedserve-generated pages. Within your website files, Pedserve comprises primarily a collection of Perl scripts that go in your cgi-bin directory.
Overall page layout in Pedserve is controlled using Page hooks and Panel hooks.
Page hooks provide the means for you to control much of the overall HTML framework of generated pages.
Each generated page comprises the following elements (click here for diagram):
- Site Menu - Typically on the left side, this is the top-level navigation menu, containing links to the main pages of the system, and a logout link. The contents of this menu vary depending on whether the user is logged in or not, and whether or not the user is logged in as the administrator. Site menu items are normally constant throughout all logged-in pages.
- Page Heading - Contains the page heading within the main browser window. This may simply be an
<h1> tag e.g. as in the Search page, or may contain other information e.g. in the 'animal details' page, this contains the animal name, DOB etc.
- Page Menu - This contains a menu of options that are specific to a particular page. Its optional - there might not be a page menu at all e.g. as on the Search page. A good example of the use of the page menu is for the animal details page, where the page menu items contain links to display all sorts of different pages specific to the selected animal.
- Content - Below the page menu is the 'content' area. Most pages in Pedserve use a single 'panel' as their content. In the example opposite, there is a single panel comprising an options bar (containing pull-down selectors), and a pedigree table. The structure of panels can also be customized, using panel hooks.
- Page Footer - This typically comprises a warning against harvesting the database, and the Pedserve copyright message (which may not be removed). If you want to alter the warning message, click here.
The following hooks let you alter/control this page structure. Note that some aspects of the page appearance are controlled by the stylesheet, which you may want to customize as well.
| Hook Function |
Description |
hookPage_AddSiteMenuItem |
Called to add a main menu item - an item for the 'site menu'. Multiple calls to this are usually made before any part of the page is output - each one to 'declare' a menu item that is to go in the site menu. The default implementation causes site menu items to be placed in a bar to the left side of the page (positioned using CSS).
You would reimplement this if you needed complete control of how the site menu is output. If all you want to change is minor aspects of its appearance, you may well be able to do this by just adjusting the stylesheet.
Show/Hide Sample Code
# Variables used to capture state etc. passed to various of our hooks:
our @our_astrPage_SiteMenuItem_Labels = ();
our @our_astrPage_SiteMenuItem_URLs = ();
our @our_anPage_SiteMenuItem_Flags = ();
.
.
# Hook thats called to add a menu item for the 'site menu'. Multiple calls to
# this are usually made before any part of the page is emitted - each one to
# 'declare' each menu item that is to go in the site menu.
#
# The difference between page menu and site menu items is that page menu items
# typically vary from one page to another, whereas site menu items are normally
# constant throughout the logged-in pages.
#
# The default implementation of these hooks places site menu items in a bar on
# the left side of the page, and page menu items in a bar across the top of the
# page beneath the context heading. The positioning of the site menu is controlled
# through the stylesheet.
#
# Arg 1 - label
# Arg 2 - target URL
# Arg 3 - flags
# OPTIONAL
# Arg 4 - reference to map for future additional arguments; possibly undefined
sub hookPage_AddSiteMenuItem {
my ($strLabel, $strURL, $nFlags, $rmArgsEx) = @_;
# A typical implementation of this hook just stores the parameters.
# These are then used by your &hookPage_AfterOpeningBodyTag() to
# generate + emit the HTML of the site menu.
push(@::our_astrPage_SiteMenuItem_Labels, $strLabel);
push(@::our_astrPage_SiteMenuItem_URLs, $strURL);
push(@::our_anPage_SiteMenuItem_Flags, $nFlags);
}
|
hookPage_AddCustomSiteMenuItems |
Called to let you add custom site menu items to Pedserve generated pages. The hook is called twice - once near the beginning of the site menu, and once at the end, allowing you to insert custom site menu items at the top and bottom of the site menu.
E.g. you could reimplement this hook to add in links to other parts of your website.
Show/Hide Sample Code
# Hook thats called to add custom site menu items.
# Called twice - once at the beginning of the site menu (to insert items at
# the start of the menu), and once at the end (to insert items at the end of the menu).
#
# Arg 1 - flag: 0 when called before any other site items have been added (though,
# after any home page link); or 1 after standard site items have been added.
# Arg 2 - flag: 0 if logged out, or 1 if logged in or an open system
# OPTIONAL
# Arg 3 - reference to map for future additional arguments; possibly undefined
sub hookPage_AddCustomSiteMenuItems {
my ($fPosition, $fLoggedIn, $rmArgsEx) = @_;
if ($fPosition) {
&pdsPageAddSiteMenuItem("About Me",
&pdsMakeStaticFileURL('aboutme.html'), $::c_CMDITEM_ENABLED);
&pdsPageAddSiteMenuItem("Google", 'http://www.google.com', $::c_CMDITEM_ENABLED);
}
}
|
hookPage_AddPageMenuItem |
Called to add a menu item for the 'page menu'. Multiple calls to this may be made before any part of the page is output - each one to 'declare' a menu item that is to go in the page menu. The default implementation causes page menu items to be laid out in a bar across the top of the page beneath the page heading.
You would reimplement this if you needed complete control of how the page menu is output. If all you want to change is minor aspects of its appearance, you may well be able to do this by just adjusting the stylesheet.
Show/Hide Sample Code
# Variables used to capture state etc. passed to various of our hooks:
our @our_astrPage_PageMenuItem_Labels = ();
our @our_astrPage_PageMenuItem_URLs = ();
our @our_anPage_PageMenuItem_Flags = ();
.
.
# Hook thats called to add an item for the 'page menu'. Multiple calls to this
# may be made before any part of the page HTML is actually emitted - each one to
# 'declare' each menu item that is to go in the page menu.
#
# The difference between page menu and site menu items is that page menu items
# typically vary from one page to another, whereas site menu items are normally
# constant throughout the logged-in pages.
#
# The default implementation of these hooks places site menu items in a bar on
# the left side of the page, and page menu items in a bar across the top of the
# page beneath the context heading.
#
# Arg 1 - label
# Arg 2 - target URL
# Arg 3 - flags
# OPTIONAL
# Arg 4 - reference to map for future additional arguments; possibly undefined
sub hookPage_AddPageMenuItem {
my ($strLabel, $strURL, $nFlags, $rmArgsEx) = @_;
# A typical implementation of this hook will just store the parameters.
# These are then used by &hookPage_OutputPageMenu() to subsequently
# generate + emit the HTML of the site menu.
push(@::our_astrPage_PageMenuItem_Labels, $strLabel);
push(@::our_astrPage_PageMenuItem_URLs, $strURL);
push(@::our_anPage_PageMenuItem_Flags, $nFlags);
}
|
hookPage_SetContextHeadingHTML |
Called to set the 'context heading' HTML for a page. This is the 'page heading'.
Show/Hide Sample Code
# Variables used to capture state etc. passed to various of our hooks:
our $our_htmlPage_ContextHeading = '';
.
.
# Hook thats called to set the 'context heading' HTML for a page. This is called prior
# to any part of the page being emitted, to set the HTML that is to be displayed at the
# top of the page. This contains the 'page heading'.
#
# Arg 1 - html
# OPTIONAL
# Arg 2 - reference to map for future additional arguments; possibly undefined
sub hookPage_SetContextHeadingHTML {
my ($html, $rmArgsEx) = @_;
# A typical implementation of this hook just stores the HTML text.
# This is then emitted by &hookPage_AfterOpeningBodyTag() later.
$::our_htmlPage_ContextHeading = $html;
}
|
hookPage_SetContentTitle |
Called to set the 'content title' for a page. This is plain text that, if present, would typically be output using an <h1> tag somewhere near the top of the page. This should not be confused with the window title that gets displayed in the title bar, and is set using <title>; that is handled internally by Pedserve.
Show/Hide Sample Code
# Variables used to capture state etc. passed to various of our hooks:
our $our_strPage_ContentTitle = '';
.
.
# Hook thats called to set the 'content title' for a page. This is plain text that,
# if present, would typically be output using an <h1> tag somewhere near the
# top of the page. This should not be confused with the window title
# that gets displayed in the title bar, and set using <title>; that is handled
# internally by pedserve.
#
# Arg 1 - title
# OPTIONAL
# Arg 2 - reference to map for future additional arguments; possibly undefined
sub hookPage_SetContentTitle {
my ($strTitle, $rmArgsEx) = @_;
# A typical implementation of this hook just stores the text.
# This is then used by hookPage_OutputContentTitle() to generate + emit
# the HTML of the content title.
$::our_strPage_ContentTitle = $strTitle;
}
|
hookPage_AdjustBodyAttrs |
Lets you customize the attributes of the HTML header and the body tag just before it is emitted. A reference to a map is passed as the single argument. This is the map that Pedserve will then pass to CGI.pm::start_html() to output the HTML header (Pedserve uses the CGI.pm package to help with HTML generation).
Show/Hide Sample Code
# Hook to customize the attributes of the HTML header and the body tag.
# A reference to a map is passed as the single argument. This is the map
# that pedserve will then pass to CGI.ppm::start_html() to output the HTML header.
#
# Arg 1 - reference to attribute map
# OPTIONAL
# Arg 2 - reference to map for future additional arguments; possibly undefined
sub hookPage_AdjustBodyAttrs {
my ($rmstrAttrs, $rmArgsEx) = @_;
# This example just shows how to set an attribute that will be passed to
# CGI.pm when emitting the <body> tag. Here we set text to be blue.
# In practice you wouldnt want to do this; colors etc. are much better
# controlled through the stylesheet.
$$rmstrAttrs{'-text'} = 'blue';
}
|
hookPage_AfterOpeningBodyTag and hookPage_BeforeClosingBodyTag |
These 2 hooks are called (i) immediately after the opening <body> tag, and (ii) immediately before the closing </body> tag of a page has been emitted. You can use this to emit any HTML you like.
You would reimplement either or both of these if you want to embed the HTML 'content' - everything that goes between <body> and </body> - within some custom HTML framework e.g. to impart your own page layout on all generated pages.
Show/Hide Sample Code - After Opening Body Tag
# Variables used to capture state etc. passed to various of our hooks:
our @our_astrPage_SiteMenuItem_Labels = ();
our @our_astrPage_SiteMenuItem_URLs = ();
our @our_anPage_SiteMenuItem_Flags = ();
.
.
# Hook thats called immediately after the opening <body> tag of a
# page has been emitted. You can use this to apply overall page formatting.
# See also the corresponding function &hookPage_BeforeClosingBodyTag()
# thats called immediately prior to the closing </body> is output.
#
# OPTIONAL
# Arg 1 - reference to map for future additional arguments; possibly undefined
sub hookPage_AfterOpeningBodyTag {
my ($rmArgsEx) = @_;
# This implementation outputs the site menu items in a <div>
# using a css selector that causes the menu to be output in a bar on
# the left side of the page, and then opens a new <div> for the page content.
# Start the Menu div:
print "<div id='Menu'>\n";
# Emit main menu items:
my @ahtmlTmp = ();
for (my $i = 0; $i < scalar(@::our_astrPage_SiteMenuItem_Labels); $i++) {
my $strLabel = $::our_astrPage_SiteMenuItem_Labels[$i];
my $strURL = $::our_astrPage_SiteMenuItem_URLs[$i];
my $nFlags = $::our_anPage_SiteMenuItem_Flags[$i];
my $htmlItem = &pdsStyleMakeCmdItemHTML($strLabel, $strURL, $nFlags, 'pds-sitemenu-cmd');
push(@ahtmlTmp, $htmlItem);
}
print $::g_q->div({'-class' => 'pds-sitemenu-div'}, join($::g_q->br, @ahtmlTmp));
# End the Menu div, then start the Content div:
print "</div><div id='Content'>\n";
}
Show/Hide Sample Code - Before Closing Body Tag
# Hook thats called immediately before the closing </body> tag
# of a page has been emitted. See also the corresponding function
# &hookPage_AfterOpeningBodyTag() thats called immediately after the
# opening <body> has been output.
#
# OPTIONAL
# Arg 1 - reference to map for future additional arguments; possibly undefined
sub hookPage_BeforeClosingBodyTag {
my ($rmArgsEx) = @_;
# Our implementation closes the <div> that
# &hookPage_AfterOpeningBodyTag() left open:
print "</div>\n";
}
|
hookPage_OutputStandardElements |
Emits the standard page elements - context heading, page menu and content title. This controls the order of those elements on the page.
Infrequently reimplemented.
Show/Hide Sample Code
# Hook thats called to output the standard page elements -
# context heading, page menu and content title. This is what controls
# the order of those elements on the page.
#
# OPTIONAL
# Arg 1 - reference to map for future additional arguments; possibly undefined
sub hookPage_OutputStandardElements {
my ($rmArgsEx) = @_;
# The default implementation simply calls &hookPage_OutputContextHeading(),
# &hookPage_OutputPageMenu() and &hookPage_OutputContentTitle()
# - in that order.
&hookPage_OutputContextHeading();
&hookPage_OutputPageMenu();
&hookPage_OutputContentTitle();
}
|
hookPage_OutputContextHeading |
Emits the standard 'context heading' page element. This is normally the first real element that gets output on the page.
Show/Hide Sample Code
# Variables used to capture state etc. passed to various of our hooks:
our $our_htmlPage_ContextHeading = '';
.
.
# Hook thats called to output the standard 'context heading' page element.
# This is normally the first real element that gets output on the page.
#
# OPTIONAL
# Arg 1 - reference to map for future additional arguments; possibly undefined
sub hookPage_OutputContextHeading {
my ($rmArgsEx) = @_;
# Our implementation simply outputs the HTML that was captured
# by &hookPage_SetContextHeadingHTML:
if ($::our_htmlPage_ContextHeading ne '') {
print $::our_htmlPage_ContextHeading;
}
}
|
hookPage_OutputPageMenu |
Emits the page menu. This is normally output immediately after the context heading.
Show/Hide Sample Code
# Variables used to capture state etc. passed to various of our hooks:
our @our_astrPage_PageMenuItem_Labels = ();
our @our_astrPage_PageMenuItem_URLs = ();
our @our_anPage_PageMenuItem_Flags = ();
.
.
# Hook thats called to output the 'page menu' element.
# This is normally output immediately after the context heading.
#
# OPTIONAL
# Arg 1 - reference to map for future additional arguments; possibly undefined
sub hookPage_OutputPageMenu {
my ($rmArgsEx) = @_;
# The default implementation outputs the page menu items in a
# <div> using a css selector that causes them to be displayed in
# a horizontal 'ribbon' below the context heading.
my @ahtmlTmp = ();
for (my $i = 0; $i < scalar(@::our_astrPage_PageMenuItem_Labels); $i++) {
my $strLabel = $::our_astrPage_PageMenuItem_Labels[$i];
my $strURL = $::our_astrPage_PageMenuItem_URLs[$i];
my $nFlags = $::our_anPage_PageMenuItem_Flags[$i];
my $htmlItem =
&pdsStyleMakeCmdItemHTML($strLabel, $strURL, $nFlags, 'pds-pagemenu-cmd');
push(@ahtmlTmp, $htmlItem);
}
if (scalar(@ahtmlTmp) > 0) {
print $::g_q->div({'-class' => 'pds-pagemenu-div'},
join(" $::custom_htmlStdSep ", @ahtmlTmp));
}
}
|
hookPage_OutputContentTitle |
Emits the 'page content title' element. This is normally output immediately after both the context heading and the page menu. Most pages do not have a 'content title'.
Show/Hide Sample Code
# Variables used to capture state etc. passed to various of our hooks:
our $our_strPage_ContentTitle = '';
.
.
# Hook thats called to output the 'page content title' element.
# This is normally output immediately after both the context heading
# and the page menu.
#
# OPTIONAL
# Arg 1 - reference to map for future additional arguments; possibly undefined
sub hookPage_OutputContentTitle {
my ($rmArgsEx) = @_;
# Our implementation simply outputs any text that was captured by
# &hookPage_SetContextHeadingHTML() using the heading tag <h1>.
# Remember to apply escapeHTML() to any text.
if ($::our_strPage_ContentTitle ne '' ) {
print $::g_q->h1($::g_q->escapeHTML($::our_strPage_ContentTitle));
}
}
|
hookPage_FrontPageContent |
Emits the logged-in front page 'content', if your site uses such a 'front page'. The 'front page' can be considered as the 'welcome' page that is displayed immediately after logging in. It isnt necessary to have a 'front page' - you can configure the system to immediately display the main search page upon logging in.
Show/Hide Sample Code
# Hook thats called to display the logged-in front page
# 'content', if your site uses such a 'front page'.
# (see config variable custom_fEnablePage_Front)
#
# OPTIONAL
# Arg 1 - reference to map for future additional arguments; possibly undefined
sub hookPage_FrontPageContent {
my ($rmArgsEx) = @_;
# Our implementation displays a welcome message and any
# 'message of the day' message.
# Output welcome message:
print $::g_q->p($::g_q->escapeHTML(
"Welcome to $::custom_strSiteTitle, "
."a pedigree database site run by $::custom_strSiteOwner."));
# Output any message of the day:
my $strMessageOfTheDay = &pdsDbGetMOTD();
if ($strMessageOfTheDay ne '') {
print $::g_q->p($::g_q->escapeHTML($strMessageOfTheDay));
}
}
|
The 'content' area within each page typically consists of one or more 'panels', stacked vertically. Currently, only the 'Entire Details' page comprises multiple panels; most pages have a single panel.
A panel has a heading comprising an optional title, and an options bar (also optional). The options bar typically contains pull-down menus (<select> tags). Beneath which is the actual panel output - such as a pedigree table, or a search results table.
The following hooks are provided to let you alter the panel structure.
| Hook Function |
Description |
hookPanel_SetTitle |
Called to set the title for a panel.
Show/Hide Sample Code
# Variables used to capture state etc. passed to various of our hooks:
our $our_strPanel_Title = '';
.
.
# Hook that sets the title for a panel.
#
# Arg 1 - title
# OPTIONAL
# Arg 2 - reference to map for future additional arguments; possibly undefined
sub hookPanel_SetTitle {
my ($strTitle, $rmArgsEx) = @_;
# Typical implementations of this hook simply store the title text,
# for subsequent output by &hookPanel_OutputTitle().
$::our_strPanel_Title = $strTitle;
}
|
hookPanel_AddOptionsBarElement |
Called to add an element for the options bar area.
Show/Hide Sample Code
# Variables used to capture state etc. passed to various of our hooks:
our @our_afPanel_OptionsBarElement_NeedsSeparatorBefore = ();
our @our_anPanel_OptionsBarElement_Groupings = ();
our @our_ahtmlPanel_OptionsBarElement_Elements = ();
.
.
# Hook that adds an element for the options bar area.
#
# Arg 1 - flag: whether or not this element require a separator with
# any preceding options bar element?
# Arg 2 - grouping value: elements with the same grouping value should
# be placed together in the options bar when it is generated.
# Arg 3 - element HTML
# OPTIONAL
# Arg 4 - reference to map for future additional arguments; possibly undefined
sub hookPanel_AddOptionsBarElement {
my ($fNeedsSeparatorBefore, $nGrouping, $htmlElement, $rmArgsEx) = @_;
# All implementations of this hook should capture the element label,
# grouping value, + html then use the captured data in
# &hookPanel_OutputOptionsBar() to format and output the options bar
# in the manner chosen.
push(@::our_afPanel_OptionsBarElement_NeedsSeparatorBefore, $fNeedsSeparatorBefore);
push(@::our_anPanel_OptionsBarElement_Groupings, $nGrouping);
push(@::our_ahtmlPanel_OptionsBarElement_Elements, $htmlElement);
}
|
hookPanel_OutputStandardElements |
Called at the start of a panel, this is responsible for emitting the standard panel elements - the panel title and the options bar.
You might want to reimplement this (and hookPanel_End) if you wanted to embed the HTML of every panel within some custom HTML e.g. as part of a custom page layout.
Show/Hide Sample Code
# Hook thats called to output the standard elements at the start of
# a panel. The standard panel elements are the panel title and options bar. This is called
# before the actual 'panel content' gets emitted.
#
# OPTIONAL
# Arg 1 - reference to map for future additional arguments; possibly undefined
sub hookPanel_OutputStandardElements {
my ($rmArgsEx) = @_;
# We simply call the hook functions that will output the title and
# options bar, in that order:
&hookPanel_OutputTitle();
&hookPanel_OutputOptionsBar();
}
|
hookPanel_End |
Called at the end of a panel.
Show/Hide Sample Code
# Variables used to capture state etc. passed to various of our hooks:
our $our_strPanel_Title = '';
our @our_afPanel_OptionsBarElement_NeedsSeparatorBefore = ();
our @our_anPanel_OptionsBarElement_Groupings = ();
our @our_ahtmlPanel_OptionsBarElement_Elements = ();
.
.
# Hook thats called at the end of the panel. You should reset any panel state
# data to their initial values - in case the current page contains multiple panels.
#
# OPTIONAL
# Arg 1 - reference to map for future additional arguments; possibly undefined
sub hookPanel_End {
my ($rmArgsEx) = @_;
# Now we reset our panel state variables, in case there are
# multiple panels on the page.
$::our_strPanel_Title = '';
@::our_afPanel_OptionsBarElement_NeedsSeparatorBefore = ();
@::our_anPanel_OptionsBarElement_Groupings = ();
@::our_ahtmlPanel_OptionsBarElement_Elements = ();
}
|
hookPanel_Output |
Emits HTML to the current panel.
Show/Hide Sample Code
# Hook thats called to output HTML to the current panel.
#
# Arg 1 - the HTML to be output.
# OPTIONAL
# Arg 2 - reference to map for future additional arguments; possibly undefined
sub hookPanel_Output {
my ($html, $rmArgsEx) = @_;
# Our implementation is simply emits the HTML.
# An alternative technique is to capture the output (accumulating it
# in a global string variable), and then output it all at once in hookPanel_End(),
# perhaps enclosed in some other HTML framework etc.
print $html;
}
|
hookPanel_OutputTitle |
Emits the standard panel element 'title'.
Infrequently reimplemented.
Show/Hide Sample Code
# Variables used to capture state etc. passed to various of our hooks:
our $our_strPanel_Title = '';
.
.
# Hook thats called to output the standard panel element 'title'.
#
# OPTIONAL
# Arg 1 - reference to map for future additional arguments; possibly undefined
sub hookPanel_OutputTitle {
my ($rmArgsEx) = @_;
# Typical implementation will simply output any title captured
# by &hookPanel_SetTitle() using suitable tags such as <h1>.
if ($::our_strPanel_Title ne '' ) {
&hookPanel_Output($::g_q->h1($::g_q->escapeHTML($::our_strPanel_Title)));
}
}
|
hookPanel_OutputOptionsBar |
Emits the standard panel element 'options bar'.
Reimplement this if you want complete control over how the options bar is laid out. But if all you want to do is change some visual aspects of the options bar, you may well be able to do this by just adjusting the stylesheet.
Show/Hide Sample Code
# Variables used to capture state etc. passed to various of our hooks:
our @our_afPanel_OptionsBarElement_NeedsSeparatorBefore = ();
our @our_anPanel_OptionsBarElement_Groupings = ();
our @our_ahtmlPanel_OptionsBarElement_Elements = ();
.
.
# Hook thats called to output the standard panel element 'options bar'.
#
# OPTIONAL
# Arg 1 - reference to map for future additional arguments; possibly undefined
sub hookPanel_OutputOptionsBar {
my ($rmArgsEx) = @_;
# Our implementation will output the labels+elements that were captured
# by &hookPanel_AddOptionsBarElement() in a 'ribbon' bar.
# We must process them first in grouping order, and then order within group
# is the order in which the option elements were added.
my $nElts = scalar(@::our_afPanel_OptionsBarElement_NeedsSeparatorBefore);
my %mnGroupings = ();
for (my $nElt = 0; $nElt < $nElts; $nElt++) {
$mnGroupings{$::our_anPanel_OptionsBarElement_Groupings[$nElt]} = 1;
}
my $fFirst = 1;
my $html = '';
foreach my $nGrouping (sort keys(%mnGroupings)) {
for (my $nElt = 0; $nElt < $nElts; $nElt++) {
next if $::our_anPanel_OptionsBarElement_Groupings[$nElt] != $nGrouping;
my $htmlElt = $::our_ahtmlPanel_OptionsBarElement_Elements[$nElt];
next if $htmlElt eq '';
if ($html ne '') {
if ($::our_afPanel_OptionsBarElement_NeedsSeparatorBefore[$nElt]
&& !$fFirst) {
$html .= " $::custom_htmlStdSep ";
} else {
$html .= ' ';
}
$fFirst = 0;
}
$html .= $htmlElt;
}
}
# If there is any HTML to output, enclose it within a form within div:
if ($html ne '') {
# Generate the form:
my %mFormAttrs = ();
$mFormAttrs{'-method'} = 'GET';
$mFormAttrs{'-name'} = &pdsPanelGetOptionsBarFormID();
$html .= &pdsPageGetSelfArgsAsHiddenFieldsHTML();
my $htmlForm = $::g_q->start_form(\%mFormAttrs).$html.$::g_q->endform();
# Enclose the form within a <div>, with css class 'pds-optionsbar-div':
$html = $::g_q->div({'-class' => 'pds-optionsbar-div'}, $htmlForm);
}
# Now output it, using the output hook:
&hookPanel_Output($html);
}
|
|

Generated Page Structure

Generated Panel Structure
|
USEFUL LINKS:
EULA
Pedserve Editions
Sample City
Consultancy
Data Preparation
Installation
Regular Expressions
Similarity Searching
Configuration File
Setup Script
Stylesheet
Database Design
Hooks
Date/Time
User Defined Fields
User Defined Records
Display Fields Definitions
Ordering Fields Definitions
Highlighting
Page Layout
Field Definitions
Field Formatting
Shortcut Query Buttons
Plates
Command Buttons
Connecting to the Database
Warning Footer Message
|