Bir "per-country/user tercihi" üzerine PHP ile Ayrılması MySQL içerik

3 Cevap php

Tamam, bu sadece dışarı yatacağız:

Ben içerik olan bir veritabanı var ama kullanıcı yerine ABD ya da tam tersi İngiltere'yi seçtiyse bir conditon kurmak gerekir - bazı içerik göstermez. Bu durum şöyle backend bir onay kutusu ile uygulanabilir.

In gösterisi "Merhaba, ben bir paragraf değilim" [x] Britian [x] ABD

Ben gerçek IP Adresleri veya site olarak bu tür bir şey içine aramıyorum sadece root / uk yönlendirmek veya kök / bizi alt klasörler ana sayfada kullanıcının seçimine bağlı olacaktır. Ben db veya php benzersiz bir parametrenin ne tür dahil olurdu?

Thank You!

3 Cevap

Veritabanı display_content bir sütun ekleyin, bir EMUN yapmak ve 'usa', 'İngiltere'de' değerlerini ayarlayın, 'bütün' sonra İngiltere / ABD için kontrol etmek için kod ayarlamaları yapmak. tüm İngiltere'yi veya ABD görüntülemek için seçebilirsiniz.

İlginç bir sorun. Çünkü dil odaklı olsa da, aslında I18N ilgili değil - yerelleştirilmiş içerik görüntüleme, yaklaşık bir dil tercihine göre içeriğe erişimi inkar bahsediyoruz.

İşte bir fikir: Bir izin modelini kullanmak

  • Örneğin "-enUS-içeriğini okumak" ve "okuma-enGB-içerik" olarak iki izinleri oluşturmak
  • Kullanıcının seçimine dayanarak, (çerez veya kullanıcı prefs yoluyla isterseniz devam edebilirsiniz olan) kendi oturum uzunluğu için onlara doğru izni
  • Daha sonra onların izinlerine dayanarak içeriğini inkar / izin uygulamanın sorumluluğu olacaktır.

Ardından soru nasıl izinleri içerik bağlanmak mı, olur? Orada yollar çok sayıda olan, ancak bir yaklaşım bir bit maskesi sütundur.

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

Uygulanan Hangi bu gibi görünebilir

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

Bu 'foo' enUS sadece okunabilir olduğu anlamına gelir, 'bar' enGB sadece okunabilir, ve 'baz' herkes tarafından okunabilir.

Ama aynı zamanda tam bir izninin tablo yapmak ve bu şekilde ona içeriği bağlayabilirsiniz.

Bunun için en basit modeli, veritabanı ilişkisel bir tablo olurdu. Böylece olurdu:

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;

Paragraf ayarlarını kaydederken, aşağıdaki adımları gerçekleştirin:

  1. BEGIN WORK (bir hareketi başlatmak için)
  2. DELETE FROM paragraph_countries WHERE paragraph_id = ...
  3. (Foreach işaretli ülke): INSERT INTO paragraph_countries (...)
  4. COMMIT (işlem işlemek için)

Uygun ülke kodu ile ilişkilendirilmiş masaya geçerli ülke ile ilgili paragrafları, sadece JOIN seçeneğini seçin.