C-2023-A3-Tsuchinshan-ATLAS

前两天,网友「央」提醒 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 值,只有再次点击保存设置后,数据库才会更新该表单的数据为具体的值,显然,这样的处理方式会带来困扰。换言之,表单中的值,与数据库中的值,在以上首次提交保存设置的情况下,不是同步的,即:看似表单有值,其实数据库无值的情况。

Lopwon