当前位置: 首页 > 知识库问答 >
问题:

根据drupal 8中的语言,是否可能有多个缓存项?

潘宸
2023-03-14

我有一个复杂的变量{{course_type.title[语言]|nl2br}}在我的自定义块模板中。语言是当前网站的语言,但内容仅以当时的语言交付,当缓存建造。

我的渲染数组中确实有语言,它适用于twig模板中的{%trans%}命令:

 return array(
    '#theme' => 'block__vt_course_offer',
    '#data' => $courseData,
    '#cache' => [
        'contexts' => ['languages'],
        'tags' => $cacheTags,
    ]
);

有没有办法让Drupal根据页面的当前语言处理多个缓存条目?

太多了<安德烈亚斯

共有1个答案

鲁龙野
2023-03-14

所以我们找到了一个解决方案-我们将不同的部分提取到子渲染数组中,并仅为它们解除缓存。重要的是,对数据[$language]的访问发生在主模块中,而不是模板中。

      foreach ($courses as &$courseType) {
            $courseType['d_url'] = $dcm->getCourseUrl($courseType['id']);

            $courseType['output'] =  array(
                '#theme' => 'block__vt_course_offer_item',
                '#data' => [
                  'id' => $courseType['id'],
                  'image' => $courseType['image'],
                  'duration' => $courseType['duration'],
                  'price' => $courseType['price'],
                  'd_url' => $courseType['d_url'],
                  'title' => $courseType['title'][$language],
                  'short_description' => $courseType['short_description'][$language],
                ],
                '#cache' => [
                  'disabled' => TRUE,
                  'contexts' => ['languages'],
                  'tags' => ['courseType:' . $courseData['data']['course'][0]['id']],
                ]
            );

然后我们可以在树枝中使用它:

 {% for course_type in courses|slice(i * 4, (i+1) * 4) %}
      {{ course_type.output }}
 {% endfor %}

简而言之,它归结为{{variable.preset{u language\u value}}的模板使用,而不是{{variable.value[language]}

 类似资料:
  • 本质上,我有一个Java类,它在套接字通道上执行选择,我想存根通道,这样我就可以按预期测试选择工作。 例如,这大致就是被测试的类所做的: 我希望能够测试这样的东西: 这是基于一个真实的例子,但细节并不重要。总体目标是如何存根支持选择的SocketChannel,这样我就不必创建真正的客户机进行测试。 我也知道这比简单地截取SocketChannel更复杂:似乎我需要截取或以某种方式提供自定义系统默

  • 问题内容: 拿这个对象: 如果我这样做: 然后y将返回。通过stringify传递函数有什么能做的吗?使用“ ye goode olde eval()”可以创建具有附加功能的对象,但是打包该对象又是什么呢? 问题答案: 您不能打包函数,因为任何序列化程序都看不到函数关闭的数据。甚至Mozilla 也无法正确打包闭包。 最好的选择是使用复活器和替换器。 https://yuilibrary.com/

  • 问题内容: 是否存在(大致)SQL或类似XQuery的语言来查询JSON? 我想到的是非常小的数据集,可以很好地映射到JSON,可以轻松地回答诸如“ Y> 3时X的所有值是什么”之类的查询或执行常规的SUM / COUNT类型操作。 作为完整的示例,如下所示: 我认为这将在客户端和服务器端均有效,并将结果转换为适当的特定于语言的数据结构(或可能保留为JSON) 快速Google 搜寻表明人们已经考

  • 鉴于这些实体和存储库可以访问DDBB中的数据: 我想为方法getTotalPurchaseAmounts(长customerId)添加缓存,这样,当为客户添加一些购买时,只有该客户的purchasesd被逐出。 相关的依赖项是: 相关配置: 由于spring缓存(和ehcache)逐出的次数受元素或所有条目的限制,我开发的解决方案是通过友好方式创建缓存(每个客户一个),这样我就可以逐出这些缓存。

  • 问题内容: 它可能是实现细节,但是对于Oracle和IBM JDK而言,至少是对已编译模式进行了缓存,还是作为应用程序开发人员我们需要自己对已编译模式进行缓存? 问题答案: 我不认为结果会被缓存,并且代码或文档中也没有这种行为的证据。自己实现这样的缓存(当然)是比较琐碎的,但是我对这样的缓存很有用的用例感兴趣。 回覆。下面的注释和String.split(),有一种不同的方法,即代码采用简单的1或

  • 在Flink文档中的任何地方,我都看到一个状态对map函数和工作人员来说都是单独的。这在独立方法中似乎很强大,但是如果Flink在集群中运行呢?Flink可以处理所有工作人员都可以添加数据并查询它的全局状态吗? 来自Flink关于国家的文章: 为了在此设置中实现高吞吐量和低延迟,必须最小化任务之间的网络通信。在Flink中,流处理的网络通信仅沿作业操作符图中的逻辑边(垂直)进行,因此流数据可以从上