Magento 多语言商店与清漆

2024-02-26

多语言 Magento 商店如何与 Varnish 配合使用。 varnish 中是否有可用的配置,以便我们可以基于 cookie 创建缓存?


如果您不介意语言位于不同的 url,Turpentine 可以为您处理此问题:https://github.com/nexcess/magento-turpentine/issues/36 https://github.com/nexcess/magento-turpentine/issues/36

如果您希望它们像开箱即用的那样表现,那就继续吧。

您必须修改 varnish 在 VCL 中生成 has 的方式 参考:https://www.varnish-cache.org/trac/wiki/VCLExampleCachingLoggedInUsers https://www.varnish-cache.org/trac/wiki/VCLExampleCachingLoggedInUsers

我们将对其进行修改,以考虑 Magento 基于语言选择器设置的存储 cookie。 (遵循此处的行为:http://demo.magentocommerce.com http://demo.magentocommerce.com)不幸的是,这会变得很棘手,因为 Varnish 往往要么不将 cookie 传回服务器,要么在看到 cookie 到处乱飞时不缓存内容

这将具有基于 cookie 值以及默认 url 和主机的 Varnish 缓存:

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);
}

但是,使用这种方法,您可能需要调整 VCL 的其余部分以正确缓存页面并将 cookie 发送回服务器

另一种选择是使用 cookie 来改变任意标头上的缓存,我们将其称为 X-Mage-Lang:

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=(.*?))(?:;|$)");
}

此模式也用于使用清漆进行设备检测:https://github.com/varnish/varnish-devicedetect/blob/master/INSTALL.rst https://github.com/varnish/varnish-devicedetect/blob/master/INSTALL.rst

然后,您必须扩展 Mage_Core_Model_App 才能使用此标头而不是“store”cookie。在 Magento CE 1.7 中,其 _checkCookieStore :

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;
}

