목차
文件在何时被加载
文件中可定义的特殊函数
文件还可以定义自定义函数
백엔드 개발 PHP 튜토리얼 Typecho中的皮肤函数functions.php

Typecho中的皮肤函数functions.php

Jun 23, 2016 pm 01:36 PM

很抱歉,最近很忙,没有时间上来更新内容哈。
上篇文章《Typecho主题制作文件结构》介绍了制作Typecho主题所需要的模板文件,其中有一个特殊的文件,叫“皮肤函数”,文件名为functions.php,。本文将详细介绍此文件的作用。

文件在何时被加载

《Typecho中Widget_Archive解析》中有介绍,Typecho大部分请求的路由,都会转发到Widget_Archive中,在execute()函数中,即大概1357行处,有如下代码:

    /** 初始化皮肤函数 */    $functionsFile = $this->_themeDir . 'functions.php';    if (!$this->_invokeFromOutside && file_exists($functionsFile)) {        require_once $functionsFile;        if (function_exists('themeInit')) {            themeInit($this);        }    }
로그인 후 복사

可见,在Widget_Archive加载目标模板文件前,会先加载模板目录下的functions.php文件,并尝试执行其中的themeInit函数,$this作为参数。

文件中可定义的特殊函数

上文提及了themeInit函数,会在所有模板文件被执行前执行,及可以认为是模板代码中第一个被执行的函数。类似的特殊函数还有:
* themeInit
* themeConfig
* themeConfigHandle
* themeFields
* threadedComments
* singlePing
* treeViewCategories

themeInit函数
themeInit函数会在所有模板文件前加载,一般用于配置Typecho行为,譬如修改默认pageSize为20等。

function themeInit($archive) {    if ($archive->is('index')) {        $archive->parameter->pageSize = 20; // 自定义条数    }}
로그인 후 복사

其作用就是,主页中每页显示文章数由默认值改成20.

themeConfig函数
此函数用于生成模板在后台的配置选项。譬如如下函数,将生成如图的配置页面。

function themeConfig($form) {    $logoUrl = new Typecho_Widget_Helper_Form_Element_Text('logoUrl', NULL, NULL, _t('站点LOGO地址'), _t('在这里填入一个图片URL地址, 以在网站标题前加上一个LOGO'));    $form->addInput($logoUrl);    $sidebarBlock = new Typecho_Widget_Helper_Form_Element_Checkbox('sidebarBlock',     array('ShowRecentPosts' => _t('显示最新文章'),    'ShowRecentComments' => _t('显示最近回复'),    'ShowCategory' => _t('显示分类'),    'ShowArchive' => _t('显示归档'),    'ShowOther' => _t('显示其它杂项')),    array('ShowRecentPosts', 'ShowRecentComments', 'ShowCategory', 'ShowArchive', 'ShowOther'), _t('侧边栏显示'));    $form->addInput($sidebarBlock->multiMode());}
로그인 후 복사

以上代码的效果:

themeConfigHandle函数
还没有搞明白怎么用,欢迎大侠补充哈

themeFields函数
作用类似themeConfig吧,这个也没有仔细研究过。

threadedComments函数
此函数用于配置评论输出。譬如:

function threadedComments($comments, $options) {    echo '自定义内容1';    $comments->content();    echo '自定义内容2';}
로그인 후 복사

那么listComments(); ?>将输出:

<ol><li>自定义内容1 评论内容 自定义内容2</li><li>自定义内容1 评论内容 自定义内容2</li>...</ol>
로그인 후 복사

singlePing函数
//这个也没有研究出是干什么的哈

treeViewCategories函数
此函数用于修改分类的输出样式。具体怎么使用,我研究下再补充上来哈。

文件还可以定义自定义函数

另外,由于functions.php在模板最前面加载,因此这里可以定义自己的函数,并在模板中使用。
举例,最常用的菜单高亮功能中,我们可以在functions.php中定义一个函数判断是否应该高亮当前菜单:

function active_current_menu($archive,$expected,$active_class='active'){    if($expected == 'index' && $archive.is('index')){        echo $active_class;    }else if($archive.is('archive') && $archive.getArchiveSlug() == $expected){        echo $active_class;    }else{        echo '';    }}
로그인 후 복사

那么在模板文件中,可以这样使用:

<ul class='site-nav'>    <li class='<?php active_current_menu($this,'index','active') ?>'><a href="/index.php">首页</a></li>    <li class='<?php active_current_menu($this,'theme','active') ?>'><a href="/index.php/category/theme">模板</a></li>    <li class='<?php active_current_menu($this,'plugin','active') ?>'><a href="/index.php/category/plugin">插件</a></li>    ... ...</ul>
로그인 후 복사

但要注意,functions.php是在Widget_Archive的execute函数中require进来的,因此functions.php中定义的函数都不能直接使用$this,即不能直接访问Widget_Archive内部变量。如果需要使用Widget_Archive的内容,可以通过函数参数的形式传进去,譬如上面的例子。

  • 文章转载自:www.typechodev.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

11 최고의 PHP URL 쇼트너 스크립트 (무료 및 프리미엄) 11 최고의 PHP URL 쇼트너 스크립트 (무료 및 프리미엄) Mar 03, 2025 am 10:49 AM

11 최고의 PHP URL 쇼트너 스크립트 (무료 및 프리미엄)

Laravel의 플래시 세션 데이터로 작업합니다 Laravel의 플래시 세션 데이터로 작업합니다 Mar 12, 2025 pm 05:08 PM

Laravel의 플래시 세션 데이터로 작업합니다

Instagram API 소개 Instagram API 소개 Mar 02, 2025 am 09:32 AM

Instagram API 소개

Laravel 테스트에서 단순화 된 HTTP 응답 조롱 Laravel 테스트에서 단순화 된 HTTP 응답 조롱 Mar 12, 2025 pm 05:09 PM

Laravel 테스트에서 단순화 된 HTTP 응답 조롱

Laravel Back End : Part 2, React가있는 React 앱 구축 Laravel Back End : Part 2, React가있는 React 앱 구축 Mar 04, 2025 am 09:33 AM

Laravel Back End : Part 2, React가있는 React 앱 구축

PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법 PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법 Mar 14, 2025 am 11:42 AM

PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법

Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트 Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트 Mar 13, 2025 pm 12:08 PM

Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트

라 라벨에서 알림 라 라벨에서 알림 Mar 04, 2025 am 09:22 AM

라 라벨에서 알림

See all articles