Cuteen主题后台设置中的开关项是由Typecho的Checkbox改造的,但是在最新的typecho版本中出现了Checkbox无法勾选保存的现象,也就导致了无法开启主题相关功能,追查代码发现:
在typecho/var/Widget/Themes/Config.php
中第74行位置有一句:
$form->getInput($key)->value($this->options->{$key});
上面这行代码中,从options
中得到值,但是由于主题的复选框是新加入的,因此options
中并没有对应的值,导致给了一个空的值给复选框。
当主题选项保存的时候,is_array
中的数据是从$this->getInput('xxxx')
拿到value
,但前面程序已经设置为空值,所以在收集提交选项数据时候,以下代码判断不通过,返回null
,最终导致保存勾选无效。
$result[$param] = $request->get($param, is_array($this->getInput($param)->value) ? [] : null);
解决方案有三种:
升级typecho到最新的开发版,在 #1590 中,此问题已修复
回退typecho版本至 1.2.0
,❌不推荐这种做法,小于1.2.1
的版本中包含xss漏洞。
打开typecho/var/Widget/Themes/Config.php
,在第74行左右将其注释,按照下面代码修改:
public function config(): Form
{
$form = new Form($this->security->getIndex('/action/themes-edit?config'), Form::POST_METHOD);
themeConfig($form);
$inputs = $form->getInputs();
if (!empty($inputs)) {
foreach ($inputs as $key => $val) {
//将这行注释:
//$form->getInput($key)->value($this->options->{$key});
//改为这三行:
if (isset($this->options->{$key})) {
$form->getInput($key)->value($this->options->{$key});
}
}
}
$submit = new Submit(null, null, _t('保存设置'));
$submit->input->setAttribute('class', 'btn primary');
$form->addItem($submit);
return $form;
}