您可以在 $_SERVER['X-Mage-Lang'] 而不是 cookie 上设置当前存储

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Magento 多语言商店与清漆 的相关文章

  • 我如何覆盖Mage_Core_Controller_Request_Http

    我对 Mage Core Controller Request Http 做了一些更改 但在使用 magento 分发的文件中 我知道这不是最好的方法 但我无法弄清楚如何覆盖控制器目录中的文件 我可以找到如何覆盖控制器目录中的文件 谁能告诉
  • Magento 购物车未更新阿拉伯语商店视图中的数量

    我在 Magento 1 8 1 安装中遇到以下问题 我有两种商店视图 英语 默认 和阿拉伯语 在英文商店视图中 如果我将产品添加到购物车 我可以通过在数量框中输入新数量并单击更新购物车来修改数量 这会更改数量和总数 但是 当我切换到阿拉伯
  • 如何配置 Magento Enterprise 使用 Solr 作为主要搜索引擎?

    我尝试寻找文档 但它非常稀疏 我编写了以下指南 希望它可以帮助人们节省 2 3 个小时的安装 设置和配置时间 与 MySQL 全文搜索标准设置相比 使用 Solr 带来的性能提升非常惊人 在您的 Magento 安装中让它工作绝对值得花时间
  • magento 付款流程..一般如何运作

    有一个问题 我希望这是问的正确地方 不太明白magento 中的付款方式 客户去结账 假设想要以客人身份付款 因此提供地址等 最后找到付款方式 然后我希望客户通过信用卡付款 已经为我选择的网关 银行 安装了模块 那时 我希望用户被重定向到第
  • 无法登录 Magento 管理员

    我在登录我们的一个临时站点上的 Magento 管理面板时遇到问题 它在我们的 webdev 服务器上 100 工作 不久前在临时服务器上也工作得很好 我做了一些研究 大多数人认为这与在本地主机上运行 Magento 以及浏览器不为域名中没
  • 在 Magento 中显示产品所属的所有类别

    我正在构思一个新的 Magento 网站 该网站将包含多个类别的产品 我想知道是否可以在产品详细信息页面上显示产品所属的所有类别 我知道有可能得到the类别 但是否可以显示列表all产品属于哪些类别 例如 衬衫可以包含在Shirts类别 以
  • 如何在magento中将订单状态设置为“完成”

    如何手动将订单状态设置为 完成 我正在使用以下代码 但它给出错误消息 订单状态 完成 不得手动设置 order Mage getModel sales order gt loadByIncrementId order id order gt
  • 如何在注册和结账过程中更改magento中的“送货信息”标签

    我想将 帐单信息 标签文本更改为 运输和帐单信息 我尝试使用 Mage Checkout csv 但这没有帮助 请提出解决方案 谢谢你 Use the 翻译文件translate csv在你的主题中 出于演示目的 我将使用默认包 app d
  • 如何自定义 magento onepage 结账表单

    我正在使用 Magento 1 5 1 0 我想在单页结账表单中自定义地址块 我想删除 传真 输入字段并将 区域 下拉列表放在国家 地区 下拉列表 下方 这个形式是在哪里定义的 亲切的问候 伯蒂 导航到您的主题文件夹 默认文件位于以下位置
  • Magento Rest API - oAuth 错误

    我是第一次使用 Magento Rest API 我浏览了 Rest API 的教程http www magentocommerce com api rest并尝试了一个通过 API 获取产品的示例 callbackUrl http loc
  • 如何获取magento中登录客户的订单列表

    我正在努力获取客户订购的订单号 名称 列表 我尝试过使用 Mage getModel sales order gt load order id 但对我不起作用 实际上 我正在开发帮助台模块并尝试将订单分配给票证 好的朋友 感谢您的提示 我通
  • IE 抛出 JavaScript TypeError 但在 chrome 上不抛出

    描述在我们的 Magento 购物车上 当用户单击添加到购物篮在任何 Internet Explorer 浏览器的 产品详细信息 页面上单击按钮 浏览器中都会弹出一个包含以下错误消息的窗口 异常 类型错误 无法获取未定义或空引用的属性 ta
  • 在“探测”标记服务器不健康之前,在 Varnish 4 中错误获取后交付过时的内容

    我在用着stale if error在服务器被标记为不健康的情况下提供过时的内容grace and keep中的对象选项vcl hit 问题是 进入vcl子程序后是否可以传递一个缓存对象vcl backend error 新请求错误 实际上
  • 为什么在网关取消的订单状态没有转换为“ payment_pending ”?

    我正在使用 Magento 社区 ver1 6 1 0 我在 Magento wiki 上找到了这个状态图http www magentocommerce com wiki 2 magento concepts and architectu
  • Magento 如何通过静态块/页面中的 id 链接到类别

    我正在寻找使用以下方法从静态块链接到一个类别category id 有什么想法吗 我已经进行了通常的搜索 但没有结果 目前我可以做类似的事情 a href 但这并不稳健 使用类别链接小部件内联链接代码 widget type catalog
  • Magento:设置刚刚创建的网站的配置值?

    我正在以编程方式创建网站 用户等 问题是 创建网站时 我无法立即设置配置值 Code
  • 无法从配置文件设置基本 URL

    我尝试使用这里描述的方法Magento 将基本网址存储在配置文件中 https stackoverflow com questions 17618236 magento storing base url in a config file从
  • 访问 Magento 购物车和/或结帐中的运费

    请注意 这个问题是关于运费 而不是价格 有一个重要的区别 即运输方式为店主支付的费用是多少 而不是客户支付的费用 The shipping tablerate数据库表包括一个cost字段 该字段填充在Mage Shipping Model
  • Magento EE FPC 中的打孔法师_目录_块_产品_价格

    我花了很长时间找出代码 参数来为Mage Catalog Block Product Price块在magento中打孔全页缓存 我可以在第一次加载页面时显示价格 但是当缓存 id 是唯一的时 它不会正确呈现价格 当它应该被缓存时 它会正确
  • magento成功页面变量

    我正在尝试捕获一些 magento 成功页面变量以传递给我们的广告公司 到目前为止 我已经得到了这个 但变量没有输出任何内容 数据需要采用以下格式 price1 price2 price3 qty1 qty2 qty3 sku1 sku2

