红穆笔记
首頁 程序筆記 Typecho 主題開發
程序筆記 Typecho

Typecho 主題開發

Typecho 主题开发

在 Typecho 官方的主題開發文檔中,很少有關於文章自定義字段和主題設置相關的開發說明。我也是查看了一些開源主題的代碼才搞懂自定義字段和主題設置的開發。這裏就簡單寫一下文章自定義字段和主題設置的定義和調用。

文章自定義字段

文章自定義字段定義後會顯示在文章編輯界面的編輯框下方,用戶可以使用定義好的選項來設置每篇文章的偏好,在輸出文章的時候可以調用用戶的設置,實現一些個性化功能。

文章自定義字段需要在主題目錄下的 functions.php 文件中的 themeFields 函數中定義。

input 輸入框

下面定義一個 input 輸入框:

function themeFields($layout) {
    $image = new Typecho_Widget_Helper_Form_Element_Text('image', null, null, _t('文章頭圖'), _t('文章頭圖會顯示在文章的頂部。'));
    $layout->addItem($image);  //  註冊
}

Typecho_Widget_Helper_Form_Element_Text 的第一個參數是字段名。

第二個參數目前暫時未知。

第三個參數是默認值。

第四個參數是提示信息,會顯示在輸入框關聯的 label 標籤中。

第五個參數是更詳細的提示信息,會顯示在輸入框下方。

在輸出文章的時候可以通過 $this->fields->image() 輸出自定義字段的內容,其中的 image 就是字段名稱。如果要判斷字段是否有內容可以直接用 if 來判斷 $this->fields->image ,如果有內容就會返回 true ,否則就返回 false 。
select 下拉選擇

定義一個 select 下拉選擇

function themeFields($layout) {
    $articleCopyright = new Typecho_Widget_Helper_Form_Element_Select('articleCopyright', array(
        'show' => '顯示',
        'hide' => '不顯示'
    ), 'show', _t('顯示原創聲明'), _t('開啓後會在本篇文章底部顯示版權聲明。'));
    $layout->addItem($articleCopyright);  //  註冊  
}

注意!只要是文章的自定義字段都需要寫在 themeFields 函數內,多個字段也只需要寫在一個 themeFields 函數內。

Typecho_Widget_Helper_Form_Element_Select 的第一個參數是字段名稱。第二個參數是下拉選擇的內容,需要傳入一個數組。第三個參數是默認值,默認值的類型爲字符串,需要傳入一個數組的鍵名。第四個參數是 label 標籤關聯的提示信息。第五個參數是更詳細的提示信息。

在輸出文章的時候可以用 if 來判斷 $this->fields->articleCopyright 的值,其中 articleCopyright 就是字段名。下面判斷 $this->fields->articleCopyright 的值:

if ($this->fields->articleCopyright == 'show') {
    //  如果是選中狀態就返回 true
}

Typecho 文章自定義字段 input 輸入框 和 select 下拉選擇的效果

主題設置字段

主題設置字段定義後會顯示在主題的外觀設置頁,用戶可以使用定義好的選項來設置主題的外觀和功能。

主題設置的字段需要在主題目錄下的 funcions.php 中的 themeConfig 函數中定義。

定義一個 input 輸入框

function themeConfig($cfg) {
    $logoUrl = new Typecho_Widget_Helper_Form_Element_Text('logoUrl', null, null, _t('站點 Logo 地址'), _t('Logo 會顯示在標籤頁的標題前面。'));
    $cfg->addInput($logoUrl);  //  註冊
}

主題設置字段的 Typecho_Widget_Helper_Form_Element_Text 參數和文章自定義字段的 Typecho_Widget_Helper_Form_Element_Text 的參數是一樣的。

主題設置字段可以在任何一個頁面使用 $this->options->logoUrl() 輸出,其中的 logoUrl 就是字段名。如果要判斷字段是否有內容也可以用 if 來判斷 $this->options->logoUrl ,如果有內容就會返回 true ,否則返回 false 。
textarea 輸入框

定義一個 textarea 輸入框

