我正在开发一个扩展,用Bolt cms中的单选/复选框替换选择字段类型。我的问题是如何使用螺栓内部来存储选定的值。
当我按下保存时,Ajax POST数据:
day[]: Monday
day[]: Friday因此,这与选择字段的情况相同。
我遵循了这个教程:https://docs.bolt.cm/extensions/customfields并使用了
public function getStorageType(){
return 'text';
}这个字段的ajax-save请求的响应是Array,这就是进入数据库的内容。有趣的是,选择字段不会出现在此响应中。我找不到app-code中存储select字段数据的地方。
如何正确地将其存储到数据库中?使用getStorageType 'json-array‘会导致错误的数据库方案,这是bolt无法解决的。
您可以在此处查看代码:https://github.com/osfriese/bolt-boxselect/tree/develope
请帮帮忙。谢谢托比
发布于 2015-11-30 20:12:55
我找到了解决方案-或多或少。
遗憾的是,它被硬编码在src/Content.php中。如果您需要存储数组值的自定义字段类型,则必须将function getValues中的select case更改为:
default:
if (is_array($this->values[$field])) {
$newvalue[$field] = json_encode($this->values[$field]);
}else{
$newvalue[$field] = $this->values[$field];
}
break;在setValues数组中有一个$serializedFieldTypes =(...)您必须手动添加自定义字段类型。
遗憾的是,这对于扩展来说并不实用。但我会用我修改过的Content.php更新我的github,让那些想看一看的人看看。
当我在寻找解决方案的时候,我在github上回顾了大量的螺栓主分支的源代码。对于2.3版本,存储层是完全重建的,并且看起来不需要任何更改。因此,希望在>=2.3版本中,扩展能够开箱即用。
然而,getStorageType()只影响数据库字段类型,而bolt在这里只接受'text‘。
希望我能通过回答我自己的问题来帮助一些人。
谢谢托比
https://stackoverflow.com/questions/33916945
复制相似问题