通过PHP在“每个国家/用户首选项”的基础上分离MySQL内容

时间:2009-08-21 15:06:21

标签: php mysql

好的,我会简单地说出来:

我有一个包含内容的数据库,但我需要设置一个条件,如果用户选择了英国而不是美国,反之亦然 - 某些内容将无法显示。这种情况可以通过后端的复选框来应用,如此。

“你好,我是[x]英国人[x]美国

中的一段”节目

我不会查看实际的IP地址或任何类似的内容,因为在用户在索引页面上进行选择后,网站将简单地重定向到root / uk或root / us子文件夹。我将在db或php中包含哪种独特的参数?

谢谢!

3 个答案:

答案 0 :(得分:2)

在数据库display_content中添加一列,将其设为EMUN并将值设置为“britain”,“usa”,“all”,然后在代码中进行调整以检查英国/美国。您可以选择显示全部,英国或美国。

答案 1 :(得分:0)

这是一个有趣的问题。因为虽然它是面向语言的,但它实际上与I18N无关 - 你所说的是基于语言偏好拒绝访问内容,而不是显示本地化内容。

这是一个想法:使用权限模型

  • 创建两个权限,例如“read-enUS-content”和“read-enGB-content”
  • 根据用户的选择,授予他们对会话时间的正确权限(如果您希望通过cookie或用户首选项,可以保留)
  • 然后,应用程序有责任根据其权限允许/拒绝内容。

然后问题就变成了,如何将内容连接到权限?有很多种方法,但一种方法是位掩码列。

00
||
|+--- Read enUS bit
+---- Read enGB bit

实施后可能会是这样的

Articles
+----+---------+-----------------+
| id | content | read_perm_level |
+----+---------+-----------------+
|  1 | foo     |               1 |
|  2 | bar     |               2 |
|  3 | baz     |               3 |
+----+---------+-----------------+

这意味着'foo'只能通过enUS读取,'bar'只能通过enGB读取,'baz'可供所有人阅读。

但你也可以做一个完整的权限表,并以这种方式将内容连接到它。

答案 2 :(得分:0)

最直接的模型是数据库中的关联表。你这样做了:

paragraphs (paragraph_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, paragraph_text TEXT, ...) ENGINE=InnoDB;
paragraph_countries (paragraph_id INT UNSIGNED, country_code CHAR(2)) ENGINE=Innodb;

保存段落设置时,请执行以下步骤:

  1. BEGIN WORK(开始交易)
  2. DELETE FROM paragraph_countries WHERE paragraph_id = ...
  3. (foreach checked country):INSERT INTO paragraph_countries (...)
  4. COMMIT(提交交易)
  5. 要选择与当前国家/地区相关的段落,只需JOIN到具有相应国家/地区代码的关联表格。