目的地-Destination 前程似锦、未来可期、寻得良人、共赴白头,祝你也祝我。
博主 目的地-Destination
沪ICP备16003146号-2沪公网安备 31010702004922号萌ICP备20238488号博主 昨天 17:25 在线自豪地使用 Typecho 建站搭配使用 🌻Sunny 主题当前在线 31 人
歌曲封面 未知作品

沪ICP备16003146号-2

沪公网安备 31010702004922号

萌ICP备20238488号

网站已运行 7 年 342 天 1 小时 11 分

Powered by Typecho & Sunny

32 online · 47 ms

Title

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

Chrison

·

烂笔头

·

Article
⚠️ 本文最后更新于2022年12月17日,已经过了675天没有更新,若内容或图片失效,请留言反馈

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

  1. 修改主题functions.php文件的function themeConfig($form) 函数,增加一项配置信息:
♾️ php 代码:
$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 代码:
<?php $this->widget('Widget_Metas_Category_List')->parse('<li><a href="{permalink}">{name}</a> ({count})</li>'); ?>
  1. 如果要隐藏某个分类ID,则增加'ignore=1'条件:
♾️ php 代码:
<?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的写法。有一个获取分类名称的语句,如下:

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

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

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

♾️ text 代码:
$ignoreMidArr = explode(',', $this->options->nolist);

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

♾️ text 代码:
<?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; ?>    

修改为:

♾️ text 代码:
<?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 代码:
<?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; ?>    
成功!!!!
成果展示
现在已有 319 次阅读,3 条评论,0 人点赞
Comment:共3条
发表
  1. 头像
    @
    无无无也

    百度搜出来唯一不同,但我还想更深一点,每个分类再抓最新一篇文章内容的一张相片。
    · Chrome · 中国广东省广州市白云区电信

    👍

    💖

    💯

    💦

    😄

    🪙

    👍 0 💖 0 💯 0 💦 0 😄 0 🪙 0
    1. 头像
      @
      那只要上面 pageSize=1 就是最新第一篇了,因为本来就是倒序。至于图片,就看你是存放在哪里的了
      · 火狐浏览器 · 中国江苏省苏州市电信

      👍

      💖

      💯

      💦

      😄

      🪙

      👍 0 💖 0 💯 0 💦 0 😄 0 🪙 0
      1. 头像
        @
        无无无也 @Chrison
        因为我做图片站的,很多个分类,我想分类能自己提取最新一篇文章内容中第一张相片,用你上边的代码可直接显示分类,但还想不出要怎么能提取分类中最新一篇文章内容中第一张相片
        · Chrome · 中国广东省广州市白云区电信

        👍

        💖

        💯

        💦

        😄

        🪙

        👍 0 💖 0 💯 0 💦 0 😄 0 🪙 0
搜 索 消 息 足 迹
你还不曾留言过..
你还不曾留下足迹..
博主 不再显示
博主