triniti/canvas

此包已被弃用且不再维护。作者建议使用 triniti/core 包。

PHP 库,提供 triniti:canvas 架构的实现。

v1.0.1 2019-10-29 00:49 UTC

This package is auto-updated.

Last update: 2021-06-16 23:17:24 UTC


README

Build Status Code Climate Test Coverage

PHP 库,提供 triniti:canvas 架构的实现。使用此库假定您已使用 Pbjc 创建并编译了自己的 pbj 类,并正在使用来自 triniti/schemas"triniti:canvas:mixin:*" 混合。

Symfony 集成

在 Symfony 应用中启用这些服务是通过导入类并让 Symfony 自动配置和自动注入它们来完成的。

config/packages/canvas.yml

services:
  _defaults:
    autowire: true
    autoconfigure: true
    public: false

  Triniti\Canvas\:
    resource: '%kernel.project_dir%/vendor/triniti/canvas/src/**/*'

Twig 扩展

此库提供了一个扩展,目前有一个名为 canvas_render_blocks 的函数。此函数接受一个包含具有 triniti:canvas:mixin:block 混合的消息的块数组和选项数组,用于创建渲染上下文(triniti:common::render-context 的实例)。

如果使用 Symfony 自动注入,则 Twig 扩展将自动可用。

示例

假设我们有一个名为 pageacme:canvas:node:page 实例,它有一个名为 blocks 的字段。

# page.html.twig

<html>
  <title>{{ page.get('seo_title') }}</title>
</html>
<body>
  <h1>{{ page.get('title') }}</h1>

  <div class="contents">
    {{ canvas_render_blocks(page.get('blocks', []), {
      container: page,
      section: 'main',
      booleans: {
        enable_ads: true,
        dnt: false,
        autoplay_videos: false,
      },
      strings: {
        custom1: 'val1',
        custom2: 'val2',
        customN: 'val3',
      },
    }) }}
  </div>
</body>
</html>

此函数将使用 Twig 渲染所有块,通过解析上下文和块类型到 Twig 模板。请求的文件名必须在 Twig 命名空间路径 @canvas_blocks 中。所有部分都是可选的,除了平台,默认为 "web"。

使用第一个模板

  • @canvas_blocks/{$platform}/{$section}/{$blockName}/{$blockName}.{$deviceView}.twig
  • @canvas_blocks/{$platform}/{$section}/{$blockName}/{$blockName}.twig
  • @canvas_blocks/{$platform}/{$blockName}/{$blockName}.{$deviceView}.twig
  • @canvas_blocks/{$platform}/{$blockName}/{$blockName}.twig
  • @canvas_blocks/{$platform}/missing_block.twig

示例输出

例如 @canvas_blocks/web/blogroll/youtube_video_block/youtube_video_block.smartphone.twig

提供给模板的有效载荷

$twig->render($name, [
    'pbj'           => $block,         // instance of triniti:canvas:mixin:block
    'pbj_name'      => $blockName,     // e.g. quote_block
    'prev_pbj'      => $prevBlock,     // previous block instance or null
    'prev_pbj_name' => $prevBlockName, // previous block name (e.g. youtube_video_block) or null
    'next_pbj'      => $nextBlock,     // next block instance or null
    'next_pbj_name' => $nextBlockName, // next block name (e.g. youtube_video_block) or null
    'rendered'      => $rendered,      // a map of the already rendered block names
                                       // slug-case and snake_case. e.g. ['page-break-block' => true, 'text-block' => true]
    'context'       => $context,       // instance of triniti:canvas:block:render-context
    'idx'           => $idx,           // array index starting from 1
    'is_first'      => $isFirst,       // bool, true if first block
    'is_last'       => $isLast,        // bool, true if last block
    'total_blocks'  => $total,         // int, total number of blocks being rendered
]);