Typecho调用分类列表并隐藏多个分类方法

2022年12月14日 2556 3 Web端 发布

本想Typecho调用分类列表后,隐藏两个不需要的分类。网上找了一大堆教程,基本都是官方的方法。

  1. 修改主题functions.php文件的function themeConfig($form) 函数,增加一项配置信息:
$nolist = new Typecho_Widget_Helper_Form_Element_Text('nolist', NULL, NULL, _t('首页不显示某些特定分类'), _t('仅用在首页,首页不显示某些分类,可填入<b style="color: red;">mid</b>一个或多个数字,英文逗号分隔!!!'));
$form->addInput($nolist);
  1. 修改模板中的index.php文件,找到自己对应的分类循环处:
<?php $this->widget('Widget_Metas_Category_List')->parse('<li><a href="{permalink}">{name}</a> ({count})</li>'); ?>
  1. 如果要隐藏某个分类ID,则增加'ignore=1'条件:
<?php $this->widget('Widget_Metas_Category_List','ignore=1')->parse('<li><a href="{permalink}">{name}</a> ({count})</li>'); ?>

但是如果要多个隐藏呢???找死方法也找不到!!!不过,虽然我不会php,但是好歹也是会Java的,还是有相似性的。大不了不用官方方法,用php的if语句判断,如果是我配置的隐藏mid,遍历循环时,则不显示。

有了思路,就看怎么取mid的值了。参照index.php的写法。有一个获取分类名称的语句,如下:

<?php while ($categories->next()): ?>
    <a href="<?php $categories->permalink(); ?>"><?php $categories->name(); ?></a>
<?php endwhile;?>    

意思就是循环变量分类时,输出分类名称和分类链接呗!既然能拿到分类名称,那也能拿到分类ID,那所以根据自己的“经验”分类ID就是$categories->mid();
然后,我把需要隐藏的多个id,配置在后台的外观设置处

外观设置

再将配置值获取到,并用逗号分隔成数组

$ignoreMidArr = explode(',', $this->options->nolist);

最后,代码用if + in_array语句判断是否隐藏
原始写法:

<?php  $this->widget('Widget_Metas_Category_List@options','ignore='.$this->options->nolist.'')->to($categories);
?>
<?php while ($categories->next()): ?>
    <a href="<?php $categories->permalink(); ?>"><?php $categories->name(); ?></a>
<?php endwhile; ?>    

修改为:

<?php
    $this->widget('Widget_Metas_Category_List@options')->to($categories);
    $ignoreMidArr = explode(',', $this->options->nolist);
?>
<?php while ($categories->next()): ?>
    <?php if (!in_array($categories->mid(),$ignoreMidArr)): ?>
      <a href="<?php $categories->permalink(); ?>"><?php $categories->name(); ?></a>
    <?php endif; ?>
<?php endwhile; ?>    

**看看成果。

成果展示

这TMD什么玩意!!! 没道理啊??? 看来我php学艺不精!!!

╮(╯▽╰)╭ 无奈
继续研究。。。。。
继续研究。。。。。
继续研究。。。。。
继续研究。。。。。

长达N个小时后,我发现,mid获取,竟然不要括号!!!! 是$categories->mid而不是$categories->mid()
SHIT!!!

重新修改为:

<?php
    $this->widget('Widget_Metas_Category_List@options')->to($categories);
    $ignoreMidArr = explode(',', $this->options->nolist);
?>
<?php while ($categories->next()): ?>
    <?php if (!in_array($categories->mid,$ignoreMidArr)): ?>
      <a href="<?php $categories->permalink(); ?>"><?php $categories->name(); ?></a>
    <?php endif; ?>
<?php endwhile; ?>    
成功!!!!
成果展示
工作JSJQueryJavaScriptTypechotypecho分类隐藏

相关文章

【Typecho插件】Blog Helper一键同步微信运动、快速发布说说、时光机、碎语、日记、心情
Typecho如何添加FriendCircle友链朋友圈
Akina For Typecho主题修改记录分享

评论(3)

  1. 百度搜出来唯一不同,但我还想更深一点,每个分类再抓最新一篇文章内容的一张相片。

      1. @Chrison 因为我做图片站的,很多个分类,我想分类能自己提取最新一篇文章内容中第一张相片,用你上边的代码可直接显示分类,但还想不出要怎么能提取分类中最新一篇文章内容中第一张相片

发布评论