预料中的又倒下一批 Typecho 主题、模板、插件
前两天,网友「央」提醒 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
版的适配。
P.S. 计划年内重制 Snapic Paper 和 Snapic Plus 主题。
后记
除了附件描述的数据存储方式做了改变外,发现 1.3.0 rc
对主题配置、插件配置的数据存储也做了同样的调整。
另外,当主题配置函数 themeConfig()
表单 Text
Textarea
等,第三个参数(即表单默认值)非 null
时,而在配置主题设置时,清空表单保存设置后,版本 1.3.0 rc
会使用该表单默认值填充表单,但是,数据库存储该表单的数据却是 null
值,只有再次点击保存设置后,数据库才会更新该表单的数据为具体的值,显然,这样的处理方式会带来困扰。换言之,表单中的值,与数据库中的值,在以上首次提交保存设置的情况下,不是同步的,即:看似表单有值,其实数据库无值的情况。
不敢升级了,先用着,重新更新一次也挺麻烦
Snapic Paper大概什么时候能重制完成呢?期待中
已经完成大部分,月底可以上线演示,由于要提交著作权登记,所以需要延后两个月发布,估计在国庆前后吧。
产业太大了也有烦恼,哈哈哈~
是呢,维护起来太麻烦。
那就不升级吧!只要不是什么重大更新
不好约束用户不升级。
这是重构代码了吗
应该出于安全性考虑吧。