typecho自定义页面模板

typecho允许用户自定义模板,模板主要用于首页或其他页面,这里的其他页面可以是一个归档页,也可以是一个友情链接页面。如果需要自定义一个首页模板,需要在php文件的头部添加如下代码,用来告诉typecho程序该页面的用途:

<?php
/**
 * 自定义首页模板
 *
 * @package index
 */
?>

如果是其他的功能页面则统一添加下面的代码:

<?php
/**
 * 自定义页面模板
 *
 * @package custom
 */
?>

上面这两段代码中,“自定义xx模板”是这一排文字是页面模板的标题,可以任意修改为自己喜欢的描述。将包含上述代码的php文件保存到主题根目录后,我们可以在后台“独立页面”选项中选择任意一个页面打开,在页面右边的自定义模板中可以看到我们刚刚定义的模板,当然,目前还仅仅是一个空白模板。

定义一个sitemap的模板

将以下代码在主题根目录下保存为php文件,然后新建一个页面,选择模板为“HTML版网站地图Sitemap”,确认保存后可以为站点生成一个html版本的sitemap页面。以下代码来自知乎:

<?php
/**
*HTML版网站地图Sitemap
*
* @package custom
*/
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head profile="http://gmpg.org/xfn/11">
  <meta http-equiv="Content-Type" content="text/html; charset=<?php $this->options->charset(); ?>" />
  <title>站点地图 - <?php $this->options->title() ?></title>
  <meta name="keywords" content="站点地图,<?php $this->options->title() ?>" />
  <meta name="copyright" content="<?php $this->options->title() ?>" />
  <link rel="canonical" href="<?php $this->permalink() ?>" />
  <style type="text/css">
    body {font-family: Microsoft Yahei,Verdana;font-size:13px;margin:0 auto;color: #000000;background: #ffffff;width: 990px;margin: 0 auto}
    a:link,a:visited {color:#000;text-decoration:none;}
    a:hover {color:#08d;text-decoration:none;}
    h1,h2,h3,h4,h5,h6 {font-weight:normal;}
    img {border:0;}
    li {margin-top: 8px;}
    .page {padding: 4px; border-top: 1px #EEEEEE solid}
    .author {background-color:#EEEEFF; padding: 6px; border-top: 1px #ddddee solid}
    #nav, #content, #footer {padding: 8px; border: 1px solid #EEEEEE; clear: both; width: 95%; margin: auto; margin-top: 10px;}
  </style>
</head>
<body vlink="#333333" link="#333333">
  <h2 style="text-align: center; margin-top: 20px"><?php $this->options->title() ?>'s SiteMap </h2>
  <center></center>
  <div id="nav"><a href="<?php $this->options ->siteUrl(); ?>"><strong><?php $this->options->title() ?></strong></a> » <a href="<?php $this->permalink() ?>">站点地图</a></div>
  <div id="content">
    <h3>最新文章</h3>
    <ul>
      <?php
      $stat = Typecho_Widget::widget('Widget_Stat');
      $this->widget('Widget_Contents_Post_Recent', 'pageSize='.$stat->publishedPostsNum)->to($archives);
      $year=0; $mon=0; $i=0; $j=0;
      while($archives->next()){
          $year_tmp = date('Y',$archives->created);
          $mon_tmp = date('m',$archives->created);
          $y=$year; $m=$mon;
          if ($year > $year_tmp || $mon > $mon_tmp) {
              $output .= '</ul>';
          }
          $output .= '<li><a href="'.$archives->permalink .'">'. $archives->title .'</a></li>';
      }
      $output .= '</ul>';
      echo $output;
      ?>
    </ul>
  </div>
  <div id="content">
    <li class="categories">分类目录
      <ul><?php $this->widget('Widget_Metas_Category_List')
               ->parse('<li><a href="{permalink}">{name}</a> ({count})</li>'); ?>
      </ul>
    </li>
  </div>
  <div id="content">
    <li class="categories">独立页面</li>
    <ul class="clearfix" id="nav_menu">
      <li><a href="<?php $this->options->siteUrl(); ?>">首页</a></li>
      <?php $this->widget('Widget_Contents_Page_List')
                 ->parse('<li><a href="{permalink}">{title}</a></li>'); ?>
    </ul>
  </div>
  <div id="footer">查看博客首页: <strong><a href="<?php $this->options ->siteUrl(); ?>"><?php $this->options->title() ?></a></strong></div><br />
  <center>
    <div style="text-algin: center; font-size: 11px"><br /> © <?php echo date('Y'); ?> <strong><a href="<?php $this->options ->siteUrl(); ?>" target="_blank"><?php $this->options->title() ?></a></strong> 版权所有<br /><br /><br />
    </div>
  </center>
</body>
</html>

部署一个jsMind实例

修改主题的时候想找一个类似思维导图的软件理一下页面元素的关系,发现了这个jsMind库,部署也相对简单,在主题文件夹内新建了一个project文件夹,把jsMind所需要引用的js以及css文件放在project文件夹下的jsmind文件夹中,然后生成以下模板。

<?php
/**
*思维导图
*
* @package custom
*/
?>
<?php if (!defined('__TYPECHO_ROOT_DIR__')) exit; ?>
<!DOCTYPE HTML>
<html>
<head>
<?php $this->need('_include.php'); ?>
<link type="text/css" rel="stylesheet" href="<?php $this->options->themeUrl('/project/jsmind/style/jsmind.css'); ?>" />
        <style type="text/css">
            #jsmind_container {
                width:100%;
                height: 500px;
                border: solid 1px #ccc;
                background: #f4f4f4;
                margin-bottom: var(--marginN);
                border-radius:var(--radiusL);
            }
        </style>
</head>
<body>
<?php $this->need('_header.php'); ?>
<?php $this->need('_bread.php'); ?>
<div id="aug-main" class="aug-container">
        <div id="jsmind_container"></div>
        <script type="text/javascript" src="<?php $this->options->themeUrl('/project/jsmind/js/jsmind.js'); ?>"></script>
        <script type="text/javascript" src="<?php $this->options->themeUrl('/project/jsmind/js/jsmind.draggable-node.js'); ?>"></script>
        <script type="text/javascript">
            function load_jsmind() {
                var mind = {
                    meta: {
                        name: 'demo',
                        author: 'hizzgdev@163.com',
                        version: '0.2',
                    },
                    format: 'node_array',
                    data: [
                        { id: 'root', isroot: true, topic: 'jsMind' },
                        { id: 'sub1', parentid: 'root', topic: '双击编辑节点' },
                        { id: 'sub2', parentid: 'root', topic: '节点允许拖拽' },  
                        { id: 'sub3', parentid: 'root', topic: '按"enter"键添加同级节点' },
                        { id: 'sub4', parentid: 'root', topic: '按"insert"键添加同级节点' },
                        { id: 'sub5', parentid: 'root', topic: '按"delete"键以删除节点' },
                        { id: 'sub6', parentid: 'root', topic: '自动生成的节点反向时可以拖拽至合适位置' },
                    ],
                };
                var options = {
                    container: 'jsmind_container',
                    editable: true,
                    theme: 'primary',
                };
                var jm = jsMind.show(options, mind);
            }
            load_jsmind();
        </script>
</div>
<?php $this->need('_footer.php'); ?>
</body>
</html>

标签: typecho

移动端可扫我直达哦~

推荐阅读

thumbnail 2025-06-08

typecho前台ajax登录与错误处理

尝试了在主题前台做一个登录框,登陆的功能是实现了,有一个小小的不便,就是如果输错了密码,因为页面又跳回了首页,所以弹出式登录框又被隐藏了,登录成功与否不够明显,二次登录的场合操作也较繁琐,所以想实现前台以ajax的方式登录。实现aja...

建站相关 typecho

thumbnail 2025-06-08

聊聊html里的head部分

HTML文档的<head>部分是一个容器,用于包含文档的元数据(metadata)和链接到外部资源的信息,这些内容不会直接显示在网页上,但对网页的功能和表现至关重要。主要元素和功能1. 基础元素<title>:...

建站相关 typecho

thumbnail 2025-06-04

typecho前端实现站点语言的切换

前端修改的数据能及时反馈到后端,那当然需要一个前后端都可以无障碍读取的东西,所以最初是想要用localstorage,但发现php无法直接读取其值,所以就换成了cookie。前端通过js来设置参数值:document.cookie='...

建站相关 typecho

thumbnail 2025-06-02

typecho 主题中的模板与模块的概念

模板是 typecho 主题中一个重要的概念,我们说过typecho的极简主题可以只存在 index.php 这一个文件,但需要展现分类页的时候,typecho事实上会先去寻找名为 category.php 的分类页模板,文章页当然也...

建站相关 typecho

thumbnail 2025-06-02

typecho的几种常见的文章列表调用

处理好了header与面包屑,接下来就按照自己的需求自由发挥了,先放一个分类列表,再挑出一个喜欢的标签,自定义一个该标签下内容展示模块。Typecho 提供了多种文章循环方式,以下是常用的几种方法:标准文章循环<?php whi...

建站相关 typecho

thumbnail 2025-06-02

在typecho里实现面包屑导航

什么是面包屑导航面包屑导航是一种网站导航方式,通常在网站顶部显示,大多会放在站点header的下方,用于显示用户当前位置。 面包屑导航由导航元素构成,每个元素代表一个网站导航项,各个元素通常包含对应链接,供用户跳转。面包屑导航示例首页...

建站相关 typecho

thumbnail 2025-05-29

关于typecho中的路由知识

路由(Routing)是博客系统中将URL地址映射到具体处理逻辑的机制,它决定了当用户访问某个网址时,系统应该执行什么操作、显示什么内容。typecho站点一般都会开启伪静态,伪静态通过URL重写将"漂亮"的URL映射到实际的文件路径...

建站相关 typecho

thumbnail 2025-05-29

Typecho 模板中的翻译函数 _t 与 _e

在 Typecho 模板开发中,_t 和 _e 是用于国际化处理的函数,核心区别在于输出方式:"_t" 函数‌‌功能‌:获取翻译后的字符串但不直接输出,需结合 echo 使用。‌示例‌:<?php echo _t('欢迎语');...

建站相关 typecho

thumbnail 2025-05-26

typecho文章自定义字段的删除与修改

涉及数据库的操作,务必请提前做好备份!提前做好备份!!做好备份!!!小鸟数据的当前主题的缩略图字段命名为augPostThumb,这几天在尝试完善一下原有主题,下载了原站的数据库导入了测试站用于测试页面效果,测试主题的缩略图相关字段拟...

建站相关 typecho

thumbnail 2025-05-26

typecho的文章自定义字段的知识笔记

在typecho中,除了可以自定义设置项之外,我们也可以给文章自定义一些额外的字段,比如给文章编辑界面添加一个缩略图选项,或者增加一个keywords输入框,用来修改编辑当前内容页的关键词信息。// 主题设置 function th...

建站相关 typecho