!本文可能 超过2年没有更新,今后内容也许不会被维护或者支持,部分内容可能具有时效性,涉及技术细节或者软件使用方面,本文不保证相应的技术更新和实践可操作性。

上篇《typecho专题:首页调用某一分类和不显示某一分类》在测试的时候,发现:

1、隐藏了不显示的文章,但是出现的问题的,而将剩余的文章不排序,导致在不显示在首页的分类更新的文章越多导致首页设定的文章越少。

2、截断的方式,分页就越少,导致显示在首页的文章不显示。经过多方的查询,得到一个插件,而该插件网站已经关闭,好不容易下载下来,而发现存在一些BUG,首页会显示文章总数和标签页面无法打开的问题,经过修正得到给出源码,希望大家使用:

1、本地电脑新建一个HideOneCate.php的文档。

2、拷贝以下代码到上面的稳当中,注意尽量使用编译器打开,不要用记事本打开哦。

<?php
/**
 * 生成档案列表时隐藏某个分类(暂不处理多分类问题)
 * 
 * @package HideOneCate
 * @author perichr
 * @version 1.0.0
 * @dependence 9.11.25-*
 * @link http://dev.perichr.org/Proj>Typecho_Plugin_HideOneCate
 */
class HideOneCate implements Typecho_Plugin_Interface
{
    /**
     * 激活插件方法,如果激活失败,直接抛出异常
     * 
     * @access public
     * @return void
     * @throws Typecho_Plugin_Exception
     */
    public static function activate()
    {
        Typecho_Plugin::factory('Widget_Archive')->query = array('HideOneCate', 'query');
        
        return _t('请到插件配置里设置索引中不出现的分类');
    }
    
    /**
     * 禁用插件方法,如果禁用失败,直接抛出异常
     * 
     * @static
     * @access public
     * @return void
     * @throws Typecho_Plugin_Exception
     */
    public static function deactivate(){}
    
    /**
     * 获取插件配置面板
     * 
     * @access public
     * @param Typecho_Widget_Helper_Form $form 配置面板
     * @return void
     */
    public static function config(Typecho_Widget_Helper_Form $form)
    {
        $db = Typecho_Db::get();
        $result = $db->fetchAll($db->select('mid,name')->from('table.metas')->where('type = ?', 'category'));
        $cate = array();
        foreach ($result as $row) {
            $cate[$row['mid']] = $row['name'];
        }
        $hideOneCate = new Typecho_Widget_Helper_Form_Element_Select('hideOneCate', $cate, 1, '准备隐藏的分类','特别说明:因某菜鸟P酱水平有限,本插件无法提供强制隐藏多分类文章的选项。一篇文章若同时属于需隐藏的分类和其它分类,它将不会被隐藏。');
        $form->addInput($hideOneCate);
        
    }
    
    /**
     * 个人用户的配置面板
     * 
     * @access public
     * @param Typecho_Widget_Helper_Form $form
     * @return void
     */
    public static function personalConfig(Typecho_Widget_Helper_Form $form){}
    
    
    /**
     * 插件实现方法
     * 
     * @access public
     * @return void
     */
    public static function query($widget, $select)
    {
        $db = Typecho_Db::get();
    
        /** 排除一些特殊情况 */
        if ($widget->is('single') || $widget->is('category') || $widget->is('tag') ) {
            $db->fetchAll($select, array($widget, 'push'));
            return;
        }
        
        /** 精彩部分来了 */
        $mid=Helper::options()->plugin('HideOneCate')->hideOneCate;
        
        $cateCountSql = $widget->getCountSql();
        
        $cateCountSql
        ->join('table.relationships', 'table.contents.cid = table.relationships.cid')
        ->join('table.metas', 'table.metas.mid = table.relationships.mid')
        ->where('table.contents.type = ?', 'post')
        ->where('table.metas.type = ?', 'category')
        ->where('table.relationships.mid <> ?',$mid)
        	;
        /** 翻页 */
         
 
        
        $cateSql = $select;
        
        $cateSql
        ->join('table.relationships', 'table.contents.cid = table.relationships.cid')
        ->join('table.metas', 'table.metas.mid = table.relationships.mid')
        ->where('table.contents.type = ?', 'post')
        ->where('table.metas.type = ?', 'category')
        ->where('table.relationships.mid <> ?',$mid)
        ;
        $db->fetchAll($cateSql, array($widget, 'push'));
    }
}


3、上传到usr\plugins下。

4、后台设置不显示的分类即可。

好处:完美解决某一个分类首页不显示的方法;

缺点:只能设置一个,不能设置多个。

转载请注明本文链接:http://www.yzjbj.com/05/4957/html

-----------------------------华丽的正文结束了-------------------------------

标签: Typecho专题, typecho, 隐藏分类

友荐云推荐 相关文章: