存储全局站点首选项[PHP/MySQL]

can*_*lin 4 php mysql database preferences entity-attribute-value

有人可以推荐存储一般网站首选项的最佳做法吗?例如,如果脚本未设置一个默认页面标题,或者要在内容框中显示的特色项目数,或者系统在上载图片时应该制作的缩略图大小列表.集中这些值具有明显的好处,即允许人们轻松更改可能在许多页面上使用的首选项.

我的默认方法是将这些首选项作为属性/值对放在*gulp*EAV表中.

这个表不可能变得很大,所以我不太担心性能.我的架构的其余部分是关系型的.它确实会让一些该死的丑陋查询:

$sql = "SELECT name, value FROM preferences"
.    " WHERE name = 'picture_sizes'"
.    " OR name = 'num_picture_fields'"
.    " OR name = 'server_path_to_http'"
.    " OR name = 'picture_directory'";
$query = mysql_query($sql);
if(!$query) {
    echo "Oops! ".mysql_error();
}
while($results = mysql_fetch_assoc($query)) {
    $pref[$results['name']] = $results['value'];
}
Run Code Online (Sandbox Code Playgroud)

有谁能建议更好的方法?

Don*_*nia 8

在我的应用程序中,我使用此结构:

CREATE TABLE `general_settings` (
  `setting_key` varchar(255) NOT NULL,
  `setting_group` varchar(255) NOT NULL DEFAULT 'general',
  `setting_label` varchar(255) DEFAULT NULL,
  `setting_type` enum('text','integer','float','textarea','select','radio','checkbox') NOT NULL DEFAULT 'text',
  `setting_value` text NOT NULL,
  `setting_options` varchar(255) DEFAULT NULL,
  `setting_weight` int(11) DEFAULT '0',
  PRIMARY KEY (`setting_key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

示例数据:

mysql> select * from general_settings;
+-----------------------------+---------------+------------------------------+--------------+-------------------------------+---------------------------------------+----------------+
| setting_key                 | setting_group | setting_label                | setting_type | setting_value                 | setting_options                       | setting_weight |
+-----------------------------+---------------+------------------------------+--------------+-------------------------------+---------------------------------------+----------------+
| website_name                | website       | Website Name                 | text         | s:6:"DeenTV";                 | NULL                                  |              1 | 
Run Code Online (Sandbox Code Playgroud)

我在setting_value列中存储了序列化值.我从wordpress方式获得了这个技巧来保存数据库中的设置.

setting_options列被用于select,radiocheckbox setting_type.它将包含序列化的数组值.在admin中,此值将显示为选项,因此管理员可以选择其中一个.

因为我使用CodeIgniter,所以我有一个模型可以从特定值中获取单个值setting_key,因此它非常易于使用.