function themeConfig($cfg) {
    $cssCode = new Typecho_Widget_Helper_Form_Element_Textarea('cssCode', null, null, _t('自定義 CSS'), _t('通過自定義 CSS 您可以很方便的設置頁面樣式,自定義 CSS 不會影響網站源代碼。'));
    $cfg->addInput($cssCode);  //  註冊
}

注意!所有的主題設置字段都需要寫在 themeConfig 函數中,多個字段也只需要寫在一個 themeConfig 函數中。

Typecho_Widget_Helper_Form_Element_Textarea 的參數和 input 輸入框的參數是一樣的。

textarea 的輸出和查詢和上面的 input 是一樣的。

checkbox 複選框

定義一組 checkbox 複選框

function themeConfig($cfg) {
    $sidebarBlock = new Typecho_Widget_Helper_Form_Element_Checkbox('sidebarBlock',
        array(
            'ShowRecentPosts' => _t('顯示最新文章'),
            'ShowRecentComments' => _t('顯示最近回覆'),
            'ShowCategory' => _t('顯示分類'),
            'ShowTag' => _t('顯示標籤雲'),
            'ShowArchive' => _t('顯示歸檔'),
            'ShowOther' => _t('顯示其它雜項'),
            'HideLoginLink' => _t('隱藏登錄入口')
        ),
        array(
            'ShowRecentPosts',
            'ShowRecentComments',
            'ShowCategory'
        ), _t('側邊欄顯示')
    );
    $cfg->addInput($sidebarBlock->multiMode());  //  註冊
}

Typecho_Widget_Helper_Form_Element_Checkbox 的第一個參數是字段名。第二個參數是複選框的內容,需要傳入一個數組。第三個參數是複選框的選中狀態,需要傳入一個數組,數組的內容就是第二個參數中數組的鍵名。第四個參數是複選框組的標題,會顯示在複選框的上方。

注意!在註冊的時候需要傳入 Typecho_Widget_Helper_Form_Element_Checkbox 的 multiMode() 方法。

如果需要判斷複選框的選中狀態可以使用 in_array 函數來查找 $this->options->sidebarBlock 的選項。

下面判斷 顯示最新回覆 是否選中 :

if (is_array($this->options->sidebarBlock) && in_array('ShowRecentComments', $this->options->sidebarBlock)) {
    //  返回 true
}

如果一組複選框中沒有一個被選中,$this->options->sidebarBlock 的值就是 null 。只使用 in_array() 查找的話可能會報錯,需要先用 is_array() 判斷是否是數組。

定義一組 radio 單選框

function themeConfig($cfg) {
    $navbarColor = new Typecho_Widget_Helper_Form_Element_Radio('navbarColor', array(
        'white' => '白色',
        'black' => '黑色'
    ), 'black', _t('導航欄顏色'));
    $cfg->addInput($navbarColor);
}

Typecho_Widget_Helper_Form_Element_Radio 的第一個參數是字段名。第二個參數是單選框的內容,需要傳入一個數組。第三個參數是單選框的選中狀態,需要傳入第二個參數數組的鍵名。第四個參數是單選框組的標題,會顯示在單選框的上方。

如果要判斷單選框的選中狀態可以用 if 來判斷 $this->options->navbarColor 的值,其中的 navbarColor 是字段名。

判斷單選框的選中狀態

if ($this->options->navbarColor == 'black') {
    //  如果黑色選中就返回 true
}

微信赞赏

微信

支付宝赞赏

支付寶

✍️ 作者: 紅穆

網站管理員 · 感謝閱讀,更多精彩內容敬請關注

作者主頁 查看主頁 →

相關文章

资源网站typecho001模板

資源網站typecho001模板 程序筆記 Typecho

typecho001模板板本請勿修改本模板文件夾名稱 文件夾名稱爲:typecho001 1.4修復文章頁面js輸出問題1.3修復未安裝插件時的報錯提示優化列表頁代碼輸出1.2修復評論功能增加自定義首頁標題1.1修復評論回覆不對稱功能添加首頁單獨的標題設置功能增加網站favicon.ico圖標增加一…
👁 198
typecho分页样式的修改

typecho分頁樣式的修改 程序筆記 Typecho

