rapidez/statamic


README

此软件包帮助您通过添加一些良好的起点,将 Statamic 集成到您的 Rapidez 项目中

  • 产品、类别和品牌通过 Runway 作为只读资源集成,以便您可以将它们链接到内容
  • 产品、类别、品牌和页面集合作为起点,以便您可以按需扩展
  • 路由合并,以便 Statamic 路由作为后备工作
  • 带有产品滑块、内容、图像和表单组件的页面构建器字段集
  • 通过 justbetter/statamic-glide-directive 使用 Glide 通过响应式图像
  • 页面面包屑
  • 全局视图可用
  • 元标题、描述和自动替代 hreflang 链接标签

要求

您需要在您的 Rapidez 安装中安装 statamic/cms。请按照 安装指南 操作。

安装

composer require rapidez/statamic

安装命令

安装命令将帮助您设置所有必要的设置。它将主要设置 Eloquent 驱动程序 并从 rapidez/statamic 存储库发布必要的供应商。

php artisan rapidez-statamic:install

当运行安装命令时,您将提示设置 Eloquent 驱动程序。在此配置中,您可以选择保留在平面文件系统中的内容以及要迁移到数据库的内容。我们建议在设置 Eloquent 驱动程序时将以下选项迁移到数据库:

  • 资产
  • 集合树
  • 条目
  • 表单
  • 表单提交
  • 全局
  • 全局变量
  • 导航树
  • 术语
  • 令牌

运行完安装命令后,请确保检查以下指南进行一些手动更改。

配置

请查看 rapidez/statamic.php 配置文件,如果您需要更改某些内容,可以使用以下命令发布:

php artisan vendor:publish --provider="Rapidez\Statamic\RapidezStatamicServiceProvider" --tag=config

资产磁盘

请确保在 config/filesystems.php 中有一个资产磁盘。

'disks' => [
    'assets' => [
        'driver' => 'local',
        'root' => public_path('assets'),
        'url' => '/assets',
        'visibility' => 'public',
    ],
],

路由

由于 Rapidez 使用路由回退以允许路由以低于 Magento 路由的优先级添加,因此此软件包用于解决这个问题,因为 Statamic 路由本身会覆盖您的 Magento 路由。请确保在 config/statamic/routes.php 中禁用默认的 Statamic 路由。我们将在 Magento 路由之后注册此软件包的 Statamic 路由。

'enabled' => false,

主页

如果您想使用 Statamic 的主页而不是 Magento 的 CMS 页面;请禁用 Magento 中的主页。

发布集合、蓝图和字段集

如果您已运行安装命令,这些内容已经发布。

php artisan vendor:publish --provider="Rapidez\Statamic\RapidezStatamicServiceProvider" --tag=rapidez-statamic-content

如果您想更改视图

php artisan vendor:publish --provider="Rapidez\Statamic\RapidezStatamicServiceProvider" --tag=views

Magento 店铺 ID

resources/sites.yaml 的属性部分为每个站点添加 Magento 商店 ID,并使用商店代码作为键非常重要。因为 URL 可能因环境(本地、测试、预发布、生产)而异,所以我们使用配置文件的“sites”部分,并在 sites.yaml 中引用它。当前站点将基于 MAGE_RUN_CODE 确定。默认情况下,Statamic 使用该 URL;这仍然是后备方案。如果您需要使用多站点生成一些 URL,最好是从环境变量中指定每个站点的 url。请参阅 Statamic 多站点文档。如果需要将站点分组以过滤替代 hreflang 链接标签,可以在 attributes 内部设置 group。如果您想排除此站点使用 Statamic 数据进行修改,可以在 attributes 部分将 disabled 设置为 true。

'default' => [
    'name' => env('APP_NAME', 'Statamic'),
    'locale' => 'en_EN',
    'lang' => 'en_EN',
    'url' => '/',
    'attributes' => [
        'magento_store_id' => 1,
        'group' => 'default',
        'disabled' => false,
    ],
],
default:
  name: '{{ config:rapidez.statamic.sites.default.name }}'
  locale: '{{ config:rapidez.statamic.sites.default.locale }}'
  lang: '{{ config:rapidez.statamic.sites.default.lang }}'
  url: '{{ config:rapidez.statamic.sites.default.url }}'
  attributes:
    magento_store_id: '{{ config:rapidez.statamic.sites.default.attributes.magento_store_id }}'
    group: '{{ config:rapidez.statamic.sites.default.attributes.group }}'
    disabled: '{{ config:rapidez.statamic.sites.default.attributes.disabled }}'

