适用程序:Typecho
程序版本:1.2.1
文档作者:Lopwon
作者博客:Lopwon.com
发布页面:Lopwon.com/3378.html


文档说明

Typecho 默认的文章页编辑是不能使用(自定义模板)的,以及默认的独立页编辑是不能使用(标签)的,本文档正是开启这两项功能,让文章页可以使用自定义模板,呈现不同的文章类型;让独立页可以使用标签,纳入标签云和标签页。

使用方法
  1. 涉及文件
admin/write-post.php
admin/write-page.php
var/Widget/Contents/Post/Edit.php
var/Widget/Contents/Page/Edit.php
var/Widget/Archive.php
  1. 改造文件
    打开文件 admin/write-post.php 在适当位置(如:第 120 行)添加以下代码:
    <section class="typecho-post-option">
        <label for="template" class="typecho-label"><?php _e('自定义模板'); ?></label>
        <p>
            <select name="template" id="template">
                <option value=""><?php _e('不选择'); ?></option>
                <?php $templates = $post->getTemplates();
                foreach ($templates as $template => $name): ?>
                    <option
                        value="<?php echo $template; ?>"<?php if ($template == $post->template): ?> selected="true"<?php endif; ?>><?php echo $name; ?></option>
                <?php endforeach; ?>
            </select>
        </p>
        <p class="description"><?php _e('如果你为此页面选择了一个自定义模板, 系统将按照你选择的模板文件展现它'); ?></p>
    </section>

至此,在后台》管理》文章,任意一篇文章的编辑页面中,已经可以看到(自定义模板)的功能选项。但是,当选择模板后发布页面,再次回到编辑页面中,发现(自定义模板)中并不是之前的模板名称,也就是选择模板的操作没能写入数据库中。接着,打开文件 var/Widget/Contents/Post/Edit.php 在第 261 行之下添加模板字段(template)最终如下:

    $contents = $this->request->from(
        'password',
        'allowComment',
        'allowPing',
        'allowFeed',
        'slug',
        'tags',
        'text',
        'template', //新增的模板字段
        'visibility'
    );
至此,已完成给文章页开启自定义模板功能的改造,文章页也能像独立页那样,拥有更丰富的内容样式输出。

作用:给独立页开启标签功能。
打开文件 admin/write-page.php 在适当位置(如:第 91 行)添加以下代码:
    $contents = $this->request->from(
        'text',
        'template',
        'allowComment',
        'allowPing',
        'allowFeed',
        'slug',
        'tags', //新增的标签字段
        'order',
        'visibility'
    );
至此,已完成给独立页开启标签功能的改造,但是,在标签页 http(s)://www.example.com/tag/slug 并没有输出该篇独立页的标题信息,接着,打开文件 var/Widget/Archive.php 将第 1984 行代码:
->where('table.contents.type = ?', 'post');
替换为以下代码:
->where('table.contents.type = ? OR table.contents.type = ?', 'post', 'page');
至此,已完成给独立页开启标签功能,并将其纳入标签云和标签页的改造。
文章目录