typecho主题reborn-1.0.2设置外观页面警告提示的消除方法(主题博主已修复该问题)

新入typecho系统的坑,看上了Shawn的reborn主题,版本是1.0.2,在部署的过程中遇到了一个问题。
在设置界面下会出现警告提示

Warning: array_key_exists() expects parameter 2 to be array, null given in /www/wwwroot/bms/usr/themes/reborn/functions/config.php on line 15

查了下是主题文件夹下../functions/config.php中添加字段出现的问题。

问题分析:以这一句为例

 if (!array_key_exists('likes', $db->fetchRow($db->select()->from('table.comments')->page(1, 1)))) {
 // 上面这一句的意思是:从comment数据表中查出第一页的第一行数据,返回一个数组,其中数组名就是列名,array_key_exists函数判断likes字段是否在这个数组名中,返回一个bool值。
 // 整个if语句的意思是这个表中如果没有like字段,则添加like字段。
 // 问题产生原因是,这个查询是通过查询表中第一行数据实现的,如果新部署的系统,表中没有数据则会返回null空值,就会触发提醒。
            $db->query('ALTER TABLE `' . $prefix . 'comments` ADD `likes` INT(10) NOT NULL DEFAULT 0;');

修正方法如下:

 /* 
        **以下是reborn主题作者的代码,当contents和comments数据表是空的时候,在主题设置外观界面会出现警告提示

        **     "Warning: array_key_exists() expects parameter 2 to be array, null given in /www/wwwroot/bms/usr/themes/reborn/functions/config.php on line 15"
        
        **所以修改了数据表列名查询方式

        if (!array_key_exists('postType', $db->fetchRow($db->select()->from('table.contents')->page(1, 1)))) {
            $db->query('ALTER TABLE `' . $prefix . 'contents` ADD `postType` varchar(16) NOT NULL DEFAULT "post";');
        }
        if (!array_key_exists('likes', $db->fetchRow($db->select()->from('table.contents')->page(1, 1)))) {
            $db->query('ALTER TABLE `' . $prefix . 'contents` ADD `likes` INT(10) NOT NULL DEFAULT 0;');
        }
        if (!array_key_exists('likes', $db->fetchRow($db->select()->from('table.comments')->page(1, 1)))) {
            $db->query('ALTER TABLE `' . $prefix . 'comments` ADD `likes` INT(10) NOT NULL DEFAULT 0;');
        }
        if (!array_key_exists('views', $db->fetchRow($db->select()->from('table.contents')->page(1, 1)))) {
            $db->query('ALTER TABLE `' . $prefix . 'contents` ADD `views` INT(10) NOT NULL DEFAULT 0;');
        }
        if (!array_key_exists('region', $db->fetchRow($db->select()->from('table.comments')->page(1, 1)))) {
        if (!in_array('region', $db->fetchAll('SHOW COLUMNS FROM `' . $prefix . 'comments`'))) {

            $db->query('ALTER TABLE `' . $prefix . 'comments` ADD `region` varchar(50) NULL');
        }  
         以下是修正后的代码,目前没发现问题
         */
         if (!in_array('postType', $db->fetchAll('SHOW COLUMNS FROM `' . $prefix . 'contents`'))) {
            $db->query('ALTER TABLE `' . $prefix . 'contents` ADD `postType` varchar(16) NOT NULL DEFAULT "post";');
        }
        if (!in_array('likes', $db->fetchAll('SHOW COLUMNS FROM `' . $prefix . 'contents`'))) {
            $db->query('ALTER TABLE `' . $prefix . 'contents` ADD `likes` INT(10) NOT NULL DEFAULT 0;');
        }
        if (!in_array('likes', $db->fetchAll('SHOW COLUMNS FROM `' . $prefix . 'comments`'))) {
            $db->query('ALTER TABLE `' . $prefix . 'comments` ADD `likes` INT(10) NOT NULL DEFAULT 0;');
        }
        if (!in_array('views', $db->fetchAll('SHOW COLUMNS FROM `' . $prefix . 'contents`'))) {
            $db->query('ALTER TABLE `' . $prefix . 'contents` ADD `views` INT(10) NOT NULL DEFAULT 0;');
        }
        if (!in_array('region', $db->fetchAll('SHOW COLUMNS FROM `' . $prefix . 'comments`'))) {

            $db->query('ALTER TABLE `' . $prefix . 'comments` ADD `region` varchar(50) NULL');
        }
拾柒
“ 做自己 ”
 喜欢文章
2人喜欢
评论 5 写评论
头像
  1. 小二
    小二未知
    回复
    我没有搞定,不知道咋搞
    1. airold
      airold作者未知
      回复
      回复 小二原作者已修复了,直接更新原作者1.0.4版本
  2. 小二
    小二未知
    回复
    可以搞一个搜索功能,学习一下
    1. airold
      airold作者未知
      回复
      回复 小二这个得等原作者弄咯
  3. JosephLep
    JosephLep未知
    回复
    阅读你的博客, 我看出, 旅行让人焕然一新。无限感谢 旅行气氛。 Gullfoss 您 认真地 教授。增加文章!