typecho输出一级二级子菜单目录的修改记录

前言

如何将typehco所有的一二三级目录都调出来呢,其实方法很多,这里说其中一个方法。typecho本身就自带了一个叫listCategories的函数可以穷举所有的目录列表。

具体用法:

<?php $this->widget('Widget_Metas_Category_List')->listCategories('wrapClass=widget-list'); ?>

过程

事实上,这个函数调用方便但自定义方面就不是很友好。如果你想更改输出的名称、href内容等就不行。后来发现可以通过修改treeViewCategoriesCallback来更改listCategories分类列表代码:

Widget_Metas_Category_List 的主函数位置 typecho/var/Widget/Metas/Category/List.php

    /**
     * 列出分类回调
     * 
     * @access private
     */
    private function treeViewCategoriesCallback()
    {
        $categoryOptions = $this->_categoryOptions;
        if (function_exists('treeViewCategories')) {
            return treeViewCategories($this, $categoryOptions);
        }
        $classes = array();
        if ($categoryOptions->itemClass) {
            $classes[] = $categoryOptions->itemClass;
        }
        $classes[] = 'category-level-' . $this->levels;
        echo '<' . $categoryOptions->itemTag . ' class="'
            . implode(' ', $classes);
        
        if ($this->levels > 0) {
            echo ' category-child';
            $this->levelsAlt(' category-level-odd', ' category-level-even');
        } else {
            echo ' category-parent';
        }
        if ($this->mid == $this->parameter->current) {
            echo ' category-active';
        } else if (isset($this->_children[$this->mid]) && in_array($this->parameter->current, $this->_children[$this->mid])) {
            echo ' category-parent-active';
        }
        echo '"><a href="' . $this->permalink . '">' . $this->name . '</a>';
        if ($categoryOptions->showCount) {
            printf($categoryOptions->countTemplate, intval($this->count));
        }
        if ($categoryOptions->showFeed) {
            printf($categoryOptions->feedTemplate, $this->feedUrl);
        }
        if ($this->children) {
            $this->treeViewCategories();
        }
        echo '</' . $categoryOptions->itemTag . '>';
    }

我在薯仔投是左边目录导航中就做了如下修改:

echo '"><a href="' . $this->permalink . '">' . $this->name . '</a>';
改为
echo '"><a href="#' . $this->slug. '">' . $this->name . '</a>';

效果图

其实作用就是为了做一个跳转。这里就记录一下。

参考:
github
Typecho获取指定ID的子类列表
typecho 父分类 和子分类的UL的class如何让他不一样啊

评论

暂无

添加新评论