本文方法是对 Typecho 用法不熟悉的时候瞎写的,前几天突然注意到“自定义字段”功能,发现可以更方便的插入视频(在同一页面插入多个),具体方法请参见:Typecho 自定义字段用法:视频播放

该模板用于在 Typecho 中创建单页视频播放页面,实现单页存储多个视频数据,根据 GET 请求播放不同视频,效果如下链接内容:

http://www.wanghang.ac.cn/ali-xinyan.html

自定义模板的编写要遵守官方文档的描述,代码是我随便写的,没有思考太多,很多地方有待改进。
根据文档描述在自定义文档的开头需要添加如下内容,注意要添加在 PHP 代码块中:

/**
 * 自定义页面模板
 *
 * @package custom
 */

实际操作是将当前使用的模板目录下的 page.php 文件复制一份并重命名,文件名与原有文件不冲突即可,例如 video.php 是我是用的文件名。打开这个文件,将上面代码添加到文件开头算是完成第一步。
下一步是找到文件里面用来显示页面内容的代码,一般是这个:

$this->content();

将此段代码修改成自己的,就完成“自定义模板”的开发了。下面是我写的实现视频播放的垃圾代码,用字符串分割和 JSON 实现数据的识别:

$video_text=$this->text;
$video_start=strpos($video_text,'[video-start]');
$video_end=strpos($video_text,'[video-end]');
if($video_start!==false&&$video_end!==false){
  $video_json=substr($video_text,$video_start+13,$video_end-13);
  $video_msg=substr($video_text,$video_end+11);
 $json_array=json_decode($video_json,true);
  if(isset($_GET['video'])&&$_GET['video']>0&&$_GET['video']<=count($json_array)){
    echo '<h2>正在播放:'.$json_array[$_GET['video']-1]['title'].'</h2>';
    echo '<embed src="'.$json_array[$_GET['video']-1]['url'].'" allowFullScreen="true" quality="high" width="612" height="480" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash"></embed>';
  }else if(count($json_array)>0){
   echo '<h2>正在播放:'.$json_array[0]['title'].'</h2>';
   echo '<embed src="'.$json_array[0]['url'].'" allowFullScreen="true" quality="high" width="612" height="480" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash"></embed>';
 }
 if(count($json_array)>1){
   echo '<p>选集:';
    for($i=1;$i<=count($json_array);$i++){
      echo '<input type="button" value="'.$json_array[$i-1]['title'].'" onclick="location.href=\'?video='.$i.'\'">';
    }
   echo '</p>';
  }
 echo '<p style="border:#777777 solid 1px;padding:5px;">'.$video_msg.'</p>';
}else{
 $this->content();
}

完成上述所有东西之后,打开 Typecho 后台 >> 创建页面 >> 自定义模板 就可以选择新增的模板了,然后是添加视频数据的格式如下:

[video-start]
[{"title":"视频标题","url":"视频站的Flash链接"},{"title":"视频标题","url":"视频站的Flash链接"},……]
[video-end]

代码通过 [video-start] 和 [video-end] 定位并提取 JSON 字符串,编辑时放置在开头,全文只识别一次,视频数量不限,会自动识别并生成“选集按钮”,之后的内容会自动分割并生成“视频介绍”。
下面是《信燕》页面编辑时的内容:

[video-start]
[{"title":"阿狸·信燕第一章","url":"http://static.video.qq.com/TPout.swf?vid=9Eux7PkpWR2&auto=0"},
{"title":"阿狸·信燕第二章","url":"http://static.video.qq.com/TPout.swf?vid=9fsF8Ni684Q&auto=0"},
{"title":"阿狸·信燕第三章","url":"http://static.video.qq.com/TPout.swf?vid=9PE6xV962gU&auto=0"},
{"title":"阿狸·信燕第四章","url":"http://static.video.qq.com/TPout.swf?vid=9Gco8adY96c&auto=0"},
{"title":"阿狸·信燕最终版 番外+MV","url":"http://static.video.qq.com/TPout.swf?vid=P0010IM4yTN&auto=0"}]
[video-end]
  在这个忙碌而快速的时代,有多少人还记得提笔写信时的忐忑和等候回信时的期待呢?在童话的世界里,有一种白色的信燕,可以把思念读给远方的人。让我们跟阿狸和桃子一起,重温那一份心底的感动吧。

这个目前只算是个 DEMO 很简单,考虑会做成插件的形式可能更好。

版权属于:香菇
本文链接:https://blog.siitake.cn/typecho-custom-template-video.html
本站未注明转载的文章均为原创,并采用 CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!