artgris/page-bundle

为Symfony的EasyAdminBundle添加页面管理器

安装: 1,248

依赖项: 0

建议者: 0

安全: 0

星级: 13

关注者: 3

分支: 2

开放问题: 1

类型:symfony-bundle

4.2.2 2023-12-12 10:29 UTC

README

安装

composer require artgris/page-bundle

php bin/console doctrine:schema:update --force 

配置

在config/packages中

配置KnpLabs/DoctrineBehaviors: https://github.com/KnpLabs/DoctrineBehaviors

  • 在services.yaml中添加区域参数
parameters:
    locale: 'en'
  • 添加到AppKernel
return [
    ...
    Knp\DoctrineBehaviors\DoctrineBehaviorsBundle::class => ['all' => true],
];
  • 添加到DashboardController.php
use Artgris\Bundle\PageBundle\Entity\ArtgrisPage;

public function configureMenuItems(): iterable
{
     ...
     yield MenuItem::linkToCrud('Page', 'fa fa-file-alt', ArtgrisPage::class);
}

添加a2lix_translation_form.yaml

示例

a2lix_translation_form:
    locale_provider: default
    locales: [fr, en]
    default_locale: fr

添加artgris_page.yaml

不是必需的,没有最小配置

artgris_page:
    controllers: #Namespaces used to load the route selector
        - 'App\Controller\MainController::index'
        - 'App\Controller\Main\'
        - 'App\Controller\'
        - ... 
    types: # add your own types
        -   integer: 'Symfony\Component\Form\Extension\Core\Type\IntegerType'
        -   date: 'Symfony\Component\Form\Extension\Core\Type\DateType'
        -   time: 'Symfony\Component\Form\Extension\Core\Type\TimeType'
        -   custom: 'App\Form\CustomType'
        - ... 
    default_types: true #load default form types [1]
    hide_route_form: false #to hide the route selector (example of use: one page website)
    redirect_after_update: false #always redirect the user to the configuration page after new/edit action
    use_multiple_a2lix_form: false #to use multiple a2lix form

[1] 默认表单类型列表

source: Artgris\Bundle\PageBundle\Service\TypeService

    'type.text' => ArtgrisTextType::class,  => not required TextType
    'type.textarea' => ArtgrisTextAreaType::class,  => not required TextAreaType with rows = 8 + renderType: \nl2br
    'type.section' => SectionType::class => h2 section, type hidden, to delimit "blocks"

用法

1 - 创建页面并添加块

2 - 编辑块的內容

3 - 通过标签检索简单块

{{ blok('title') }}

=> return "My website"

使用调试条轻松找到所有块(通过点击块标签复制/粘贴代码)

检索当前页面或未链接到页面的所有块

bloks()

示例

{% for blok in bloks() %}
    {{ blok }} <br>
{% endfor %}

通过页面标签检索所有块

page('page-tag')

示例

{% for blok in page('homepage') %}
    {{ blok }} <br>
{% endfor %}

通过正则表达式检索块

在数组中

regex_array_blok('regex-expression')

示例

{% for blok in regex_array_blok('^sidebar-*') %}
    {{ blok }} <br>
{% endfor %}

将它们连接成一个字符串

regex_blok('regex-expression')

示例

{{ regex_blok('^sidebar-*') }}  

提示

自定义块渲染

创建一个实现PageFromInterface的表单类型

namespace App\Form;

use Artgris\Bundle\PageBundle\Form\Type\PageFromInterface;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\OptionsResolver\OptionsResolver;

class CustomType extends AbstractType implements PageFromInterface
{

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'attr' => [
                'class' => 'custom',
            ],
            'required' => false,
        ]);
    }

    public function getParent()
    {
        return TextareaType::class;
    }


    public static function getRenderType($value)
    {
        return $value. '<hr>';
    }
}

使用getRenderType方法编辑渲染方式。

命令

导出数据库模型(无值)到文件("/pages/model.yaml")

php bin/console artgris:page:export

/pages/model.yaml 提取

page-2:
    route: 'App\Controller\Main\MainController::index'
    name: 'page 2'
    blocks:
        blok-10:
            type: Artgris\Bundle\PageBundle\Form\Type\ArtgrisTextType
            name: 'blok 10'
            translatable: false

将模型("/pages/model.yaml")导入数据库

php bin/console artgris:page:import

添加--remove-deviants以删除已更改的内容类型(例如:yaml中的文本类型但在数据库中为整数类型)

php bin/console artgris:page:import --remove-deviants

添加--ignore-names以忽略已更改的页面和块名称

php bin/console artgris:page:import --ignore-names

删除额外的页面/块(在数据库中但不在model.yaml中)

php bin/console artgris:page:remove:extra

教程

缓存信息

在调用以下twig函数之一后,当前页面或未链接到页面的所有块都被缓存(并显示在调试条中)

  • bloks()
  • blok('block-linked-to-the-current-page') => 通过页面配置中的路由选择器
  • blok('block-linked-to-any-page') => 路由选择器为空

首次调用后添加到缓存的内容

  • blok('block-of-another-page')

不在缓存中,每次调用都需要新的数据库调用

  • page('page-tag')
  • regex_array_blok('regex-expression')
  • regex_blok('regex-expression')