php菜单栏样式,Typecho自定义二级菜单样式

背景介绍

先来说说当前的菜单样式吧

系统默认菜单栏实现和样式

// themes/default/sidebar.php 25行

<?php if (!empty($this->options->sidebarBlock) && in_array('ShowCategory', $this->options->sidebarBlock)): ?>

<?php _e('分类'); ?>

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

默认模板调用了Widget_Metas_Category_List的listCategories方法来显示导航菜单,那么这个导航菜单的样式就被集成到了listCategories方法中。又是html+php混写。(大家吐槽的不是php, 而是写php的人)

显示效果呢,上个图吧

9117b14a2239b824f213b8bd8d4ea79d.png

再来看看TypeD8是怎么实现的

同上,先看代码

TypeD8模板也是用了Widget_Metas_Category_List来输出分类,但是他没有使用listCategories方法输出内置的模板,而是用parse方法自定义了输出格式。这里,暂且先不去管这个parse的细节用法。

我们定义一个二级分类看看效果先。在Golang分类下定义一个子分类Network Programming with GO。显示效果如下图

6f2b5651ff50cb545f281d4bd6696c90.png

这就搞笑了,父分类和子分类显示在了同一个层级上。我本以为子分类会不显示的,毕竟我还too young too simple。

解决方案

$this->widget('Widget_Metas_Category_List')

->parse('

{name}');

或者

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

他们都是用了Widget_Metas_Category_List组件。我们只需要把这个组件里的分类数据读取出来自己输出就好了,还是模板和数据分类的问题。

首先我们在模板里读取分类数据存储到$categories,然后对他进行循环输出即可。通过阅读Widget_Metas_Category_list的源代码,写出了下面这段代码来输出categories,只要用它替换上面哪行listCategories或者parse调用即可

<?php $this->widget('Widget_Metas_Category_List')->to($category); ?>

<?php if ($category->have()): ?>

<?php while ($category->next()): ?>

<?php if ($category->levels == 0): ?>

<?php $children = $category->getAllChildren($category->mid); ?>

<?php $category->name() ?>

<?php $category->name() ?>

<?php $child = $category->getCategory($child) ?>

<?php echo $child['name']; ?>

到此,功能需求达成。上张图吧

a6149319fe7b27ac9c649fb80fd26df2.png

后续吐槽

对于分类golang

$children = $category->getAllChildren($category->mid);

这行代码得到$children为

/usr/themes/TypeD8/header.php:44:

array (size=2)

0 => int 29

1 => int 30

Golang

很好理解golang分类有两个子分类,29和30。

接着我们用for循环去处理这两个子分类,对于29号子分类。

$child = $category->getCategory($child);

我们得到了什么?

array (size=14)

'mid' => string '29' (length=2)

'name' => string 'GO网络编程' (length=14)

'slug' => string 'GO网络编程' (length=14)

'type' => string 'category' (length=8)

'description' => string '本分类为Network Programming With Go读书笔记以及代码实验' (length=69)

'count' => string '0' (length=1)

'order' => string '1' (length=1)

'parent' => string '8' (length=1)

'levels' => int 1

'directory' =>

array (size=2)

0 => string 'Golang' (length=6)

1 => string 'GO网络编程' (length=14)

'permalink' => string 'http://blog.shyclouds.net/category/GO%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/' (length=74)

'feedUrl' => string 'http://blog.shyclouds.net/feed/category/GO%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/' (length=79)

'feedRssUrl' => string 'http://blog.shyclouds.net/feed/rss/category/GO%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/' (length=83)

'feedAtomUrl' => string 'http://blog.shyclouds.net/feed/atom/category/GO%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/' (length=84)

EXECUSE ME? 为什么感觉设计如此蹩脚?一级分类列表循环处理的时候可是对象:

$category->name()

$category->permalink()

为何到了二级分类就成了数组了?

$child['name']

$child['permalink']

这种严重的不一致表现,是我做法不对,还是作者遇到了什么问题么?回头我深入研究下Widget循环实现吧。 打赏

微信打赏

支付宝打赏

Tags: none

### 回答1: Typecho是一款流行的博客系统,1.2.0是其最新版本。它是一个基于PHP和MySQL的开源系统,可以轻松地搭建个人或团队博客,并可以方便地扩展功能。 相比前几个版本,Typecho 1.2.0在性能和安全性上有了很多改进。系统的整体性能得到了提升,博客的加载速度更快了。同时,Typecho 1.2.0增加了更多的安全措施,可防止SQL注入、XSS攻击等常见的安全威胁。 Typecho 1.2.0还新增了一些实用的特性。例如,博客主题设置和插件管理界面更加人性化,并且加入了对多种语言的支持。此外,Typecho 1.2.0还引入了新的Markdown编辑器,丰富了博客的编辑、发布功能。 总体来说,Typecho 1.2.0是一款更加实用、性能更好、安全性更强的博客系统。如果你正在寻找一个简单易用的博客搭建工具,那么Typecho 1.2.0是一个很好的选择。 ### 回答2: Typecho 1.2.0 是一款开源的博客程序。它的设计理念是简洁高效,易于安装和使用。Typecho 1.2.0 支持多用户管理和权限控制,可以让多个作者在同一个平台上发布文章和管理内容。 Typecho 1.2.0 提供了丰富的插件和主题支持,用户可以根据自己的需要选择合适的插件来扩展功能,或者自定义主题风格以满足个人喜好或商业需求。 Typecho 1.2.0 的后台管理界面简洁明了,功能齐全,具有良好的用户体验。通过后台管理界面,用户可以管理文章发布、分类标签、评论审核、用户权限等各个方面的内容。 Typecho 1.2.0 的前端界面也是精美简洁的,自适应的布局和响应式设计可以在不同设备上提供良好的用户体验。并且,Typecho 1.2.0 提供了强大的 SEO 功能,可以帮助网站获得更好的搜索引擎排名。 总之,Typecho 1.2.0 是一款功能全面、易于使用的开源博客程序。它的简洁高效的设计让用户可以更专注于内容创作,而不必花费太多精力在技术维护上。无论是个人博客还是商业网站,Typecho 1.2.0 都是一个不错的选择。 ### 回答3: Typecho 1.2.0是一款流行的开源博客系统。它是一个简洁、高效、易于使用的博客平台,广受用户喜爱。 首先,Typecho 1.2.0具有出色的定制性能。它提供了丰富的主题和插件,可以满足用户不同的需求。用户可以根据自己的喜好选择合适的主题来改变博客的外观和风格。同时,用户还可以根据自己的需要安装各种插件,扩展博客的功能。 其次,Typecho 1.2.0具有良好的用户体验。它的界面简洁明了,操作流程简单易懂,即使对于没有技术背景的用户也能够轻松上手。同时,Typecho 1.2.0还具有响应式设计,可以自适应不同屏幕大小的设备,提供更好的移动端浏览体验。 此外,Typecho 1.2.0还具有卓越的性能。它以PHP语言开发,采用了轻量级的设计理念,页面加载速度快,占用系统资源较少。这使得博客在大流量情况下也能保持流畅的访问速度。 最后,Typecho 1.2.0还支持多语言功能,允许用户选择适合自己的语言来搭建个人博客。这对于不同地区和语种的用户来说非常方便。 综上所述,Typecho 1.2.0是一款卓越的博客系统,具有定制性强、用户体验佳、性能优越、多语言支持等优点。无论是个人博客还是企业网站,都适用于使用Typecho 1.2.0来搭建和管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值