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人喜欢
评论 4 写评论
头像
  1. 小二
    小二未知
    回复
    我没有搞定,不知道咋搞
    1. airold
      airold作者未知
      回复
      回复 小二原作者已修复了,直接更新原作者1.0.4版本
  2. 小二
    小二未知
    回复
    可以搞一个搜索功能,学习一下
    1. airold
      airold作者未知
      回复
      回复 小二这个得等原作者弄咯