2013-04-30 15 views

cevap

5

farklı URL'ler olmak dilleri sakıncası yoksa, Terebentin sizin için bu işleyebilir: https://github.com/nexcess/magento-turpentine/issues/36

bunları olarak davranmak istiyorsanız Kutudan çıkarlar, devam edelim. Biz de hesaba Magento setleri dil seçiciden dayalı mağaza çerez almak için bu değişiklik yapacağı https://www.varnish-cache.org/trac/wiki/VCLExampleCachingLoggedInUsers

:

Sen vernik senin VCL Başvurusu vardır üretir nasıl değiştirmek gerekir. (Buradaki davranışları izleyerek: http://demo.magentocommerce.com) Maalesef bu, verniklerin çerezleri sunucuya aktarma eğilimi göstermediği veya çerezleri

arasında uçtuğuna bakmazsa bu durumun zor olması maalesef bu durum, Çerezin değerine göre Varnish önbelleğine sahip olacaktır. yanı varsayılan url ve ev sahibi olarak: Bu yöntemle

sub vcl_hash { 
     hash_data(req.url); 
     hash_data(req.http.host); 

     if (req.http.Cookie ~ "(?:^|;\s*)(?:store=(.*?))(?:;|$)"){ 
       hash_data(regsub(req.http.Cookie, "(?:^|;\s*)(?:store=(.*?))(?:;|$)")); 
     } 

     return (hash); 
} 

Ama, sayfayı düzgün önbelleğe vE sunucuya

Diğer bir seçenek geri çerezleri göndermek için VCL kalanını ince ayar gerekebilir çerezi rasgele bir üstbilgiye göre değiştirmek için kullanmaktır, X-Mage-L olarak adlandırın Ang:

sub vcl_fetch { 
    #can do this better with regex 
    if (req.http.Cookie ~ "(?:^|;\s*)(?:store=(.*?))(?:;|$)"){ 
     if (!beresp.http.Vary) { # no Vary at all 
      set beresp.http.Vary = "X-Mage-Lang"; 
     } elseif (beresp.http.Vary !~ "X-Mage-Lang") { # add to existing Vary 
      set beresp.http.Vary = beresp.http.Vary + ", X-Mage-Lang"; 
     } 
    } 
    # comment this out if you don't want the client to know your classification 
    set beresp.http.X-Mage-Lang = regsub(req.http.Cookie, "(?:^|;\s*)(?:store=(.*?))(?:;|$)"); 
} 

Bu model, aynı zamanda boya cihaz tespiti için kullanılır: https://github.com/varnish/varnish-devicedetect/blob/master/INSTALL.rst

Daha sonra, bunun yerine 'mağaza' çerez bu başlığı kullanma Mage_Core_Model_App uzanan gerekir. Magento CE 1.7 onun _checkCookieStore olarak:

protected function _checkCookieStore($type) 
{ 
    if (!$this->getCookie()->get()) { 
     return $this; 
    } 

    $store = $this->getCookie()->get(Mage_Core_Model_Store::COOKIE_NAME); 
    if ($store && isset($this->_stores[$store]) 
     && $this->_stores[$store]->getId() 
     && $this->_stores[$store]->getIsActive()) { 
     if ($type == 'website' 
      && $this->_stores[$store]->getWebsiteId() == $this->_stores[$this->_currentStore]->getWebsiteId()) { 
      $this->_currentStore = $store; 
     } 
     if ($type == 'group' 
      && $this->_stores[$store]->getGroupId() == $this->_stores[$this->_currentStore]->getGroupId()) { 
      $this->_currentStore = $store; 
     } 
     if ($type == 'store') { 
      $this->_currentStore = $store; 
     } 
    } 
    return $this; 
} 

yerine çerezi

+0

Çerez çözümü önbelleğini kullanmak, yalnızca bir kullanıcı için geçerli olacaktır. –

+0

Bu bir oturum çerezi değil, içindeki dilin olduğu cookie'nin değerini tetikliyor – timbroder

+0

Tamam, benim hatam. Güzel bir bakış anway. –

1

Ekleme,

if(beresp.http.Set-Cookie) { 
    return (hit_for_pass); 
} 
+0

bu satırların etkisi ne ait $ _SERVER [ 'X-Mage-Lang'] üzerinde mevcut mağazaya kuracak? En iyi ya da en kısa cevap bu mu? ;) – fbtb