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 多语言商店与清漆 的相关文章

  • Magento:每个订单限制类别中的 3 个产品

    我正在尝试在 Magento 中设置一个示例产品类别 允许人们每次购买时最多选择 3 个免费样品 但如何限制每个订单仅从该类别中选择 3 个样品 EDIT 这是 app code local MagePal LimitCartProduct
  • Magento 1.8 - 高级搜索不起作用

    我在最新版本的 magento 中发现了一个奇怪的错误 高级搜索工具无法正常工作 我做了什么 安装 magento 的新副本 在管理页面添加了一个名为 测试 1 的产品 重新索引全部 清除所有缓存 At the frontend page
  • 在 Magento 控制器中使用 move_uploaded_file

    我是 magento 的新手 我正在 magento 管理中创建用于文件上传的自定义模块 现在我已将上传文件发布到我的模块控制器中 这里我用过move uploaded file将文件上传到与控制器文件夹相同的目录中 下面的代码我用于控制器
  • Magento 将所见即所得添加到自定义前端表单

    我正在编写一个模块 并且正在搜索如何将内置所见即所得编辑器添加到前端的文本区域 有可能的 有谁知道 如何实施 因此 我将其保留为最终解决方案 以防万一有人需要它 1 将此代码放入您希望编辑器直接显示的 phtml文件中 2 在代码第6行可以
  • Magento 中的子域 htaccess 问题

    public html www domain com public html subdomain subdomain domain com public html htaccess public html subdomain htacces
  • Magento补丁安装失败

    从以下位置下载并运行 Magento PHP 5 4 支持补丁 Magento CE v1 7 0 0 1 7 0 2 时http www magentocommerce com download http www magentocomme
  • Magento --“SQLSTATE[23000]:违反完整性约束..”客户更新

    迁移服务器后 每次尝试更新客户信息时都会出现错误 我正在使用一个客户激活插件 http www magentocommerce com magento connect vinai extension 489 customer activat
  • Magento EE FPC 中的打孔法师_目录_块_产品_价格

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

    我需要开发一个包含电子商务部分的新网站 我来这里是想从你那里得到一些关于我应该走哪条路的提示 该网站将有一个静态部分 其中包括一些静态页面和用于销售产品的电子商务部分 我是 Django 和 PHP 开发人员 但这是我第一次需要开发电子商务
  • Magento:如何在 CMS 页面中包含 php 调用

    按照此页面的说明进行操作 http www magento cc how to use php on a cms page html http www magento cc how to use php on a cms page html
  • Magento 重新索引问题

    I am facing one issue in Magento I am having one Magento store with multi website functionality which containing approx
  • 从 Magento 后端开始

    几天以来 我一直在研究 Magento 后端的行为 为了理解 我创建了一个新的网格来查看 bbdd 的表格 完成此网格后 我可以看到在尝试在 CMS 页面中添加小部件时出现 404 错误 调试我可以看到 如果我从自定义模块中注释掉该错误 错
  • 不使用 Magento Connect 安装 magento 插件

    我有一个我的客户购买的插件 它是一个 zip 文件 如何在不使用 Magento 连接的情况下安装插件 通常你可以直接解压 但你应该检查目录结构是Magento风格 它至少应该有app code app etc modules目录
  • 如何使用 Magento 测试 cron?

    首先我需要了解 Magento cron 是如何工作的 我知道 cron 在 Linux 上如何工作 使用crontab e 我知道我需要设置 Magento 的 cron php 定期运行 但是当我在 magento 配置文件中定义 cr
  • 重新排序 Magento JavaScript 包含 (addJs)

    我会保持简单 在我的产品页面上 我需要删除prototype js 文件并将其替换为最新版本的prototype 到目前为止 我已经使用 local xml 成功替换了它
  • 使用magento中SOAP API的salesOrderInfo获取简单的产品sku和数量

    我在以下代码中添加了 app code core Mage Sales Model Order Api php File public function info orderIncrementId order Mage getModel s
  • 如何在 Varnish 中禁用“传输编码:分块”编码?

    Using 清漆4 https www varnish cache org content varnish cache 400 我有一组后端以有效的方式响应Content Length标题和没有Transfer Encoding heade
  • 无法在自定义脚本中检索折扣产品价格

    我有一个自定义脚本 可以以 csv 格式输出特定产品的列表 商店的前端运行良好 但是当在我的脚本中检索产品的价格时 实际的 FinalPrice 没有考虑我的目录价格规则 这有点混乱 因为getFinalPrice 方法在模板文件等中完美运
  • Magento 使用 MAGMI 批量导入图像 - 排除图像

    谢谢阅读 我正在使用 magmi 导入超过 30 000 个带有图像的产品 问题在于图像已导入 但全部被排除 是否有任何我可以使用并获取所有图像的 SQL 查询 我使用了这个查询 但只有一行受到影响 update catalog produ
  • Magento 信用卡号与信用卡类型不匹配异常

    我正在使用 magento api 并且在创建订单时遇到了一些问题 我已经能够完成创建订单的所有工作 使其能够正常工作 我看到的问题是 当我调用创建订单的方法时 我总是遇到异常 Credit card number mismatch wit

随机推荐

  • 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