大人,時代變了!目前typecho最完美的解決方案了,因爲百度只能看到固定思維的代碼。實際生成的html代碼,乾淨到讓人窒息完全的自定義,包括給li元素加上class,給a元素加上class,給上一頁下一頁加上class,去除typecho自帶用於表示更多的li標籤。甚至裏面的內容我也能添加一些文字…
👁 517
typecho文章页评论样式修改

typecho文章頁評論樣式修改 程序筆記 Typecho

需求使用 typecho 進行模板開發的時候,默認評論樣式很難看。因此需要評論需要重新輸出或進行樣式設定。默認的評論模板文件路徑是:comments.php主要使用的相關變量<?php $comments->gravatar('40', ''); ?> //頭像,有兩個參數,大小、…
👁 389
Typecho 对数据库的增删改查操作方法 API

Typecho 對數據庫的增刪改查操作方法 API 程序筆記 Typecho

Typecho數據庫提供了非常易用的api,和原生SQL寫法沒有太大的差別,同時也很好地處理了SQL常見的安全問題,如sql注入。本文從實用角度出發,介紹了typecho操作數據庫的常用場景以及相關api用法。表創建和刪除在Typecho插件開發過程中,往往需要創建自己的表。上文提到Typecho_…
👁 552
Typecho调用热门评论文章和调用最新文章的方法总结

Typecho調用熱門評論文章和調用最新文章的方法總結 程序筆記 Typecho

Typecho文章調用Typecho程序在設計主題的時候,側欄有些時候需要調用熱評文章或者最新文章。我們可以在指定的位置通過腳本直接調用。在這篇文章整理這個調用文章的方法,以後在有需要的模板中可以直接調用使用。其實設計主題就那麼回事,靜態模板搞定後,就是直接調用。最新文章調用 <?php $t…
👁 295
Typecho 调用分类文章列表

Typecho 調用分類文章列表 程序筆記 Typecho

其中pageSize後面的數字表示調用文章的數量;mid後面的數字表示調用的分類ID;提示:Typecho分類目錄ID的獲取方法是把鼠標移到某分類名稱上面,在瀏覽器狀態欄顯示的mid=後面的數字便是該分類目錄ID編輯當前typecho主題模板,在要調用某分類目錄的位置添加以下代碼方法一:widget…
👁 360

推薦閱讀

PHP ob函数记录

PHP ob函數記錄 語言筆記 PHP

下面3個函數的用法 ob_get_contents(); ob_end_clean(); ob_start(); 可以藉助這幾個函數實現緩衝本地文件,以及執行本地腳本代碼。 使用ob_start()把輸出的代碼存到緩衝區,頁面不會顯示出來; 然後用ob_get_contents得到緩衝區的數據。 o…
👁 141
PHP preg

PHP preg 語言筆記 PHP

preg_match_all 函數用於執行一個全局正則表達式匹配。preg_match_all() 語法int preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG…
👁 169
PHP 三元运算符与if的详解

PHP 三元運算符與if的詳解 語言筆記 PHP

三元運算符語條件 ? 結果1 : 結果2 說明:問號前面的位置是判斷的條件,如果滿足條件時結果1,不滿足時結果2。本文對三元運算符和if...else...進行對比詳解,希望對大家有所幫助。今天在改論文在線的時候遇到了一個語句看不懂:$if_summary = $row['IF_SUMMARY']=…
👁 189
PHP强制转换类型

PHP強制轉換類型 語言筆記 PHP PHP採集 PHP與mysql

獲取數據類型1.如果想查看某個表達式的值和類型,用var_dump()。 2.如果只是想得到一個易讀懂的類型的表達方式用於調試,用 gettype()。3.要查看某個類型,不要用 gettype(),而用is_type() 函數。字符串轉換爲數值當一個字符串被當作數字來求值時,根據以下規則來決定結果…
👁 232
Typecho的Widget

Typecho的Widget 程序筆記 Typecho

通過Typecho的Widget_Options,可以方便地獲取Typecho的系統信息,或者方便地獲取相關配置、資源路徑等。這裏列出常用的Widget_Options函數和用法,方便各位筒子方便查閱。通過Widget_Options獲取路徑信息獲取內置URL通過這類api,可以獲取TE內置的一些特…
👁 193