许久没有写技术博文了,今天比较闲来记录一下最近在折腾的东西。
最近在编写一个 typecho 上的主题,也不能说是编写,因为前端是完全搬运的,只是前端实现后端接口,再加之编写一些实现。算是从别的 CMS 上移植了一套主题,其实开始觉得简单真正做起来并不简单。一是因为 typecho 的文档太少了,官方只提供了基本的 api,其他的你还要自己去深究。第二个是 typecho 功能有限,很多时候需要自己去用另一种方式去实现。
我移植的主题是保罗自行写的一个 CMS 的前端界面,与 typecho 不同,那套 CMS 是包括个人主页,日记页,追番页,音乐页,包括点赞,等等。而 typecho 是没有提供这些方法的。所以我是通过 typecho 的独立页面来实现的。
想法总是简单的,实现确实难的。在独立页面输出文章,不能用 $this->content() 进行输出,因为 $this->content() ,只能输出当前独立页面的内容,后来想到有个获取最近发布的文章的 api,但是可惜文档并没有说得很清楚,网上的 Demo 也只是用这个来获取标题和链接,并解析成 <a> 标签的形式。在一次偶然机会,我发现了这个 api 可以输入到一个变量中,然后进行迭代,就和在 index.php 中的 $this->next() 是一样的。首先你要搞清楚 $this 这个对象里面都什么,在首次开发中用的最多的就是 var_dump($this) 了,经常能在迷途中发现出路。
那么说了这么多,到底该这么用这个接口呢。
1 $this->widget('Widget_Contents_Post_Recent', 'pageSize=10')->to($posts)
Copy
以上是把最近发文 10 篇输入到$posts 这个变量中,然后你可以迭代输出你需要的值。这是网上最多的用法,其他的需要自我挖掘。
首先,'pageSize=10' 是可以不要的,这个参数如果不传,这个变量就是在 index.php$this的一部分,迭代他 while ($posts->next()) :,用$posts->title() 就可以输出每篇文章标题,和在 index.php 中的 $this->title() 是一样的,比如 $posts->content();$posts->text();
1<?php while ($posts->next()) :
2            ?>
3            <h1 style="position: relative;"><a href="<?php $posts->permalink() ?>" style="color: #000"><?php echo date('Y-m-d', $posts->created); ?></a>
4                <small>(<?php echo date('l', $posts->created); ?>)</small>
5                <div class="note-title"><?php $posts->title() ?></div>
6            </h1>
7            <div class="paul-note" id="cid-<?php $posts->cid(); ?>">
8                <div class="note-content">
9                        $posts->content();
10        <?php endwhile; ?>
Copy
然后是独立页面,为了做这个主题,我大概用了7 个独立页面,为了把他们联系起来,获取到每个页面用的模板是什么,在对使用哪个模板的独立页面的永久链接获取到,也是深挖了很久。这次是遍历 $this->widget('Widget_Contents_Page_List') ,放入一个变量进行遍历。
1$this->widget('Widget_Contents_Page_List')->to($pages);
2$works = $index_pages = $collection = array();
3while ($pages->next()):
4    switch ($pages->template):
5        case 'page-note.php':
6            $GLOBALS['note'] = $pages->permalink;
7            break;
8        case 'page-works.php':
9            $GLOBALS['project'] = $pages->permalink;
10            break;
11        case 'page-bangumi.php':
12            $GLOBALS['bangumi'] = $pages->permalink;
13            break;
14        case 'page-works_info.php':
15            $works[] = $pages->permalink;
16            break;
17        case 'page-music.php':
18            $GLOBALS['music'] = $pages->permalink;
19            break;
20        case 'page-say.php':
21            $GLOBALS['say'] = $pages->permalink;
22            $GLOBALS['say_text'] = $pages->content;
23            break;
24        case 'page-index.php':
25            $index_pages[] = $pages->permalink;
26            break;
27    endswitch;
28endwhile;
29$GLOBALS['works'] = $works;
30$GLOBALS['index'] = $index_pages;
31$GLOBALS['stack'] = $pages->stack;
Copy
这样就可以拿到所有的链接了,随便提一下,stack是个好东西,几乎所有有关页面的信息都存在这个数组中。
最后附上主题链接:

亲亲留个评论再走呗

正在加载评论区...