本文整理汇总了PHP中Skin::build_link方法的典型用法代码示例。如果您正苦于以下问题:PHP Skin::build_link方法的具体用法?PHP Skin::build_link怎么用?PHP Skin::build_link使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Skin
的用法示例。
在下文中一共展示了Skin::build_link方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: get_event_fields
/**
* get parameters for one meeting facility
*
* @see overlays/event.php
*
* @return an array of fields or NULL
*/
function get_event_fields()
{
global $context;
// returned fields
$fields = array();
// chairman
$label = i18n::s('Chairman');
$input = $this->get_chairman_input();
$fields[] = array($label, $input);
// number of seats
$label = i18n::s('Seats');
$input = $this->get_seats_input();
$hint = i18n::s('Maximum number of participants.');
$fields[] = array($label, $input, $hint);
// dimdim account
$label = i18n::s('Account');
if (!isset($this->attributes['account'])) {
$this->attributes['account'] = '';
}
$input = '<input type="text" name="account" value ="' . encode_field($this->attributes['account']) . '" />';
$hint = sprintf(i18n::s('Enter a valid %s account'), Skin::build_link('http://www.dimdim.com/', 'DimDim', 'basic'));
$fields[] = array($label, $input, $hint);
// dimdim password
$label = i18n::s('Password');
if (!isset($this->attributes['password'])) {
$this->attributes['password'] = '';
}
$input = '<input type="text" name="password" value ="' . encode_field($this->attributes['password']) . '" />';
$fields[] = array($label, $input);
// add these tabs
return $fields;
}
示例2: layout
/**
* list versions
*
* @param resource the SQL result
* @return string the rendered text
*
* @see layouts/layout.php
**/
function layout($result)
{
global $context;
// empty list
if (!SQL::count($result)) {
$output = array();
return $output;
}
// we return an array of ($url => $attributes)
$items = array();
// process all items in the list
while ($item = SQL::fetch($result)) {
// initialize variables
$prefix = $suffix = $icon = '';
// the url to view this item
$url = '_' . $item['id'];
// Versions::get_url($item['id']);
// version description
$label = sprintf(i18n::s('edited by %s %s'), ucfirst($item['edit_name']), Skin::build_date($item['edit_date']));
// command to view this version
$suffix .= ' ' . Skin::build_link(Versions::get_url($item['id'], 'view'), i18n::s('compare to current version'), 'button');
// list all components for this item
$items[$url] = array($prefix, $label, $suffix, 'version', $icon);
}
// end of processing
SQL::free($result);
return $items;
}
示例3: elseif
/**
* display content below main panel
*
* Everything is in a separate panel
*
* @param array the hosting record, if any
* @return some HTML to be inserted into the resulting page
*/
function &get_trailer_text($host = NULL)
{
$text = '';
// display the following only if at least one comment has been attached to this page
if (is_object($this->anchor) && !Comments::count_for_anchor($this->anchor->get_reference())) {
return $text;
}
// ask the surfer if he has not answered yet, and if the page has not been locked
$ask = TRUE;
if (isset($_COOKIE['rating_' . $host['id']])) {
$ask = FALSE;
} elseif (isset($host['locked']) && $host['locked'] == 'Y') {
$ask = FALSE;
}
// ask the surfer
if ($ask) {
$text = '<p style="line-height: 2.5em;">' . i18n::s('Has this page been useful to you?') . ' ' . Skin::build_link(Articles::get_url($host['id'], 'like'), i18n::s('Yes'), 'button') . ' ' . Skin::build_link(Articles::get_url($host['id'], 'dislike'), i18n::s('No'), 'button') . '</p>';
// or report on results
} elseif ($host['rating_count']) {
$text = '<p>' . Skin::build_rating_img((int) round($host['rating_sum'] / $host['rating_count'])) . ' ' . sprintf(i18n::ns('%d rating', '%d ratings', $host['rating_count']), $host['rating_count']) . '</p>';
}
// add a title
if ($text) {
$text = Skin::build_box(i18n::s('Feed-back'), $text);
}
// done
return $text;
}
示例4: layout
/**
* list links
*
* @param resource the SQL result
* @return array of resulting items, or NULL
*
* @see layouts/layout.php
**/
function layout($result)
{
global $context;
// we return an array of ($url => $attributes)
$items = array();
// empty list
if (!SQL::count($result)) {
return $items;
}
// process all items in the list
while ($item = SQL::fetch($result)) {
// get the main anchor
$anchor = Anchors::get($item['anchor']);
// url is the link itself -- hack for xhtml compliance
$url = str_replace('&', '&', $item['link_url']);
// initialize variables
$prefix = $suffix = '';
// flag links that are dead, or created or updated very recently
if ($item['edit_date'] >= $context['fresh']) {
$suffix = NEW_FLAG;
}
// make a label
$label = Links::clean($item['title'], $item['link_url']);
// the main anchor link
if (is_object($anchor)) {
$suffix .= ' - <span class="details">' . sprintf(i18n::s('in %s'), Skin::build_link($anchor->get_url(), ucfirst($anchor->get_title()))) . '</span>';
}
// list all components for this item
$items[$url] = array($prefix, $label, $suffix, 'basic', NULL);
}
// end of processing
SQL::free($result);
return $items;
}
示例5: layout
/**
* list articles
*
* @param resource the SQL result
* @return string the rendered text
*
* @see layouts/layout.php
**/
function layout($result)
{
global $context;
// we return some text
$text = '';
// empty list
if (!SQL::count($result)) {
return $text;
}
// clear flows
$text .= '<br style="clear: left" />';
// process all items in the list
while ($item = SQL::fetch($result)) {
// get the related overlay
$overlay = Overlay::load($item, 'article:' . $item['id']);
// the url to view this item
$url = Articles::get_permalink($item);
// use the title to label the link
if (is_object($overlay)) {
$title = Codes::beautify_title($overlay->get_text('title', $item));
} else {
$title = Codes::beautify_title($item['title']);
}
// the hovering title
if ($item['introduction'] && $context['skins_with_details'] == 'Y') {
$hover = strip_tags(Codes::beautify_introduction($item['introduction']));
} else {
$hover = i18n::s('View the page');
}
// title is a link to the target article
$title =& Skin::build_link($url, $title, 'basic', $hover);
// use the thumbnail for this article
if ($icon = trim($item['thumbnail_url'])) {
// fix relative path
if (!preg_match('/^(\\/|http:|https:|ftp:)/', $icon)) {
$icon = $context['url_to_root'] . $icon;
}
// use parameter of the control panel for this one
$options = '';
if (isset($context['classes_for_thumbnail_images'])) {
$options = 'class="' . $context['classes_for_thumbnail_images'] . '" ';
}
// build the complete HTML element
$icon = '<img src="' . $icon . '" alt="" title="' . encode_field($hover) . '" ' . $options . ' />';
// use default icon if nothing to display
} else {
$icon = MAP_IMG;
}
// use the image as a link to the target page
$icon =& Skin::build_link($url, $icon, 'basic', $hover);
// add a floating box
$text .= Skin::build_box($title, $icon, 'floating');
}
// clear flows
$text .= '<br style="clear: left" />';
// end of processing
SQL::free($result);
return $text;
}
示例6: layout
/**
* list categories
*
* @param resource the SQL result
* @return string the rendered text
*
* @see layouts/layout.php
**/
function layout($result)
{
global $context;
// empty list
if (!SQL::count($result)) {
$output = array();
return $output;
}
// process all items in the list
$items = array();
$total = 0;
$minimum = 10000;
$maximum = 0;
while ($item = SQL::fetch($result)) {
// this will be sorted alphabetically
$items[$item['title']] = array('importance' => (int) $item['importance'], 'href' => Categories::get_permalink($item));
// assess the scope
if ($minimum > (int) $item['importance']) {
$minimum = (int) $item['importance'];
}
if ($maximum < (int) $item['importance']) {
$maximum = (int) $item['importance'];
}
}
// end of processing
SQL::free($result);
// sort the array alphabetically
ksort($items);
// scale items
$text = '';
foreach ($items as $title => $item) {
switch ((string) ceil((1 + $item['importance'] - $minimum) * 6 / (1 + $maximum - $minimum))) {
default:
case 1:
$item['style'] = 'font-size: 0.8em';
break;
case 2:
$item['style'] = 'font-size: 0.9em';
break;
case 3:
$item['style'] = 'font-size: 1.3em';
break;
case 4:
$item['style'] = 'font-size: 1.5em';
break;
case 5:
$item['style'] = 'font-size: 1.7em';
break;
case 6:
$item['style'] = 'font-size: 2em';
break;
}
$text .= '<span style="' . $item['style'] . '">' . Skin::build_link($item['href'], $title, 'basic') . '</span> ';
}
// final packaging
$text = '<p class="cloud">' . rtrim($text) . '</p>';
// return by reference
return $text;
}
示例7:
/**
* display content in a list of pages
*
* @param array the hosting record, if any
* @return some HTML to be inserted into the resulting page
*/
function &get_list_text($host = NULL)
{
$text = '';
// if we have a valid thumbnail, use it as a link to the anchor page
if (isset($this->attributes['thumbnail_url']) && trim($this->attributes['thumbnail_url']) && isset($this->attributes['thumbnail_width']) && isset($this->attributes['thumbnail_height'])) {
$text .= '<div style="margin: 0.3em auto">' . Skin::build_link($this->anchor->get_url(), '<img src="' . $this->attributes['thumbnail_url'] . '" width="' . $this->attributes['thumbnail_width'] . '" height="' . $this->attributes['thumbnail_height'] . '" alt="" />', 'basic') . '</div>';
}
return $text;
}
示例8: layout
/**
* list comments as successive notes in a thread
*
* @param resource the SQL result
* @return string the rendered text
**/
function layout($result)
{
global $context;
// we return formatted text
$text = '';
// empty list
if (!SQL::count($result)) {
return $text;
}
// build a list of comments
while ($item = SQL::fetch($result)) {
// automatic notification
if ($item['type'] == 'notification') {
$text = '<dd class="thread_other" style="font-style: italic;">' . ucfirst(trim($item['description'])) . '</dd>' . $text;
} else {
// link to user profile -- open links in separate window to enable side browsing of participant profiles
if ($item['create_id']) {
if ($user = Users::get($item['create_id']) && $user['full_name']) {
$hover = $user['full_name'];
} else {
$hover = NULL;
}
$author = Users::get_link($item['create_name'], $item['create_address'], $item['create_id'], TRUE, $hover);
} else {
$author = Users::get_link($item['edit_name'], $item['edit_address'], $item['edit_id'], TRUE);
}
// differentiate my posts from others
if (Surfer::get_id() && $item['create_id'] == Surfer::get_id()) {
$style = ' class="thread_me"';
} else {
$style = ' class="thread_other"';
}
// a clickable label
$stamp = '#';
// flag old items on same day
if (!strncmp($item['edit_date'], gmstrftime('%Y-%m-%d %H:%M:%S', time()), 10)) {
$stamp = Skin::build_time($item['edit_date']);
} else {
$stamp = Skin::build_date($item['edit_date']);
}
// append this at the end of the comment
$stamp = ' <div style="float: right; font-size: x-small">' . Skin::build_link(Comments::get_url($item['id']), $stamp, 'basic', i18n::s('Edit')) . '</div>';
// package everything --change order to get oldest first
$text = '<dt' . $style . '>' . $author . '</dt><dd' . $style . '>' . $stamp . ucfirst(trim($item['description'])) . '</dd>' . $text;
}
}
// end of processing
SQL::free($result);
// finalize the returned definition list
if ($text) {
$text = '<dl>' . $text . '</dl>';
}
// process yacs codes
$text = Codes::beautify($text);
return $text;
}
示例9: layout
/**
* list files
*
* @param resource the SQL result
* @return array of resulting items, or NULL
*
* @see layouts/layout.php
**/
function layout($result)
{
global $context;
// we return an array of ($url => $attributes)
$items = array();
// empty list
if (!SQL::count($result)) {
return $items;
}
// sanity check
if (!isset($this->layout_variant)) {
$this->layout_variant = 'full';
}
// process all items in the list
while ($item = SQL::fetch($result)) {
// get the main anchor
$anchor = Anchors::get($item['anchor']);
// download the file directly
$url = Files::get_url($item['id'], 'fetch', $item['file_name']);
// initialize variables
$prefix = $suffix = '';
// flag files that are dead, or created or updated very recently
if ($item['create_date'] >= $context['fresh']) {
$suffix .= NEW_FLAG;
} elseif ($item['edit_date'] >= $context['fresh']) {
$suffix .= UPDATED_FLAG;
}
// signal restricted and private files
if ($item['active'] == 'N') {
$prefix .= PRIVATE_FLAG;
} elseif ($item['active'] == 'R') {
$prefix .= RESTRICTED_FLAG;
}
// file title or file name
$label = Codes::beautify_title($item['title']);
if (!$label) {
$label = ucfirst(str_replace(array('%20', '-', '_'), ' ', $item['file_name']));
}
// the main anchor link, except on user profiles
if (is_object($anchor) && $anchor->get_reference() != $this->focus) {
$suffix .= ' - <span class="details">' . sprintf(i18n::s('in %s'), Skin::build_link($anchor->get_url(), ucfirst($anchor->get_title()))) . '</span>';
}
// list all components for this item
$items[$url] = array($prefix, $label, $suffix, 'basic', NULL);
}
// end of processing
SQL::free($result);
return $items;
}
示例10: render
public function render($matches)
{
$text = '';
$mode = $matches[0];
if ($mode == 'menu') {
$variant = 'menu_1';
} elseif ($mode = 'submenu') {
$variant = 'menu_2';
} else {
$variant = $mode;
}
$url = isset($matches[2]) ? encode_link($matches[2]) : encode_link($matches[1]);
$label = isset($matches[2]) ? Codes::fix_tags($matches[1]) : $matches[1];
$text = Skin::build_link($url, $label, $variant);
return $text;
}
示例11: allow
/**
* check access rights
*
* @param string script name
* @paral string target anchor, if any
* @return boolean FALSE if access is denied, TRUE otherwise
*/
function allow($script, $anchor = NULL)
{
global $context;
// limit the scope of our check
if ($script != 'files/view.php' && $script != 'files/fetch.php' && $script != 'files/fetch_all.php' && $script != 'files/stream.php') {
return TRUE;
}
// sanity check
if (!$anchor) {
die(i18n::s('No anchor has been found.'));
}
// stop here if the agreement has been gathered previously
if (isset($_SESSION['agreements']) && is_array($agreements = $_SESSION['agreements'])) {
foreach ($agreements as $agreement) {
if ($agreement == $anchor) {
return TRUE;
}
}
}
// which agreement?
if (!$this->parameters) {
die(sprintf(i18n::s('No parameter has been provided to %s'), 'behaviors/agree_on_file_access'));
}
// do we have a related file to display?
if (!is_readable($context['path_to_root'] . 'behaviors/agreements/' . $this->parameters)) {
die(sprintf(i18n::s('Bad parameter to behavior <code>%s %s</code>'), 'agree_on_file_access', $this->parameters));
}
// splash message
$context['text'] .= '<p class="agreement">' . i18n::s('Before moving forward, please read following text and express yourself at the end of the page.') . '</p><hr/>' . "\n";
// load and display the file to be displayed
$context['text'] .= Codes::beautify(Safe::file_get_contents($context['path_to_root'] . 'behaviors/agreements/' . $this->parameters));
// target link to record agreement
if ($context['with_friendly_urls'] == 'Y') {
$agree_link = 'behaviors/agreements/agree.php/' . rawurlencode($anchor);
} else {
$agree_link = 'behaviors/agreements/agree.php?id=' . urlencode($anchor);
}
// display confirmation buttons at the end of the agreement
$context['text'] .= '<hr/><p class="agreement">' . i18n::s('Do you agree?');
$context['text'] .= ' ' . Skin::build_link($agree_link, i18n::s('Yes'), 'button');
$context['text'] .= ' ' . Skin::build_link('behaviors/agreements/deny.php', i18n::s('No'), 'button') . '</p>' . "\n";
// render the skin based only on text provided by this behavior
render_skin();
exit;
}
示例12: serve
public static function serve($parameters)
{
global $context;
// the output of this function
$output = '';
// we need a valid url
if (!isset($parameters['url'])) {
return $output;
}
// read the newsfeed
include_once $context['path_to_root'] . 'included/simplepie.inc';
$feed = new SimplePie($parameters['url'], $context['path_to_root'] . 'temporary');
$feed->init();
// make a string
$output['text'] = '';
$even = true;
$count = 0;
foreach ($feed->get_items() as $item) {
// allow for alternate layout
if ($even) {
$class = 'class="even"';
} else {
$class = 'class="odd"';
}
$even = !$even;
// box title and details
$content = '<dt ' . $class . '><h2><span>' . Skin::build_link($item->get_permalink(), $item->get_title()) . '</span></h2>' . '<span class="details">' . Skin::build_date($item->get_date('U')) . '</span></dt><dd ' . $class . '>';
// box content
if (($enclosure = $item->get_enclosure()) && ($thumbnail = $enclosure->get_thumbnail())) {
$content .= '<a href="' . $item->get_permalink() . '"><img src="' . $thumbnail . '" class="left_image" style="margin-right: 1em;" alt="" /></a>';
}
$content .= '<div style="margin: 0.5em 0 1em 0;">' . $item->get_description() . '<br style="clear:left;" /></div></dd>' . "\n";
// wrap the full box
$output['text'] .= '<dl class="newsfeed_item">' . "\n" . $content . '</dl>' . "\n";
}
// return everything
return $output;
}
示例13: get_invite_default_message
/**
* get invitation default message
*
* This is put in the invitation form.
*
* @see articles/invite.php
*
* @param string 'PUBLISH' or 'CANCEL'
* @return string to be put in the web form
*/
function get_invite_default_message($method = 'PUBLISH')
{
global $context;
// to be displayed into the web form for this invitation
$text = '';
if ($value = $this->anchor->get_title()) {
$text .= sprintf(i18n::c('%s: %s'), i18n::c('Topic'), Skin::build_link($context['url_to_home'] . $context['url_to_root'] . $this->anchor->get_url(), Codes::beautify_title($value))) . BR;
}
// dates
if (isset($this->attributes['date_stamp']) && $this->attributes['date_stamp']) {
$text .= sprintf(i18n::c('%s: %s'), i18n::c('Date'), Skin::build_date($this->attributes['date_stamp'], 'day')) . BR;
}
// build a link to the chairman page, if any
if (isset($this->attributes['chairman']) && ($user = Users::get($this->attributes['chairman']))) {
$text .= sprintf(i18n::c('%s: %s'), i18n::c('Chairman'), Users::get_link($user['full_name'], NULL, $user['id'])) . BR;
}
// event has been cancelled
if ($method == 'CANCEL') {
$text .= '<div><p>' . i18n::c('Event has been cancelled.') . '</p></div>';
} else {
// copy content of the introduction field, if any
if ($value = $this->anchor->get_value('introduction')) {
$text .= '<div>' . Codes::beautify('<p>' . $value . '</p>') . '</div>';
}
// copy the induction message, if any
if (isset($this->attributes['induction_message'])) {
$text .= '<div>' . Codes::render($this->attributes['induction_message']) . '</div>';
}
}
// done
return $text;
}
示例14: elseif
Tables::clear($item);
if (is_object($anchor)) {
Safe::redirect($context['url_to_home'] . $context['url_to_root'] . $anchor->get_url());
} else {
Safe::redirect($context['url_to_home'] . $context['url_to_root'] . 'articles/');
}
}
// deletion has to be confirmed
} elseif (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] == 'POST') {
Logger::error(i18n::s('The action has not been confirmed.'));
} else {
// commands
$menu = array();
$menu[] = Skin::build_submit_button(i18n::s('Yes, I want to delete this table'), NULL, NULL, 'confirmed');
if (is_object($anchor)) {
$menu[] = Skin::build_link($anchor->get_url(), i18n::s('Cancel'), 'span');
}
// the submit button
$context['text'] .= '<form method="post" action="' . $context['script_url'] . '" id="main_form"><p>' . "\n" . Skin::finalize_list($menu, 'menu_bar') . '<input type="hidden" name="id" value="' . $item['id'] . '" />' . "\n" . '<input type="hidden" name="confirm" value="yes" />' . "\n" . '</p></form>' . "\n";
// set the focus
Page::insert_script('$("#confirmed").focus();');
// the title of the table
if (isset($item['title'])) {
$context['text'] .= Skin::build_block($item['title'], 'title');
}
// display the full text
$context['text'] .= Skin::build_block($item['description'], 'description');
// execute the query string to build the table
if (isset($item['query']) && $item['query']) {
$context['text'] .= Tables::build($item['id'], 'sortable');
}
示例15: layout
//.........这里部分代码省略.........
}
// info on related articles
if ($count = Members::count_articles_for_anchor('category:' . $item['id'])) {
$details[] = sprintf(i18n::ns('%d page', '%d pages', $count), $count);
$related_count += $count;
}
// info on related files
if ($count = Files::count_for_anchor('category:' . $item['id'], TRUE)) {
$details[] = sprintf(i18n::ns('%d file', '%d files', $count), $count);
$related_count += $count;
}
// info on related links
if ($count = Links::count_for_anchor('category:' . $item['id'], TRUE)) {
$details[] = sprintf(i18n::ns('%d link', '%d links', $count), $count);
$related_count += $count;
}
// info on related comments
if ($count = Comments::count_for_anchor('category:' . $item['id'], TRUE)) {
$details[] = sprintf(i18n::ns('%d comment', '%d comments', $count), $count);
$related_count += $stats['count'];
}
// info on related users
if ($count = Members::count_users_for_anchor('category:' . $item['id'])) {
$details[] = sprintf(i18n::ns('%d user', '%d users', $count), $count);
}
// append details to the suffix
if (count($details)) {
$suffix .= "\n" . '<span class="details">(' . implode(', ', $details) . ')</span>';
}
// add a head list of related links
$details = array();
// add sub-categories on index pages
if ($related = Categories::list_by_date_for_anchor('category:' . $item['id'], 0, YAHOO_LIST_SIZE, 'compact')) {
foreach ($related as $sub_url => $label) {
$sub_prefix = $sub_suffix = $sub_hover = '';
if (is_array($label)) {
$sub_prefix = $label[0];
$sub_suffix = $label[2];
if (@$label[5]) {
$sub_hover = $label[5];
}
$label = $label[1];
}
$details[] = $sub_prefix . Skin::build_link($sub_url, $label, 'basic', $sub_hover) . $sub_suffix;
}
}
// add related sections if necessary
if (count($details) < YAHOO_LIST_SIZE && ($related =& Members::list_sections_by_title_for_anchor('category:' . $item['id'], 0, YAHOO_LIST_SIZE - count($details), 'compact'))) {
foreach ($related as $sub_url => $label) {
$sub_prefix = $sub_suffix = $sub_hover = '';
if (is_array($label)) {
$sub_prefix = $label[0];
$sub_suffix = $label[2];
if (@$label[5]) {
$sub_hover = $label[5];
}
$label = $label[1];
}
$details[] = $sub_prefix . Skin::build_link($sub_url, $label, 'basic', $sub_hover) . $sub_suffix;
}
}
// add related articles if necessary
if (count($details) < YAHOO_LIST_SIZE && ($related =& Members::list_articles_by_date_for_anchor('category:' . $item['id'], 0, YAHOO_LIST_SIZE - count($details), 'compact'))) {
foreach ($related as $sub_url => $label) {
$sub_prefix = $sub_suffix = $sub_hover = '';
if (is_array($label)) {
$sub_prefix = $label[0];
$sub_suffix = $label[2];
if (@$label[5]) {
$sub_hover = $label[5];
}
$label = $label[1];
}
$details[] = $sub_prefix . Skin::build_link($sub_url, $label, 'basic', $sub_hover) . $sub_suffix;
}
}
// give me more
if (count($details) && $related_count > YAHOO_LIST_SIZE) {
$details[] = Skin::build_link(Categories::get_permalink($item), i18n::s('More') . MORE_IMG, 'more', i18n::s('View the category'));
}
// layout details
if (count($details)) {
$suffix .= BR . "\n» " . '<span class="details">' . implode(', ', $details) . "</span>\n";
}
// put the actual icon in the left column
if (isset($item['thumbnail_url'])) {
$icon = $item['thumbnail_url'];
}
// use the title to label the link
$label = Skin::strip($item['title'], 50);
// some hovering title for this category
$hover = i18n::s('View the category');
// list all components for this item
$items[$url] = array($prefix, $label, $suffix, 'category', $icon, $hover);
}
// end of processing
SQL::free($result);
$output = Skin::build_list($items, '2-columns');
return $output;
}