Better Categories
Posted: Fri Jul 15, 2005 7:02 am
I have enhanced the existing Categories plugin to allow users to specify what markup to place before and after category lists and items.
Enjoy.
Code: Select all
<?php
$probelang = dirname(__FILE__) . '/lang_' . $serendipity['lang'] . '.inc.php';
if (file_exists($probelang)) {
include $probelang;
}
switch ($serendipity['lang']) {
case 'en':
default:
@define('PLUGIN_BETTERCAT','Better Categories');
@define('PLUGIN_BETTERCAT_BLAHBLAH', 'A plugin to give better control over category listings');
@define('PLUGIN_BETTERCAT_TOFETCH','Categories to fetch');
@define('PLUGIN_BETTERCAT_TOFETCH_D','Fetch categories from which author?');
@define('PLUGIN_BETTERCAT_XMLIMG','XML Button');
@define('PLUGIN_BETTERCAT_XMLIMG_D','Links to XML Feeds will be displayed by this image. Leave empty for default, enter "none" to disable.');
@define('PLUGIN_BETTERCAT_LISTOPEN','List open');
@define('PLUGIN_BETTERCAT_LISTOPEN_D','String to open a list (including sublists)');
@define('PLUGIN_BETTERCAT_LISTCLOSE','List close');
@define('PLUGIN_BETTERCAT_LISTCLOSE_D','String to close a list (including sublists)');
@define('PLUGIN_BETTERCAT_ITEMOPEN','Item open');
@define('PLUGIN_BETTERCAT_ITEMOPEN_D','String to open an item');
@define('PLUGIN_BETTERCAT_ITEMCLOSE','Item close');
@define('PLUGIN_BETTERCAT_ITEMCLOSE_D','String to close an item');
@define('PLUGIN_COMMENTS_ABOUT', '%s about%s');
break;
}
# Better Categories Plugin
#
# No DHTML, just sweet plain HTML that works right
class serendipity_plugin_bettercat extends serendipity_plugin {
var $title = 'Categories';
function introspect(&$propbag) {
global $serendipity;
$propbag->add('name', PLUGIN_BETTERCAT);
$propbag->add('description', PLUGIN_BETTERCAT_BLAHBLAH);
$propbag->add('stackable', true);
$propbag->add('author', 'a guest');
$propbag->add('version', '1.0');
$propbag->add('configuration', array(
'authorid',
'image',
'listopen',
'listclose',
'itemopen',
'itemclose',
));
$propbag->add('requirements', array(
'serendipity' => '0.8',
'php' => '4.1.0'
));
}
function introspect_config_item($name, &$propbag)
{
global $serendipity;
switch($name) {
case 'authorid':
$row_authors = serendipity_db_query("SELECT realname, authorid FROM {$serendipity['dbPrefix']}authors");
$authors = array('all' => ALL_AUTHORS);
if (is_array($row_authors)) {
foreach($row_authors as $row) {
$authors[$row['authorid']] = $row['realname'];
}
}
$propbag->add('type', 'select');
$propbag->add('name', PLUGIN_BETTERCAT_TOFETCH);
$propbag->add('description', PLUGIN_BETTERCAT_TOFETCH_D);
$propbag->add('select_values', $authors);
$propbag->add('default', 'all');
break;
case 'image':
$propbag->add('type', 'string');
$propbag->add('name', PLUGIN_BETTERCAT_XMLIMG);
$propbag->add('description', PLUGIN_BETTERCAT_XMLIMG_D);
$propbag->add('default', serendipity_getTemplateFile('img/xml.gif'));
break;
case 'listopen':
$propbag->add('type', 'string');
$propbag->add('name', PLUGIN_BETTERCAT_LISTOPEN);
$propbag->add('description',PLUGIN_BETTERCAT_LISTOPEN_D);
$propbag->add('default','<ul>');
break;
case 'listclose':
$propbag->add('type', 'string');
$propbag->add('name', PLUGIN_BETTERCAT_LISTCLOSE);
$propbag->add('description',PLUGIN_BETTERCAT_LISTCLOSE_D);
$propbag->add('default','</ul>');
break;
case 'itemopen':
$propbag->add('type', 'string');
$propbag->add('name', PLUGIN_BETTERCAT_ITEMOPEN);
$propbag->add('description',PLUGIN_BETTERCAT_ITEMOPEN_D);
$propbag->add('default','<li>');
break;
case 'itemclose':
$propbag->add('type', 'string');
$propbag->add('name', PLUGIN_BETTERCAT_ITEMCLOSE);
$propbag->add('description',PLUGIN_BETTERCAT_ITEMCLOSE_D);
$propbag->add('default','</li>');
break;
default:
return false;
}
return true;
}
function generate_content(&$title) {
global $serendipity;
$which_category = $this->get_config('authorid');
$lopen = $this->get_config('listopen');
$lclose = $this->get_config('listclose');
$iopen = $this->get_config('itemopen');
$iclose = $this->get_config('itemclose');
$categories = serendipity_fetchCategories(empty($which_category) ? 'all' : $which_category);
$title = $this->title;
$html = $lopen;
$image = $this->get_config('image', serendipity_getTemplateFile('img/xml.gif'));
$image = (($image == "'none'" || $image == 'none') ? '' : $image);
if (is_array($categories) && count($categories)) {
$categories = serendipity_walkRecursive($categories, 'categoryid', 'parentid', VIEWMODE_THREADED);
$olddepth = 0;
foreach ( $categories as $cat ) {
$depth = $cat['depth'];
if ( $depth > $olddepth ) $html .= $lopen;
if ( $depth < $olddepth ) $html .= $lclose."\n";
$html .= $iopen;
if ( !empty($image) ) {
$html .= '<a href="'. serendipity_rewriteURL(PATH_FEEDS .'/'. PATH_CATEGORIES .'/'. serendipity_makePermalink(PERM_FEEDS_CATEGORIES, array('id' => $cat['categoryid'], 'title' => $cat['category_name']))) .'"><img src="'. $image .'" alt="XML" style="border: 0px" /></a> ';
}
$html .= '<a href="'. serendipity_rewriteURL(PATH_CATEGORIES . '/' . serendipity_makePermalink(PERM_CATEGORIES, array('id' => $cat['categoryid'], 'title' => $cat['category_name'])), 'serendipityHTTPPath') .'" title="'. $cat['category_name'] .'">'. $cat['category_name'] .'</a>';
$html .= $iclose."\n";
$olddepth = $depth;
}
}
$html .= $lclose."\n";
$html .= sprintf(
'<p><a href="%s" title="%s">%s</p>',
$serendipity['serendipityHTTPPath'] . $serendipity['indexFile'],
ALL_CATEGORIES,
ALL_CATEGORIES
}
print $html;
}
}
?>