预料中的又会倒下一批 Typecho 1.3 主题模板插件
前两天,网友「央」提醒 Typecho 发布了 1.3.0 rc
版,我下意识地深吸口气。果然,昨天对在售的主题/模板/插件,传入新版 Typecho 中运行,各种报错。
一种情况是,自己在制作时,有些功能使用了偏方获取数据,出现兼容问题,如:
foreach ($result as $value) { // 遍历文章数据 $result
$value = Typecho_Widget::widget('Widget_Abstract_Contents')->filter($value); // 坊间偏方获取数据
$permalink = $value['permalink']; // 文章链接
}
// 在查询文章表时,坊间流传以上方式获取文章链接,但在 Typecho 1.3.0 rc 版,报错且失效
// 解决方法,使用内置方法 widgetById 获取文章对象,通过匹配文章 cid 获取对应文章链接
foreach ($result as $value) { // 遍历文章数据 $result
$lopwon = Helper::widgetById('Contents', $value['cid']); // 内置方法 widgetById 获取文章对象,详见 var/Utils/Helper.php 文件
$permalink = $lopwon->permalink; // 文章链接
}
另一种情况,实属无奈,发现 1.3.0 rc
对附件 attachment
描述 text
的数据存储,由原来的 PHP
序列化字符串,调整为 JSON
字符串,这就让之前通过反序列化获取数据的方式,全都失效了。为了让两种数据类型都能兼顾,在新旧版本的 Typecho 下运行,只好判断获取:
foreach ($result as $value) { // 遍历文章数据 $result
$textData = $value['text']; // 该值之前为 PHP 序列化字符串,现在为 JSON 字符串
$valueText = null;
// 先尝试解析 JSON (Typecho 1.3.0 rc)
$jsonData = json_decode($textData, true);
if (json_last_error() === JSON_ERROR_NONE) {
$valueText = $jsonData;
}
// 如果不是 JSON 再尝试反序列化 (Typecho 1.2.1)
else {
$unserializedData = @unserialize($textData);
if ($unserializedData !== false) {
$valueText = $unserializedData;
}
}
// 如果解析失败,则跳过
if ($valueText === null) {
continue;
}
// 其他
}
这两天,已对 Snapic Nojs / Snapic CMS / Snapic Just 640px 主题,及 Snapic Page / Lopwon Link Ultra 单页模板,及 Lopwon Hub 插件,做了适配 Typecho 1.3.0 rc
版,计划年内重制 Snapic Paper 和 Snapic Plus 主题。