在类别和产品上显示内容

默认情况下,您将获得配置好的内容,这些内容存储在 $content 变量中。这可以通过在 rapidez/statamic.php 配置文件中的 fetch 配置中启用/禁用来实现。如果您想从默认页面构建器显示配置好的内容,可以在视图中包含它

@includeWhen(isset($content), 'rapidez-statamic::page_builder', ['content' => $content?->content])
  • 产品:resources/views/vendor/rapidez/product/overview.blade.php
  • 类别:resources/views/vendor/rapidez/category/overview.blade.php

品牌概览和单个品牌

品牌页面

单个品牌页面显示一个产品列表页面,其中包含链接到该品牌的您的产品。默认情况下,单个品牌页面是禁用的。您可以在 content/collections/brands.yaml 中启用它们的路由,为它们添加一个路由

    route: '/brands/{slug}'

品牌概览

如果您想要为您的品牌创建一个概览页面,您可以在普通页面上添加一个 品牌概览 组件。这将自动加载一个视图,并将您的品牌按首字母分组。

从 Magento 导入类别或产品

类别

要更容易批量更改类别内容,您可以创建带有批量复制的内容的类别条目。

要这样做,运行以下之一

# Most basic, import all categories in all sites
php artisan rapidez:statamic:import:categories --all

# Import all categories in the site with handle "default" only
php artisan rapidez:statamic:import:categories --all --site=default

# import select categories in multiple sites
php artisan rapidez:statamic:import:categories 5 8 9 category-url-key --site=default --site=another_site

默认情况下,类别的前缀和标题将被复制。

如果您有一个自定义蓝图并想从类别添加更多数据,可以通过挂钩到 Eventy 事件来实现:rapidez-statamic:category-entry-data

Eventy::addFilter('rapidez.statamic.category.entry.data', fn($category) => [
        'description' => $category->description,
    ]
);

产品

要更容易批量更改产品内容,您可以创建带有批量复制的内容的产品条目。

要这样做,运行以下之一

# Most basic, import all products in all sites
php artisan rapidez:statamic:import:products

# Import all products in the site with handle "default" only
php artisan rapidez:statamic:import:products --site=default

默认情况下,产品的前缀和标题将被复制。

如果您有一个自定义蓝图并想从产品添加更多数据,可以通过挂钩到 Eventy 事件来实现:rapidez.statamic.product.entry.data

Eventy::addFilter('rapidez.statamic.product.entry.data', fn($product) => [
        'description' => $product->description,
    ]
);

品牌

要更容易批量更改品牌内容,您可以创建带有批量复制的内容的品牌条目。

要这样做,运行以下之一

# Import all brands in all sites
php artisan rapidez:statamic:import:brands

# Import all brands in the site with handle "default" only
php artisan rapidez:statamic:import:brands --site=default

默认情况下,品牌的前缀和标题将被复制。

如果您有一个自定义蓝图并想从品牌添加更多数据,可以通过挂钩到 Eventy 事件来实现:rapidez.statamic.brand.entry.data

Eventy::addFilter('rapidez.statamic.brand.entry.data', fn($brand) => [
        'description' => $brand->description,
    ]
);

全局

全局变量将通过 $globals 变量可用。例如;如果您创建了一个具有处理程序 header 的全局,并在其中添加了一个名为 logo 的字段,它将作为 $globals->header->logo 可用。

表单

当您创建一个表单时,您可以使用 rapidez-statamic::emails.form 作为 HTML 模板,该模板使用 Laravel 邮件模板,其中所有字段都在一个表中,确保您启用了 markdown!

升级

自3.0.0版本起,我们开始为$globals和$content变量使用optionalDeep。这意味着某些代码可能需要升级。以下是可能需要更改的一些建议列表

由于optionalDeep始终返回我们明确需要的可选类,因此我们需要明确询问它是否设置了值

- @if($globals->cookie_notice->text)
+ @if($globals->cookie_notice->text->isset())

这也意味着需要更新对特定值的检查

- @if($globals->cookie_notice->text === 'foo')
+ @if($globals->cookie_notice->text->get() === 'foo')

然而,任何尝试将值转换为字符串的操作都会立即得到值。因此可以保持不变的部分有

{{ $globals->cookie_notice->text }}
{{ $globals->cookie_notice->text ?? 'fallback value' }}
{{ $globals->cookie_notice->text . ' string concatenation' }}
@foreach($content->blocks as $contentBlock)

@endForeach

许可证

GNU通用公共许可证v3。有关更多信息,请参阅许可证文件