随机推荐

  • iOS 6 无法自动旋转

    在我维护的应用程序中 在纵向和纵向颠倒模式下应该发生旋转 所有旋转均在摘要面板中启用 BOOL shouldAutorotateToInterfaceOrientation UIInterfaceOrientation interfaceO
  • R中多个列表的元素均值

    我有十个巨大的列表 每个列表有七个元素 但元素很大 我需要计算这些列表的元素平均值 那么如果有A1 A2 A3 A10列表 我需要计算 mean1 mean A1 1 A2 1 A3 1 A10 1 mean7 mean A1 7 A2 7
  • 通过 ContentValues 将时间戳插入数据库

    在Android中 是否可以使用以下命令将时间戳插入数据库中ContentValues 当我尝试使用这样的方法添加它时 ContentValues args new ContentValues args put MY DATE my dat
  • 使用 C++ 用户定义的文字来初始化数组

    我有一堆测试向量 以十六进制字符串的形式呈现 MSG 6BC1BEE22E409F96E93D7E117393172A MAC 070A16B46B4D4144F79BDD9DD04A287C MSG 6BC1BEE22E409F96E93
  • 从同一个 onclick 调用两个函数[重复]

    这个问题在这里已经有答案了 HTML 和 JavaScript 如何从一个 onclick 事件调用 2 个函数 这是我的代码
  • .CSHTML 中的 Visual Studio 2010 代码格式 - 缩进不正确

    需要解释的问题非常简单 在 Visual Studio 2010 SP1 中 我在使用 Razor 时发现大括号出现奇怪的缩进问题 它看起来是这样的 div div div div if true b Hi b div div div di
  • Authorize.net 支付集成 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在寻找使用 PHP 与网站进行 Authorize net 支付集成 我的问题是 1 我可以在哪里找到使用 PHP 执行此操作的教程 开发指南和
  • 在 Clojure 中查找与谓词匹配的元素的索引?

    使用 Clojure 如何找到该向量中第一个具有正值的索引 1 0 3 7 9 我知道你可以相当优雅地得到第一个结果first and filter first filter pos 1 0 99 100 101 这段代码返回值99 我想要
  • 如何在 Haskell 中指定多播套接字的本地绑定接口?

    我已经尝试过 Network Multicast 包并且它确实有效 但是 我找不到为多播套接字指定本地绑定接口 bond0 或 bond1 等 的方法 我知道在C中我需要使用ioctl将键转换为struct sockaddr in 然后将该
  • 当你初始化一个没有构造函数的类时,会调用什么? [复制]

    这个问题在这里已经有答案了 因此 当一个类具有私有构造函数时 您无法初始化它 但当它没有构造函数时 您可以初始化它 那么 当你初始化一个没有构造函数的类时 会调用什么呢 例如 这里叫什么 new b public class a publi
  • 在c++中处理对象

    有人告诉我 句柄是一种 空 指针 但 空指针 到底是什么意思以及它的目的是什么 另外 什么是 somehandle GetStdHandle STD INPUT HANDLE do 一般意义上的句柄是唯一标识对象的不透明值 在这种情况下 不
  • 从代码隐藏更改 IFrames InnerHtml

    我正在尝试在运行时从后面的代码设置 Iframe 的 HTML 在我的 aspx 页面中 我有
  • 从 React Native 中删除 Expo

    我在使用这个工具时遇到了很多麻烦 我认真地调试了expo 而不是应用程序本身 如何从 CRNA 中完全删除 expo 我想使用 CRNA 及其调试工具而不需要博览会 您可以通过弹出正在运行的应用程序来完成此操作npm 运行弹出 然后 如果您
  • 为什么我不能执行 操作?

    如果 html 文件在本地 在我的 C 驱动器上 则它可以工作 但如果 html 文件在服务器上并且图像文件在本地 则不行 这是为什么 有什么可能的解决方法吗 如果客户端可以请求本地文件系统文件 然后使用 JavaScript 找出其中的内
  • 如何更改Eclipse默认工作区?

    在哪里可以更改 Eclipse 中的默认工作区 如果您的意思是 更改工作空间 请转到File gt Switch Workspace
  • 为什么 bean 验证最小/最大约束不支持 double 类型?

    有人可以向我解释一下为什么 JPA 支持doubletype 作为字段类型 但 bean 验证约束javax validation constraints i e Min http java sun com javaee 6 docs ap
  • Flow 不允许我将 `Array` 传递给 `Array`(子类型数组到超类型数组)

    我有一个类型的值Array a 子类型数组 Flow 不允许我将其传递到期望的地方Array a 一组超类型 尽管它显然有效 例如 我无法用 type 赋值Array lt left right gt 到一个类型为的变量Array a a
  • Material-ui 自动完成:为 startAdornment 添加值

    我有自动完成功能和多项选择权限 https codesandbox io s bold jackson dkjmb file src App js 在示例中 我有 3 个城市选项 当选择某些内容时 如何在 TextField 中手动添加自动
  • 非全屏时如何获取全屏(最小用户界面)视图的窗口大小?

    非全屏时如何获取全屏 最小用户界面 视图的尺寸 这就是screen属性报告 window screen height 568 Thats the screen height window screen availHeight 548 Unk
  • Magento 多语言商店与清漆

    多语言 Magento 商店如何与 Varnish 配合使用 varnish 中是否有可用的配置 以便我们可以基于 cookie 创建缓存 如果您不介意语言位于不同的 url Turpentine 可以为您处理此问题 https githu