wrux/blocky

将矩阵字段映射到数组中以在twig中渲染。

安装: 471

依赖项: 0

建议者: 0

安全: 0

星标: 26

关注者: 1

分支: 0

开放问题: 0

类型:craft-plugin

1.1.2 2024-03-08 17:06 UTC

This package is auto-updated.

Last update: 2024-09-08 18:39:38 UTC


README

Craft Class Variance Authority

Blocky CMS 3.x 插件

用于 Craft CMS 的矩阵字段映射的实用插件。

Blocky 处理解析 Matrix 块的逻辑,以便您可以创建更干净的 Twig 模板。

需求

此插件需要 Craft CMS 3.0.0 或更高版本。

安装

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

  1. 打开您的终端并转到您的 Craft 项目

    cd /path/to/project
  2. 然后让 Composer 加载插件

    composer require wrux/blocky
  3. 在控制面板中,转到设置 → 插件,并点击 Blocky 的“安装”按钮。

配置块解析器

  1. 在您的 Craft 项目中创建 config/blocks.php

    <?php
    
    return [
      'textBlock' => 'app\blocks\TextBlock',
    ];
  2. 在您的项目中某个位置,为每个 Matrix 块创建类,该类扩展 wrux\blocky\Block

    以下是一个示例块

    <?php
    
    namespace app\blocks;
    
    use wrux\blocky\Block;
    
    class TextBlock extends Block {
    
      public string $template = 'text.twig';
    
      public function getContext(): array {
        return [
          'text' => !empty($this->block->contentHtml)
            ? $this->block->contentHtml->getParsedContent()
            : NULL,
        ];
      }
    }

模板化

Blocky 在模板中可用为 craft.blocky,或者您也可以使用 {% blocks ... %} Twig 标签。

Twig 标签

{% blocks %} 标签与 Twig for 循环类似。它期望一个矩阵字段,并将处理解析和迭代。

示例

{% blocks in entry.blockComponents %}
  <section class="block {{ 'block--' ~ type }}">
    {% include template with context only %}
  </section>
{% endblocks %}

跳过空块的示例

您可以在打开标签中使用 skip empty。这将跳过返回空上下文的块。

{% blocks in entry.blockComponents skip empty %}
  <section class="block {{ 'block--' ~ type }}">
    {% include template with context only %}
  </section>
{% endblocks %}

变量

{% blocks %} 标签内部可用以下变量。

手动解析块

如果您不想使用 Twig 标签,可以使用 craft.blocky 服务手动解析块。内部这消耗相同的 Blocky::$plugin->parseBlocks() 方法。此方法允许您在 for 循环之前检查 blocks.hasBlocks

示例

{% set blocks = craft.blocky.parseBlocks(entry.blockComponents) %}
{% if blocks.hasBlocks %}
  <div class="blocks">
    {% for block in blocks %}
      <section class="block {{ 'block--' ~ block.type }}">
        {% include block.template ignore missing with block.context only %}
      </section>
    {% endfor %}
  </div>
{% endif %}

块解析器路线图

要完成的事情和潜在功能的想法

  • 测试 🔥
  • CraftCMS 4.0 发布后嵌套块。

Callum Bonnyman 提供