typecho单页与文章页自定义字段方法|二次开发|

tengxunyun cera

自定义字段这个东西虽然typecho里面自己带了一个themeFields方法,但是新人用起来终究会有些尴尬,而且网上也没啥教程,今天来教大家一个比较简单的方式,就是无论你是否有基础,都会操作的一个方法。


简述

首先理清思路,我们需要对postpage两个类型的页面来添加不同的自定义字段,说到自定义字段,我们可能会想到数据库啥的东西,没错,我们首先要去postpage对应的表中来进行添加字段,然后实现字段写入,最终达到可调用的效果,这就是今天文章的主体思路,接着往下看;

post 页面新增字段方法

post 页面其实就是文章发布页面

首先这个方法我是从我的好基佬seogo那儿看到的,先无情的抄袭一波好了,给整合整合。

我现在需要在文章里面体现一个头图,市场价,优惠价,然后填写数值直接调用。

  • 数据库中新增字段,使用Navicat for MySQL数据库管理工具(不要问我为啥要使用这个工具)如下
  • 在表typecho_contents中新增的3个字段的名称分别为conImg 文章头图,comPrice 优惠价,comOprice 原价

 

  • 在后台文章发布页面中添加可供填写的表单
    • 涉及文件修改 :\admin\write-post.php
  • 进入到对应文件的编辑界面,在你认为合适的地方添加如下代码(我是网址缩略名下面儿加的)
<p>
    <input type="text" name="conImg" class="w-100" placeholder="<?php _e('头图链接'); ?>" value="<?php $post->conImg(); ?>"/>
    <input type="text" name="comOprice" placeholder="<?php _e('市场价'); ?>" value="<?php $post->comOprice(); ?>"/>
    <input type="text" name="comPrice" placeholder="<?php _e('现价'); ?>" value="<?php $post->comPrice(); ?>"/> 
</p>
// namevalue,内的字段一定要匹配才行,而且还得和数据库中加入的字段名匹配,不要错,细心一点儿
  • 文章发布页面展示效果如下

 

  • writePost函数添加写入字段,文件路径:\var\Widget\Contents\Post\Edit.php,代码如下
