ianreid/switcher

适用于Craft CMS的灵活易用的站点切换器。

1.3 2024-05-01 14:45 UTC

This package is auto-updated.

Last update: 2024-08-31 00:30:27 UTC


README

AWS Image Handler URLs icon

Craft CMS切换器

需求

此插件需要Craft CMS ^4.x 或 ^5.x

安装

要安装此插件,请按照以下说明操作。

  1. 在您的终端中,进入您的Craft项目目录

     cd /path/to/project
    
  2. 然后告诉Composer加载此插件

     composer require ianreid/switcher -w && php craft plugin/install switcher
    

概述

Craft CMS的Switcher插件提供了一个Twig函数,用于在您的网页上生成站点切换器。此切换器可以配置为显示当前组或所有组的站点。

Twig函数

getSwitcherSites() Twig函数包含多个参数。

getSwitcherSites()

推荐用法

我们建议根据模板设置源。您可以将回退设置为entry,这允许您为类别、产品或自定义路由数组等元素设置变量。

1. 在您的布局主文件中定义一个availableSites变量

{% set availableSites = getSwitcherSites(switcherCustomSource|default(entry ?? null)) %}

在此变量中,我们使用switcherCustomSource作为源,以entry作为回退,然后是null

然后,您可以将此变量传递到您的导航栏或任何包含site/languages切换器的文件中,以防止冗余查询。

通过在主布局文件顶部定义availableSites变量,您还可以将其用于中的og:locale:alternate元数据,<link rel=alternate>等。

2. 在您的页面模板中确定源

对于任何除了Entry(上一个示例中的默认值)以外的craft\base\Element,您可以在您的页面模板中这样做

{% set switcherCustomSource = product %}

{% set switcherCustomSource = category %}

或对于数组(例如,使用自定义路由)

{% set switcherCustomSource = [ 
      {'uri':'cart', 'siteId': 1},
      {'uri':'panier', 'siteId': 2}, 
      {'uri':'cesta', 'siteId': 3},
   ]
%}

输出

该函数返回一个具有两个键的项的数组:“url”和“site”。“url”键是站点的URL,“site”键是站点模型。

array [
  0 => array [
    "url" => "http://yoursite.com/uri"
    "site" => craft\models\Site {}
  ]
  1 => array [
    "url" => "http://yoursite.com/en/uri"
    "site" => craft\models\Site {}
  ]
]

站点切换器示例

基本用法

{% if availableSites|length %}
   {% for item in availableSites %}
      <a 
         href="{{ url(item.url) }}" 
         hreflang="{{item.site.language}}" 
         lang="{{item.site.language}}" 
      >
         {{ item.site.language }}
      </a>
   {% endfor %}
{% endif %}
按组分组站点

{% if availableSites|length %}

   {% set availableSitesByGroup = availableSites|group(lang => lang.site.group) %}

   {% for group, langs in availableSitesByGroup %}

      <h3 class="text-9 text-blue-500">{{ group }}</h3>
      {% for item in langs %}
         <a 
            href="{{ url(item.url) }}" 
            hreflang="{{item.site.language}}" 
            lang="{{item.site.language}}" 
         >
            {{ item.site.language }}
         </a>
      {% endfor %}

   {% endfor %}
{% endif %}
仅显示语言的前两个字母
{% if availableSites|length %}
   {% for item in availableSites %}
      <a 
         href="{{ url(item.url) }}" 
         hreflang="{{item.site.language}}" 
         lang="{{item.site.language}}" 
      >
         {{ item.site.language [0:2]|capitalize }}
      </a>
   {% endfor %}
{% endif %}
<head>中使用og:locale:alternate

如果您希望应用相同的参数,请使用您之前创建的availableSites变量;如果不适用,请创建不同的变量。

💡您必须在以下元属性之前定义您的变量。

<meta property="og:locale" content="{{ currentSite.language }}">

{% if availableSites|length %}
   {% for item in availableSites %}
      <meta property="og:locale:alternate" content="{{ item.site.language }}">
   {% endfor %}
{% endif %}

💡所有这些示例都可以根据函数参数进行调整。

此插件由Ian Reid Langevin提供。