Разделение содержимого MySQL через PHP по принципу «для каждой страны / пользователя»

Хорошо, я просто объясню это:

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

«Привет, я – параграф» в [x] британском [x] США

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

Спасибо!

Solutions Collecting From Web of "Разделение содержимого MySQL через PHP по принципу «для каждой страны / пользователя»"

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

Это интересная проблема. Потому что хотя он ориентирован на язык, на самом деле это не связано с I18N – вы говорите о запрете доступа к контенту на основе предпочтения языка, а не для отображения локализованного контента.

Вот одна идея: используйте модель разрешения

  • Создайте два разрешения, такие как «read-enUS-content» и «read-enGB-content»,
  • Основываясь на выборе пользователя, дайте им правильное разрешение на длительность их сеанса (который вы можете сохранить, если хотите, с помощью куки или пользовательских префов)
  • Тогда приложение должно будет разрешить / запретить контент на основе их разрешений.

Тогда возникает вопрос, как вы подключаете контент к разрешениям? Существует множество способов, но один подход – это битмакс-столбец.

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» доступен для всех.

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

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

 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 (для совершения транзакции)

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