'custom date format',
'limit_to'=>'Run the plugin only for this file',
'post_separator'=>'character(s) to use when joining post titles',
'unique_title' => 'Set the page title to this string if not empty'
);
var $date_format = '%e %B %y';
var $limit_to = 'list_categories.php';
var $post_separator = '‖';
var $unique_title = 'Categories » {option_blogname}';
var $default_context = LP_CONTEXT_INDEX;
var $description = 'Display a list of active categories and their posts titles';
var $nested = true;
var $active = true;
var $hooks = array('pre_render');
function CategoriesListExtended(&$frontend, $args, $dummy_run=false) {
$this->CategoriesList($frontend, $args, $dummy_run);
if (!$dummy_run && !empty($this->limit_to) && basename($_SERVER['PHP_SELF']) != $this->limit_to)
$this->active = false;
}
function run($hook, &$hook_data) {
$categories =& $this->_getCategories();
if (count($categories) == 0)
return $this->hide();
$tpl =& $this->_frontend->tpl;
$db =& $this->_frontend->db;
$sep = $this->post_separator;
$tpl->setFile('plugin_categorieslistextended', 'plugins/categories_list_extended.xml');
$tpl->setBlock('plugin_categorieslistextended', 'plugin_categorieslistextended_catgroup', 'PLUGIN_CATEGORIESLISTEXTENDED_CATGROUP');
$tpl->setBlock('plugin_categorieslistextended', 'plugin_categorieslistextended_catgroup_active', 'PLUGIN_CATEGORIESLISTEXTENDED_CATGROUP');
$tpl->setBlock('plugin_categorieslistextended', 'plugin_categorieslistextended_category', 'PLUGIN_CATEGORIESLISTEXTENDED_CATEGORY');
$buffer = '';
$q = "select p.id, p.post_name, p.post_title, UNIX_TIMESTAMP(p.post_date) as tstamp,
p.post_category as category_id, p2c.category_id as post_category
from {$this->_frontend->tables['post2cat']} p2c
inner join {$this->_frontend->tables['posts']} p on p.id = p2c.post_id
where {$this->_frontend->get_posts_clause} and {$this->_frontend->only_published}
order by p2c.category_id, p.post_date desc";
$db->query($q);
$opt_url = $this->_frontend->options['url'];
$category = null;
foreach ($db->all() as $post) {
if ($category != $post['post_category']) {
if (!is_null($category))
$categories[$category]['posts'] = '
' . implode("$sep", $posts) . '';
$posts = array();
$category = $post['post_category'];
}
$posts[] = sprintf('%s',
$opt_url,
$this->_frontend->getPermalink($post['id'], $post['post_name'], $post['tstamp'], $post['category_id']),
htmlspecialchars($post['post_title'], ENT_QUOTES));
}
$categories[$category]['posts'] = '' . implode("$sep", $posts) . '';
foreach ($categories as $k=>$cat) {
if (!$cat['root']) {
// not a first-level category, continue
continue;
}
$buffer .= $this->_parseCategory($tpl, $cat, $buffer);
}
$tpl->setVar(array(
'PLUGIN_CATEGORIESLISTEXTENDED_CATGROUP' => '',
'PLUGIN_CATEGORIESLISTEXTENDED_CATEGORY' => $buffer));
$tpl->parse('PLUGIN_CATEGORIESLISTEXTENDED', 'plugin_categorieslistextended');
if ($this->unique_title)
$tpl->setVar('title', $this->unique_title);
}
function _parseCategory(&$tpl, &$cat) {
if (!isset($cat['posts']))
$cat['posts'] = '';
if (count($cat['children']) > 0) {
// parent, start by rendering children
$buffer = '';
foreach ($cat['children'] as $k=>$child)
$buffer .= $this->_parseCategory($tpl, $child);
$tpl->setVar(array(
'plugin_categorieslistextended_category_children' => $buffer,
'plugin_categorieslistextended_category_permalink' => $cat['category_permalink'],
'plugin_categorieslistextended_category_name' => $cat['cat_name'],
'plugin_categorieslistextended_category_numposts' => $cat['numposts'],
'plugin_categorieslistextended_category_posts' => $cat['posts']));
if ($cat['numposts'] > 0) {
// active catgroup
return $tpl->parse('PLUGIN_CATEGORIESLISTEXTENDED_TMP', 'plugin_categorieslistextended_catgroup_active');
} else {
return $tpl->parse('PLUGIN_CATEGORIESLISTEXTENDED_TMP', 'plugin_categorieslistextended_catgroup');
}
} else if ($cat['numposts'] > 0) {
// normal category with posts
$tpl->setVar(array(
'plugin_categorieslistextended_category_permalink' => $cat['category_permalink'],
'plugin_categorieslistextended_category_name' => $cat['cat_name'],
'plugin_categorieslistextended_category_numposts' => $cat['numposts'],
'plugin_categorieslistextended_category_posts' => $cat['posts']));
return $tpl->parse('PLUGIN_CATEGORIESLISTEXTENDED_TMP', 'plugin_categorieslistextended_category');
}
return '';
}
}
?>