arsthanea / page-media-set-bundle

2.0 2018-06-18 10:16 UTC

README

此包提供了一种简单的方法,可以将媒体集合添加到Kunstmaan Bundles CMS中每个页面类型。

主要目标是跨多个页面类型共享一组媒体附件,无需每次升级数据库模式。例如,考虑为每个页面添加具有相同尺寸的顶部页面横幅,而无需将关系本身添加到实体中。

安装

composer require arsthanea/page-media-set-bundle

安装后,将 PageMediaSetBundle 添加到您的内核中,并更新您的数据库模式/创建迁移。

使用方法

有三个主要步骤

  1. 在您的实体上实现 HasMediaSetInterface。这告诉包每个页面将使用哪种类型的媒体。
  2. 在symfony配置中配置您的媒体类型(见下文)
  3. 现在,当编辑页面时,您将有一个额外的“媒体集”选项卡,可以设置媒体

设置后,有两种访问它们的方式

Twig函数

在twig模板中有一个简单的辅助函数

{% block header %}
    {% set banner = page_media(page, "banner") %}
    {% if banner %}<img src="{{ banner }}" alt="page banner">{% endif %}
{% endblock %}

容器中的服务

例如,在您的控制器中

    /** @var HasMediaSetInterface $page */
    $mediaUrl = $this->get('page_media_set.page_media_set_service')->getPageMedia($page, "banner");

配置

可用格式

将其添加到您的 config.yml 或类似文件中

page_media_set:
  formats:
    banner:
      min_width: 1920
      min_height: 420
      max_width: 1920
      max_height: 460
    teaser: ~

您需要配置所有媒体类型,但约束是可选的。

预定义媒体集类型

您可以使用symfony配置配置媒体集定义,而不是使用 getMediaSetDefinition 方法返回它们。

# app/config/config.yml
page_media_set:
  types:
    'Acme\Foo\Bar\BazEntity': [ 'foo', 'bar' ]

在这种情况下,不会调用 Acme\Foo\Bar\BazEntity::getMediaSetDefinition(),将使用 foobar 格式。

格式名称

格式名称来自翻译,使用 messages 字典中的 page_media_set.format.%s 键。例如

# messages.yml
page_media_set:
  format:
    banner: Top page banner

索引器

如果您正在使用搜索包,则可以启用索引页面缩略图。第一个定义的媒体将被存储在Elasticsearch文档的 'photo' 键下,然后您可以直接在搜索结果页面上使用它。

# config.yml

page_media_set:
  indexer: true