// 查询 public function writePost() 参照如下添加
public function writePost()
    {
        $contents = $this->request->from('password', 'allowComment',
            'allowPing', 'allowFeed', 'slug', 'tags', 'text', 'visibility', 'conImg', 'comPrice', 'comOprice');
  • insert函数添加构建插入结构,文件路径:\var\Widget\Abstract\Contents.php
// 查询 public function insert(array $content) 参照如下添加
public function insert(array $content)
    {
        /** 构建插入结构 */
        $insertStruct = array(
            'title'         =>  empty($content['title']) ? NULL : htmlspecialchars($content['title']),
            'created'       =>  empty($content['created']) ? $this->options->time : $content['created'],
            'modified'      =>  $this->options->time,
            'text'          =>  empty($content['text']) ? NULL : $content['text'],
            'order'         =>  empty($content['order']) ? 0 : intval($content['order']),
            'authorId'      =>  isset($content['authorId']) ? $content['authorId'] : $this->user->uid,
            'template'      =>  empty($content['template']) ? NULL : $content['template'],
            'type'          =>  empty($content['type']) ? 'post' : $content['type'],
            'status'        =>  empty($content['status']) ? 'publish' : $content['status'],
            'password'      =>  empty($content['password']) ? NULL : $content['password'],
            'commentsNum'   =>  empty($content['commentsNum']) ? 0 : $content['commentsNum'],
            'allowComment'  =>  !empty($content['allowComment']) && 1 == $content['allowComment'] ? 1 : 0,
            'allowPing'     =>  !empty($content['allowPing']) && 1 == $content['allowPing'] ? 1 : 0,
            'allowFeed'     =>  !empty($content['allowFeed']) && 1 == $content['allowFeed'] ? 1 : 0,
            'parent'        =>  empty($content['parent']) ? 0 : intval($content['parent']),
            // 如下三个是我新增加的三个字段及对应的参数
            'conImg'        =>  empty($content['conImg']) ? NULL : $content['conImg'],
            'comPrice'      =>  empty($content['comPrice']) ? NULL : $content['comPrice'],
            'comOprice'     =>  empty($content['comOprice']) ? NULL : $content['comOprice']
     );
  • update函数添加构建更新结构,文件路径:\var\Widget\Abstract\Contents.php
// 查询 public function update(array $content, Typecho_Db_Query $condition) 参照如下添加
public function update(array $content, Typecho_Db_Query $condition)
    {
        /** 首先验证写入权限 */
        if (!$this->isWriteable(clone $condition)) {
            return false;
        }

        /** 构建更新结构 */
        $preUpdateStruct = array(
            'title'         =>  empty($content['title']) ? NULL : htmlspecialchars($content['title']),
            'order'         =>  empty($content['order']) ? 0 : intval($content['order']),
            'text'          =>  empty($content['text']) ? NULL : $content['text'],
            'template'      =>  empty($content['template']) ? NULL : $content['template'],
            'type'          =>  empty($content['type']) ? 'post' : $content['type'],
            'status'        =>  empty($content['status']) ? 'publish' : $content['status'],
            'password'      =>  empty($content['password']) ? NULL : $content['password'],
            'allowComment'  =>  !empty($content['allowComment']) && 1 == $content['allowComment'] ? 1 : 0,
            'allowPing'     =>  !empty($content['allowPing']) && 1 == $content['allowPing'] ? 1 : 0,
            'allowFeed'     =>  !empty($content['allowFeed']) && 1 == $content['allowFeed'] ? 1 : 0,
            'parent'        =>  empty($content['parent']) ? 0 : intval($content['parent']),
            // 如下三个是我新增加的三个字段及对应的参数
            'conImg'        =>  empty($content['conImg']) ? NULL : $content['conImg'],
            'comPrice'      =>  empty($content['comPrice']) ? NULL : $content['comPrice'],
            'comOprice'     =>  empty($content['comOprice']) ? NULL : $content['comOprice']
     );
  • select函数里添加查询新字段,文件路径:\var\Widget\Abstract\Contents.php
// 查询 public function select() 参照如下添加
// 新增加了 table.contents.conImg , table.contents.comPrice , table.contents.comOprice
public function select()
{
    return $this->db->select('table.contents.cid', 'table.contents.title', 'table.contents.slug', 'table.contents.created', 'table.contents.authorId',
    'table.contents.modified', 'table.contents.type', 'table.contents.status', 'table.contents.text', 'table.contents.commentsNum', 'table.contents.order',
    'table.contents.template', 'table.contents.password', 'table.contents.allowComment', 'table.contents.allowPing', 'table.contents.allowFeed',
    'table.contents.parent', 'table.contents.conImg', 'table.contents.comPrice', 'table.contents.comOprice')->from('table.contents');
}

post 页面新增字段调用方法

// 调用原价
<?php $this->comOprice() ?>
// 调用现价
<?php $this->comPrice() ?>
// 调用缩略图
<?php $this->conImg() ?>

page 页面新增字段方法

page 页面其实就是独立页面

确定思路,做了一个样式,独立页面调用出来了之后,我还想在页面名称上边或者左右显示每个独立页面的自己的图标

有些方法和post页面添加字段一样,具体的请接着往下看

  • 数据库中表typecho_contents增加我自己事先想好的字段fontawesome,如下图

  • 在后台文章发布页面中添加可供填写的表单
    • 涉及文件修改 :\admin\write-page.php,记住,这里是write-page
  • 进入到对应文件的编辑界面,在你认为合适的地方添加如下代码(我是在侧栏发布时间的下面儿加的,我觉的美观)
// 千万注意一点value 里面的页面参数应该是 $page->fontawesome(); 
// 而且还得注意,name,value里面的字段名称一定要和数据库中新增加的匹配上,细心点儿
<section class="typecho-post-option">
    <label for="fontawesome" class="typecho-label"><?php _e('Font Awesome图标'); ?></label>
    <p><input type="text" name="fontawesome" placeholder="<?php _e('fontawesome'); ?>" value="<?php $page->fontawesome(); ?>"/> </p>
    <p class="description"><?php _e('自豪的采用了<a href="http://fontawesome.dashgame.com/" target="_blank">Font Awesome</a>字体图标'); ?></p>
</section>
  • 独立页面展示效果如下

 

  • writePage函数添加写入字段,文件路径:\var\Widget\Contents\Page\Edit.php,代码如下
// 查询 public function writePage() 参照如下添加
public function writePage()
    {
        $contents = $this->request->from('text', 'template', 'allowComment',
            'allowPing', 'allowFeed', 'slug', 'order', 'visibility', 'fontawesome');
  • insert函数添加构建插入结构,文件路径:\var\Widget\Abstract\Contents.php
// 查询 public function insert(array $content) 参照如下添加
public function insert(array $content)
    {
        /** 构建插入结构 */
        $insertStruct = array(
            'title'         =>  empty($content['title']) ? NULL : htmlspecialchars($content['title']),
            'created'       =>  empty($content['created']) ? $this->options->time : $content['created'],
            'modified'      =>  $this->options->time,
            'text'          =>  empty($content['text']) ? NULL : $content['text'],
            'order'         =>  empty($content['order']) ? 0 : intval($content['order']),
            'authorId'      =>  isset($content['authorId']) ? $content['authorId'] : $this->user->uid,
            'template'      =>  empty($content['template']) ? NULL : $content['template'],
            'type'          =>  empty($content['type']) ? 'post' : $content['type'],
            'status'        =>  empty($content['status']) ? 'publish' : $content['status'],
            'password'      =>  empty($content['password']) ? NULL : $content['password'],
            'commentsNum'   =>  empty($content['commentsNum']) ? 0 : $content['commentsNum'],
            'allowComment'  =>  !empty($content['allowComment']) && 1 == $content['allowComment'] ? 1 : 0,
            'allowPing'     =>  !empty($content['allowPing']) && 1 == $content['allowPing'] ? 1 : 0,
            'allowFeed'     =>  !empty($content['allowFeed']) && 1 == $content['allowFeed'] ? 1 : 0,
            'parent'        =>  empty($content['parent']) ? 0 : intval($content['parent']),
            // 如下三个是我新增加的三个字段及对应的参数
            'conImg'        =>  empty($content['conImg']) ? NULL : $content['conImg'],
            'comPrice'      =>  empty($content['comPrice']) ? NULL : $content['comPrice'],
            'comOprice'     =>  empty($content['comOprice']) ? NULL : $content['comOprice'],
            // 独立页面构建插入结构
            'fontawesome'   =>  empty($content['fontawesome']) ? NULL : $content['fontawesome']
            
     );
  • update函数添加构建更新结构,文件路径:\var\Widget\Abstract\Contents.php
// 查询 public function update(array $content, Typecho_Db_Query $condition) 参照如下添加
public function update(array $content, Typecho_Db_Query $condition)
    {
        /** 首先验证写入权限 */
        if (!$this->isWriteable(clone $condition)) {
            return false;
        }

        /** 构建更新结构 */
        $preUpdateStruct = array(
            'title'         =>  empty($content['title']) ? NULL : htmlspecialchars($content['title']),
            'order'         =>  empty($content['order']) ? 0 : intval($content['order']),
            'text'          =>  empty($content['text']) ? NULL : $content['text'],
            'template'      =>  empty($content['template']) ? NULL : $content['template'],
            'type'          =>  empty($content['type']) ? 'post' : $content['type'],
            'status'        =>  empty($content['status']) ? 'publish' : $content['status'],
            'password'      =>  empty($content['password']) ? NULL : $content['password'],
            'allowComment'  =>  !empty($content['allowComment']) && 1 == $content['allowComment'] ? 1 : 0,
            'allowPing'     =>  !empty($content['allowPing']) && 1 == $content['allowPing'] ? 1 : 0,
            'allowFeed'     =>  !empty($content['allowFeed']) && 1 == $content['allowFeed'] ? 1 : 0,
            'parent'        =>  empty($content['parent']) ? 0 : intval($content['parent']),
            // 如下三个是我新增加的三个字段及对应的参数
            'conImg'        =>  empty($content['conImg']) ? NULL : $content['conImg'],
            'comPrice'      =>  empty($content['comPrice']) ? NULL : $content['comPrice'],
            'comOprice'     =>  empty($content['comOprice']) ? NULL : $content['comOprice'],
            // 独立页面构建更新结构
            'fontawesome'   =>  empty($content['fontawesome']) ? NULL : $content['fontawesome']
     );
  • select函数里添加查询新字段,文件路径:\var\Widget\Abstract\Contents.php
// 查询 public function select() 参照如下添加
// 新增加了一个 table.contents.fontawesome
public function select()
{
    return $this->db->select('table.contents.cid', 'table.contents.title', 'table.contents.slug', 'table.contents.created', 'table.contents.authorId',
    'table.contents.modified', 'table.contents.type', 'table.contents.status', 'table.contents.text', 'table.contents.commentsNum', 'table.contents.order',
    'table.contents.template', 'table.contents.password', 'table.contents.allowComment', 'table.contents.allowPing', 'table.contents.allowFeed',
    'table.contents.parent', 'table.contents.conImg', 'table.contents.comPrice', 'table.contents.comOprice', 'table.contents.fontawesome')->from('table.contents');
}

page 页面新增字段调用方法

// 独立页面图标
<?php $pages->fontawesome() ?>

cera aliyun tengxunyun cloudiplc

相关推荐

SoyouStart|夏季|$28.99每月|E3-1225v2|16G内存|6T硬盘|不限流量|250Mbps带宽|加拿大|法国

#SoyouStart#,发布了夏季优惠,大部分优惠30%,不免设置费。SoyouStart可每台独服可免费添加16个IP,每个IP设置费均为#2欧#元。 活动页面:https://www.soyoustart.com/us/essential-servers/ CPU:Intel Xeon E3-1225v2 4c / 4t 3.2GHz 内存:16 GB DDR3 硬盘:3 x 2 TB 流量:不限(#250Mbps#带宽) $28.99/月 设置费:20欧(一次性) 购买链接 SYS-LE-1 CPU:Intel Xeon E3-1230v6 4c / 8t ( 3.5GHz ) 内存:16 GB DDR4 硬盘:2 x 4 TB 流量:不限(250Mbps带宽) $34.99/月 设置费:20欧(一次性) 购买链接

hosteons测评|优惠码|KVM VPS|限制流量|年付24美元|优惠码

hostEONS怎么样?hostEONS好不好?刚刚收到了hostEONS的邮件,内容大致意思就是目前商家提供的带宽为100M,但是用户的带宽几乎都是超过100M的,所有商家决定把KVM架构的VPS升级为#1Gbps#带宽,另外CPU也换成了#AMD#,同时硬盘全面启用NVME,配置升级后,当然价格也有会所提高,站长大致看了一下,提升的并不是太多,商家还算是比较良心,商家经常提供7折优惠,有需要的可以关注。 #hosteons#,一家成立于2018年海外IDC商家,一直以来主打基于KVM架构不限流量VPS主机业务,多个节点供选择;后期上线了G口#限制流量#方案,在2020年12月,商家上线了全新AMD平台KVM VPS主机,暂时可以选择洛杉矶节点,G口共享,限制流量,最低512M内存方案年付24美元起,采用AMD Ryzen 3900x + DDR4 +NVMe系列,对于有需求高性能的可以关注一下,普通线路。 Hosteons,#新加坡#主机商,正规注册公司(Registration No.: 201806413N),其VPS基于KVM,数据中心有#洛杉矶psychz#、洛杉矶#INAP#、#纽约#等。现在新推出了免费#100Gbps DDOS#防护的KVM VPS,位于洛杉矶。同时,增加了拉斯维加斯、杰克逊维尔等,可选择多。现在CPU、内存、空间、流量升级,价格不变,性价比更合适。 1,支持#Paypal#、支付宝、#信用卡#、比特币付款;年付性价比高 2,收费更换国内可用IP,每次3美金 3、所有VPS均可免费获取BLESTA授权 4、#优惠码#:DA(免费送Direct Admin授权,限KVM VPS2-7);优惠码:DOUBLERAM(免费获得双倍内存);优惠码:DOUBLEDISK(免费获得双倍空间);优惠码:DOUBLEPORT(免费获得双倍带宽,即200M不限流量);优惠码:UPGRADE(免费升级到高一级套餐);优惠码:INTRO20(一次性优惠20%);优惠码:RECURR20 (永久优惠20%) 512M 1核 10G 500G $24/年 链接 1G 1核 15G 1T $36/年 链接 洛杉矶的网络窥镜– https://lg.hosteons.com 纽约的 网络窥镜– http://lg.ny.hosteons.com 杰克逊维尔(JAX)的网络窥镜– https:// lg。 jax.hosteons.com 杰克逊维尔(JAX)的网络观察镜– https://lg.vegas.hosteons.com 网络测试:#103.114.161#.10,https://lg.jax.hosteons.com/100MB.test 看起来走势也就100M的口子,延迟也非常高,部分地区肯定是绕路了 回程路由测试: 广州电信(天翼云) 回程: Loss% Snt Last Avg Best Wrst StDev 1. the first row hidden …

Rainbow Cloud测评|优惠码|日本CN2|$10.8每月|512MB内存|20GB SSD空间|200GB流量|20Mbps-50Mbps端口|KVM

MIDC(#彩虹网络#,又 Rainbow Cloud),现在有2款#台湾#特价独服摸奖活动,性价比高。支持#paypal#、#支付宝#付款。 CPU:随机 E3-12XX 内存:随机 8 /16 GB 硬盘:1TB HDD 流量:不限 / 月(#10Mbps#-20Mbps带宽) IPv4:1 $20/月 #优惠码#:TWE320OFF 购买链接(台湾) MIDC(#彩虹网络#)是一家香港本土运营商,在台湾和东京均有开设分公司和代管机房,全线产品自营,自有IP网络资源等,提供的产品包括#VPS主机#、#独立服务器#、站群独立服务器等,数据中心区域包括香港、日本、台湾、美国和南非等地机房,CN2网络直连到国内。现在日本CN2 KVM VPS有永久6折优惠,性价比还可以。 优惠码:JPOFF40(日本CN2 VPS永久优惠40%);支持#Paypal#、#支付宝#付款 vCPU 内存 空间 流量 端口 价格 链接 1 512MB 20GB SSD 200GB #20Mbps# $18/月 购买链接

Hosting55测评|优惠码|匈牙利VPS|月付5.8美元|立陶宛|大硬盘|抗投诉VPS

现在,Hosting55促销东欧VPS,主要涉及匈牙利和立陶宛机房,其中匈牙利VPS月付5.8美元起,立陶宛大硬盘抗投诉VPS月付6美元起!有需要的可以关注下。 Hosting55怎么样,Hosting55好不好,Hosting55自称成立于2004年,主营立陶宛、匈牙利、罗马尼亚、摩尔多瓦机房的离岸抗投诉vps和美国、德国、日本机房的虚拟主机业务。 Hosting55虽然主营抗投诉服务器,分布在东欧机房,到国内速度比较差。但商家抗投诉VPS很少做促销,不过他家的独立服务器有不少促销活动,这次促销东欧的匈牙利vps和立陶宛vps机房,大家可以根据自己的需要入手。如果想要速度快的抗投诉服务器,可以试试主营东南亚机房的VinaHost。 Hosting55官网:https://hosting55.com,需要下单完成注册,无直接注册入口 Hosting55的欧洲抗投诉vps,主机区分机房和虚拟化,LXC虚拟化很烂而且月付要安装费,性价比其实都不高,但是都是10Gbps带宽: 虚拟化 机房 核心 内存 硬盘 流量 带宽 IPv4 IPv6 价格 购买地址 LXC 匈牙利 1核 1G 10GB 5TB 10Gbps 1个 1个 4.5美元/月 点此购买 KVM 匈牙利 1核 1G 10GB 5TB 10Gbps 1个 1个 5.8美元/月 点此购买 KVM 立陶宛 1核 1G 10GB 5TB 10Gbps 1个 1个 9.5美元/月 点此购买 配置信息 处理为 AMD 9 3900X 而IO的读写速度还是相当不错的,可以用来处理更多的数据。

微信扫一扫,分享到朋友圈

typecho单页与文章页自定义字段方法|二次开发|