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


本想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; ?>    
成功!!!!

声明:目的地-Destination|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - Typecho调用分类列表并隐藏多个分类方法


前程似锦、未来可期、寻得良人、共赴白头,祝你也祝我。