sherlockode/advanced-content-bundle

Symfony Bundle 用于 CMS 内容和自定义字段

v0.9.7 2024-01-30 08:58 UTC

README

Support

image

目录

概述

此捆绑包为最终用户提供高级 CMS 功能。

用户可以通过直观的用户界面快速轻松地构建网站页面。包含多个标准元素,如文本块、标题、图像、图像轮播、视频播放器等。可以使用行和列元素根据需要创建响应式布局。草稿将自动保存,并且可以轻松回滚到以前版本。只需几行代码即可简单添加自定义元素。

安装

使用 composer 获取捆绑包

安装此捆绑包的最佳方式是依赖于 Composer

$ composer require sherlockode/advanced-content-bundle

启用捆绑包

在应用程序内核中注册捆绑包

// config/bundles.php
<?php

return [
    /* ... */
    Sherlockode\AdvancedContentBundle\SherlockodeAdvancedContentBundle::class => ['all' => true],
];

术语

实体

页面链接到 PageMeta 和内容。
可选地还可以链接到 PageType。

内容也可以独立使用。
例如,如果多个页面包含相同的层,可以创建一个包含该层的单个内容,然后在页面中包含该内容。
因此,如果层需要更改,只需更改单个内容而不是所有页面。

您还可以创建内容以使网站的一些部分动态化。
例如,您可以创建一个包含页脚链接的内容。这样,每次页脚需要更新时,您不需要更改模板。

页面、PageMetas 和内容都是可版本化的,因此有 PageVersion、PageMetaVersion 和 ContentVersion 实体。

最后,如果您启用了范围管理,您将能够将每个页面和内容关联到一个或多个范围。

元素

内容数据是元素的数组。
元素可以是布局或字段类型。
布局包括行和列。
字段类型包括我们定义的字段类型(文本、图像、视频等)和您自定义的字段类型。

配置

资源

jQuery 和 jQuery UI 是必需的,并且应该在 package.json 中要求以便资源构建工作。

请注意,Font Awesome 是可选的,但用于在贡献页面上显示图标。要使用它,您应该在 package.json 中要求 @fortawesome/fontawesome-free(或使用您选择的另一种安装方法)。

{
  "dependencies": {
    "@fortawesome/fontawesome-free": "^6.1.2",
    "jquery": "^3.5.0",
    "jquery-ui": "1.12.1"
  }
}

您应该在主资源文件中导入提供的资源以将它们集成到资源构建过程中。

// assets/js/app.js
import '../../vendor/sherlockode/advanced-content-bundle/Resources/public/css/index.scss';
import '../../vendor/sherlockode/advanced-content-bundle/Resources/js/index.js';

// font awesome (optional)
import '@fortawesome/fontawesome-free/css/fontawesome.css';
import '@fortawesome/fontawesome-free/css/solid.css';

您可以使用提供的 layout.html.twig 或根据需要构建自己的,但要使用此布局与 Webpack Encore Twig 函数,则需要 symfony/webpack-encore-bundle

composer require symfony/webpack-encore-bundle
{# templates/layout.html.twig #}

{# ... #}
{{ encore_entry_link_tags('app') }}
{# ... #}
{{ encore_entry_script_tags('app') }}

Twig

此捆绑包自动使用 Bootstrap 5(或对于 Symfony < 5.3 使用 Bootstrap 4)作为所有表单的基本表单主题。

如果您只想使用不同的表单主题,可以覆盖捆绑包的基本表单主题文件 Form/base_theme.html.twig

{# templates/bundles/SherlockodeAdvancedContentBundle/Form/base_theme.html.twig #}

{% extends 'form_div_layout.html.twig' %}

实体

SherlockodeAdvancedContentBundle 提供了 8 个实体模型。要使用它们,您需要创建自己的实体,请参阅文档中的示例,并填写相应的配置。

# config/packages/sherlockode_advanced_content.yaml
sherlockode_advanced_content:
    entity_class:
        content: App\Entity\Content
        content_version: App\Entity\ContentVersion
        page: App\Entity\Page
        page_meta: App\Entity\PageMeta
        page_meta_version: App\Entity\PageMetaVersion
        page_type: App\Entity\PageType
        page_version: App\Entity\PageVersion
        scope: App\Entity\Scope

上传配置

如果您想使用 ImageFile 字段类型,您需要配置图片保存的目录。

如果没有定义,所有图片都将保存在系统的临时目录中。

uri_prefix 用于在显示时检索图片。生成的图片 URL 将是 URI 前缀加上上传的文件名。

# config/packages/sherlockode_advanced_content.yml
sherlockode_advanced_content:
    upload:
        image_directory: '%kernel.project_dir%/public/uploads/acb_images'
        uri_prefix: /uploads/acb_images

该捆绑包使用命名器来命名上传的文件。命名器是一个简单的类,它实现了 Sherlockode\AdvancedContentBundle\Naming\NamerInterface

内置的命名器包括

  • Sherlockode\AdvancedContentBundle\Naming\UniqueNamer:使用 md5 / 唯一 ID 的组合来尝试使文件名唯一。这是默认命名器。其服务是 sherlockode_advanced_content.unique_file_namer;
  • Sherlockode\AdvancedContentBundle\Naming\ClientOriginalNamer:保留原始文件名。其服务 ID 是 sherlockode_advanced_content.client_original_file_namer

您可以通过配置更改命名器

# config/packages/sherlockode_advanced_content.yml
sherlockode_advanced_content:
    upload:
        image_directory: '%kernel.project_dir%/public/uploads/acb_images'
        uri_prefix: /uploads/acb_images
        file_namer: sherlockode_advanced_content.client_original_file_namer

路由

路由被拆分为几个文件以提高导入规则。

  • content.xml:编辑内容的相关路由
  • content_crud.xml:内容(演示目的)的基本 CRUD 路由
  • page.xml:编辑页面的相关路由
  • page_crud.xml:页面(演示目的)的基本 CRUD 路由
  • scope_crud.xml:范围(演示目的)的基本 CRUD 路由
  • tools.xml:工具页面(如导入/导出、页面类型 CRUD)的路由
  • all.xml:包括上述所有路由
  • base.xml:包括 tools.xml、content.xml 和 page.xml

如果您计划在自定义控制器(如使用外部管理系统)中管理所有 CRUD 操作,则 base.xml 文件就足够了。

# config/routes.yaml
sherlockode_advanced_content:
    prefix: '/acb'
    resource: '@SherlockodeAdvancedContentBundle/Resources/config/routing/base.xml'
    # or include all routes directly
    # resource: '@SherlockodeAdvancedContentBundle/Resources/config/routing/all.xml'

高级文档

依赖项

此捆绑包与 webpack 兼容。jQuery 库是必需的。jQuery ui sortable 建议使用但不是必需的。一些字段类型,如图片轮播,使用 Bootstrap 5 进行显示。

许可协议

此捆绑包采用 MIT 许可证。请查看专用文件中的详细信息。

联系方式

如果您想联系我们,最佳方式是在我们的网站上填写表格或发送电子邮件至 contact@sherlockode.fr 并提出您的问题。我们保证尽快回复!