artgris / page-bundle
为Symfony的EasyAdminBundle添加页面管理器
4.2.2
2023-12-12 10:29 UTC
Requires
Requires (Dev)
- psr/log: ~1.0
This package is auto-updated.
Last update: 2024-09-12 12:07:05 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')