ianreid / switcher
适用于Craft CMS的灵活易用的站点切换器。
Requires
- craftcms/cms: ^3.0|^4.0|^5.0
Requires (Dev)
- craftcms/phpstan: dev-main
- craftcms/rector: dev-main
README
Craft CMS切换器
需求
此插件需要Craft CMS ^4.x 或 ^5.x
安装
要安装此插件,请按照以下说明操作。
-
在您的终端中,进入您的Craft项目目录
cd /path/to/project
-
然后告诉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提供。