需求
在分类页面下,显示当前分类的子分类带超链接的名字,点击名字,进入子分类页面后,继续显示子子分类带超链接的名字...,上午改主题的时候弄出来的需求。
原理
Typecho如果直接列出所有分类的话很简单
<?php $this->widget('Widget_Metas_Category_List')->listCategories('wrapClass=menu-children&itemClass=menu-item&linkClass=menu-link');?>
难点就在分类页面下直接获取当前分类的mid。
获得mid之后就可以根据mid列出子分类...
把下面的listSubCategories
函数放到主题的functions.php
就可以用了。
/**
* 列出子分类
*
* @param mixed $category
* @param mixed $categoryOptions
* @return void
*/
public static function listSubCategories($category = null, $categoryOptions = null)
{
if ($category === null) {
return;
}
$widget = Typecho_Widget::widget('Widget_Metas_Category_List');
$categoryOptions = Typecho_Config::factory($categoryOptions);
$categoryOptions->setDefault(array(
'wrapTag' => 'ul',
'wrapClass' => '',
'itemTag' => 'li',
'itemClass' => '',
));
$subCategories = $widget->getCategories($widget->getAllChildren($category));
if (count($subCategories)) {
echo "<" . $categoryOptions->wrapTag . (!empty($categoryOptions->wrapClass) ? ' class="' . $categoryOptions->wrapClass . '"' : '') . ">";
foreach ($subCategories as $subCategory) {
if ($subCategory['parent'] === $category) { // 不继续寻找子子分类
echo "<" . $categoryOptions->itemTag . (!empty($categoryOptions->itemClass) ? ' class="' . $categoryOptions->itemClass . '"' : '') . '><a href=' . $subCategory['permalink'] . '>' . $subCategory['name'] . '</a></' . $categoryOptions->itemTag . '>';
}
}
echo "</" . $categoryOptions->wrapTag . ">";
}
}
使用方式很简单,在archive.php
需要列出子分类链接的地方加入以下代码
<?php if($this->is('category')) { listSubCategories($this->_pageRow['mid'], 'wrapClass=no-dots'); }?>
其中$this->_pageRow['mid']
就是获取当前分类 MID。
精选留言