mcms/front-end

v0.0.20 2022-04-10 12:44 UTC

README

查看作曲家

安装后,会安装一个新的服务提供者"ViewComposerServiceProvider"。此提供者负责包含您所有的视图作曲家,例如菜单、侧边栏等。它自带一个菜单作曲家,它会查找头部菜单和脚部菜单的别名,并将它们分别传递给部分头部和部分脚部视图作为$HeaderMenu和$FooterMenu。任何新的作曲家都应该在该服务提供者中注册

可编辑区域

可编辑区域是布局的一部分,您可以选择允许用户添加内容类型,或者您可以使用类来添加内容。它需要在config文件夹中的"editableRegions.php"文件中进行配置。每个区域可以是通用类型或类类型。每个项目都必须有类型和项目属性才能有效

[
   'type' => 'html',
   'item' => 'dasfasdf'
]

或者

 [
    'type' => 'image',
     "item" => [
            "src" => "http://img-9gag-fun.9cache.com/photo/aWMxG3A_460s.jpg",
            "href" => "http://9gag.com/gag/aWMxG3A",
            "title" => "A post",
            "target" => "_blank",
            "description" => "A cool post bro"
        ]
    ]
 ]

如果是类类型,您需要提供类名

[
 "featured" => [
            "label" => "Featured Items",
            "slug" => "featuredItems",
            "type" => "class",
            "class" => "FrontEnd\\EditableRegions\\LatestPages",
            ]
]

这允许创建用户无法编辑的某种小部件(例如最新文章),但您允许用户更改您的自定义设置,如每页结果数量。

"options" => [
                [
                    "varName" => "limit",
                    "label" => "Number of items",
                    "type" => "text",
                    "options" => NULL
                ],
                [
                    "varName" => "orderBy",
                    "label" => "Order by",
                    "type" => "select",
                    "options" => [
                        [
                            "default" => TRUE,
                            "label" => "Title",
                            "value" => "title"
                        ],
                        [
                            "default" => FALSE,
                            "label" => "Creation date",
                            "value" => "created_at"
                        ],
                        [
                            "default" => FALSE,
                            "label" => "Custom",
                            "value" => "custom"
                        ]
                    ]
                ]
            ]

当您需要向您的区域添加自定义逻辑或确保用户不会“破坏”某些内容时,这可能非常有用。

通用类型非常灵活且功能强大。它允许在区域中展示任何类型的内容。默认类型包括

  • HTML : 纯HTML,可以是任何内容,因此在模板中请小心
  • 图片 : 一张带有元数据(如链接和alt标题)的图片
  • 项目 : 使用ItemSelector类,您可以从任何模块中获取项目。不要忘记“处理()”
  • 结构化数据 : 您决定用户应该输入什么。允许默认数据类型

使用API

开始使用API,例如通过筛选区域,例如您想要的首页区域

$regions = $regions->filter('frontPage');

$regions对象现在包含frontPage布局的所有可编辑区域。快速进行的方法是执行简单的$regions->get(),这将获取所有区域。

通常,我们需要处理区域,因为如果它们包含项目,我们需要从数据库中获取它们。因此,我们需要执行$regions->processRegions()->get(),以便进入数据库并获取实际的项目。

记住,实际项目将在"item"属性中。

有时,我们知道我们的布局将是什么样的,例如,我们知道我们只需要处理1或2个区域,因此我们进行筛选以提高性能。$regions->processRegions(['featured', 'slider'])->get()。这将仅处理数组中提到的2个区域。

有时,我们只需要一个区域。我们可以筛选它,结果将不是一个数组,而是实际的对象(就像做$regions[0])。

$region = $regions->filter('frontPage')
    ->region('slider')
    ->process(null, false, true)
    ->get()

这将获取滑块区域,作为单个对象处理。

处理多个区域

$regions = $editableRegions->filter(['name' => 'frontPage'])
    ->process()
    ->get(true);

这将返回一个命名数组的结果

[
    'frontPage' => [
            'region 1' => [...],
            'region 2' => [...],
        ]
]

提醒

尽管可编辑区域非常强大且实用,但请尽量勿过度使用。给用户完全的控制权可能会破坏设计,或者可能因为用户添加的所有内容而使布局变慢。

布局

典型配置

    [
        'label' => 'Categories',
        'varName' => 'category',
        'view' => 'articles.index',
        'beforeRender' => '', //class that will be executed before render
        'settings' => [
            [
                'varName' => 'bannerImage',
                'label' => 'Banner Image',
                'type' => 'image',
                'options' => null
            ],
        ],
        'area' => ['pages.categories'] //only show in these areas
    ]

布局支持用户可以填充的设置,并保存在项目设置字段中。您可以使用它们来定制您的布局。

API

首先,您可以通过$article->settings['Layout']属性访问项目布局。然后,您可以使用布局管理器找到该布局

$layout = LayoutManager::registry($article->settings['Layout']['id'], true);

第二个参数指的是您是否选择处理布局,如果这样做,它将获取所有布局数据(执行类,获取项目等)

如果您设置了'beforeRender'选项,那么您将返回一个处理类,您可以使用它来获取"beforeRender"类的结果。例如,我们有一个beforeRenderPageById,它抓取布局设置中设置的单一ID,并将其作为对象获取。您可以通过这样做来访问该对象

$article->custom = $layout['handler']->handle($request, $article, $pageService, $filters);

处理类中的参数只是展示如何向该处理类传递您想要传递的任何内容的一个示例

您可以通过调用register方法在运行时添加新的布局

LayoutManager::register($layoutArray)