网站后台设置选项储存在数据库的方案?

2017-12-21 22:33:22 +08:00
 RYAN0UP

我在做一个学习项目的时候,碰到了一个困难,就是后台设置选项如何存储在数据库中,毕竟设置项那么多。

比如网站标题,seo 关键字,seo 描述,什么的....

看到很多网站的 option 表是以 key,value 的形式存储的。

但是试了很久都不知道怎么把所有设置选项列在表单中,而且完成批量修改。

对了,我用的框架是 SpringMVC,谢谢大家了。

1727 次点击
所在节点    问与答
4 条回复
whatsmyip
2017-12-21 23:19:12 +08:00
你自己已经回答了。key, value 对

因为数据量不多,加上每个页面基本都需要,所以每次操作都是同时取出
select key, value from option;

修改的话只能是一个一个修改了。

之前写过的代码

```
class OptionManager
{
/*
* do add option
*/
public static function addOption($option)
{
$key = $option->get('key');
$value = $option->get('value');
$remark = $option->get('remark');
$key_values = array( 'key' => '?', 'value' => '?', 'remark' => '?' );
$builder = new SQLBuilder();
$builder->insert('cr_option', $key_values);
$sql = $builder->build();
$params = array( $key, $value, $remark);
$count = (new MysqlPDO())->execute($sql, $params);
return $count==1;
}
/*
*/
public static function getOptions($rule)
{
$selected_rows = array('key', 'value', 'remark');
$where_arr = array();
$builder = new SQLBuilder();
$builder->select('cr_option', $selected_rows);
$builder->where($where_arr);
$sql = $builder->build();
$params = array();
$options = (new MysqlPDO())->executeQuery($sql, $params);
if($rule->get('result_form')=='assoc'){
$options = self::list2kv($options);
}
return $options;
}
/*
* convert list to key-value
*/
private static function list2kv($options)
{
$options_kv = array();
foreach($options as $option){
$options_kv[$option['key']] = $option['value'];
}
return $options_kv;
}
/*
*/
public static function removeOption($option)
{
$key = $option->get('key');
$where_arr = array('key' => '?');
$builder = new SQLBuilder();
$builder->delete('cr_option');
$builder->where($where_arr);
$sql = $builder->build();
$params = array( $key );
$count = (new MysqlPDO())->execute($sql, $params);
return $count==1;
}
/*
*/
public function updateOption($option)
{
$key = $option->get('key');
$value = $option->get('value');
$remark = $option->get('remark');
$new_key_values = array( 'value' => '?', 'remark' => '?' );
$where_arr = array( 'key'=>'?' );
$builder = new SQLBuilder();
$builder->update('cr_option', $new_key_values);
$builder->where($where_arr);
$sql = $builder->build();
$params = array($value, $remark, $key);
$cnt = (new MysqlPDO())->execute($sql, $params);
return $cnt==1;
}
}
```
RYAN0UP
2017-12-21 23:25:50 +08:00
@whatsmyip 先谢谢你的回答,不过这 php 我看着有点蒙啊,我暂时已经把所有设置选项加载到表单里了,用的是 Map<key,value>,下一步我再想想怎么批量修改,谢谢啦!
ihuotui
2017-12-22 00:41:57 +08:00
俗称 eav 设计
lhx2008
2017-12-22 07:12:47 +08:00
用提交 list 的方法就行,后台再从数据库读出来,再把新的 value 塞进去,更新
或者用 ajax,改一个提交一个

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/416686

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX