Разделение контента MySQL через PHP на основе «предпочтения страны / пользователя» - PullRequest
2 голосов
/ 21 августа 2009

Хорошо, я просто выложу это:

У меня есть одна база данных, в которой есть контент, но мне нужно настроить условие, в котором, если пользователь выбрал Британию вместо США или наоборот - некоторый контент не будет отображаться. Это условие может быть применено с помощью флажка в серверной части следующим образом.

«Привет, я абзац» в британском [x] США [x] США.

Я не рассматриваю фактические IP-адреса или что-либо в этом роде, поскольку сайт будет просто перенаправлять в подпапки root / uk или root / us по выбору пользователя на странице индекса. Какой уникальный параметр я бы включил в БД или php?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 21 августа 2009

Добавьте столбец в базу данных display_content, сделайте его EMUN и установите значения «Британия», «США», «Все», затем внесите изменения в свой код для проверки Британии / США. , Вы можете выбрать отображение Британии или США.

0 голосов
/ 23 августа 2009

Самой простой моделью для этого будет ассоциативная таблица в вашей базе данных. Таким образом, вы получите:

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. (страна, прошедшая проверку): INSERT INTO paragraph_countries (...)
  4. COMMIT (для совершения транзакции)

Чтобы выбрать пункты, относящиеся к текущей стране, просто JOIN к соответствующей таблице с соответствующим кодом страны.

0 голосов
/ 21 августа 2009

Это интересная проблема. Потому что, хотя он ориентирован на язык, на самом деле он не связан с 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» читается всеми.

Но вы также можете создать таблицу с полным разрешением и таким образом подключить к ней контент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...