拥有内容构建工具功能的出色CMS


README

此包允许在Laravel应用程序中快速简单地构建网站。构建您的模板,创建您的页面并将它们放入菜单中。

安装

按常规安装

composer require sjorsvanleeuwen/webmixx

发布后端资源后,它应在本地环境中直接运行

php artisan vendor:publish --tag=webmixx-assets

使用

页面和页面模板

以任何用户的身份登录并转到:/webmixx/dashboard 创建页面模板并添加一些页面属性模板。

接下来,创建一个页面并选择您刚创建的页面模板,填写表单。

然后创建页面模板blade文件。如果您没有更改配置文件,它应该位于项目资源文件夹的资源/views/webmixx_templates/Page中。

使用页面模板的名称作为blade模板的名称。

检查页面模板的显示URL,以快速启动页面模板。

在构建模板文件完成后,访问/preview/Page/{您的页面ID},或简单地从后端页面列表中点击它。

菜单

在管理界面中创建您的菜单并添加页面到它。

对于更高级的使用,您可以通过创建配置设置来向菜单添加其他模型。查找页面设置以获取示例。

然后,在resources/views/webmixx_templates/menu中创建一个菜单模板文件。它应该以菜单名称的短横线表示形式命名。

在菜单模板中,您将有一个可用的$menuItems,它是一个顶级菜单项集合。

接下来,使用我们的Blade组件将其包含在视图中。

<x-webmixx-menus-menu menu="SLUG_REPRESENTATION_OF_YOUR_MENU_NAME"/>

PageModuleSet和PageModuleItem

想象一下,您已经构建了一个漂亮的新模块或幻灯片模块。

将它们以某种方式包含在您的页面中会很好。

这可以通过PageModuleSets和PageModuleItems轻松实现。

PageModuleSet

以新闻为例,我们想在页面上的组件中列出3篇最新的新闻文章。

首先创建一个新的类,它可以位于任何位置,并让它实现\SjorsvanLeeuwen\Webmixx\Contracts\ModuleSetFieldType\ModuleSetFieldType。

实现接口中的函数

  • getIterator 在页面显示中使用,这将包含页面要显示的数据
  • getModuleDisplayName 当构建页面模板时,您可以在其中参考的漂亮名称

它可以看起来像这样

<?php

namespace App\WebmixxModules;

use App\Models\News;
use SjorsvanLeeuwen\Webmixx\Contracts\ModuleSetFieldType;
use Traversable;

class ThreeMostRecentNewsArticles implements ModuleSetFieldType
{
    public static function getModuleDisplayName() : string{
        return '3 Most Recent News Articles';
    }
    
    public function getIterator() : Traversable{
        return News::query()
            ->orderByDesc('created_at')
            ->take(3)
            ->get();
    }
}

然后在AppServiceProvider的boot方法中注册它

    public function boot(): void
    {
        Webmixx::addPageModule(new ThreeMostRecentNewsArticles());
    }

现在,当构建页面模板并添加模块集时,它将提供一个名为数据提供程序的字段。

选择您刚刚构建的模块集(它将显示为getModuleDisplayName函数中给出的名称)。

当您使用新页面模板构建页面时,模块将不可见,因为没有为该属性配置数据。

PageModuleItem

PageModuleItems工作方式相当相同,只有一个小的区别:当构建页面时,您可以选择在页面中嵌入提供的哪些项。

让我们继续幻灯片示例。我们想在每个页面上都有一个幻灯片,但不是每个页面上都相同。

像以前一样,创建一个新的类,但这次实现ModuleItemFieldType。

实现接口中的函数

  • getSelectList 在页面创建中使用,这应该返回一个包含整数id字段和字符串name字段的集合。
  • getItem 在页面模板中使用,以从页面属性中检索您的项
  • getModuleDisplayName 当构建页面模板时,您可以在其中参考的漂亮名称

它可以看起来像这样

<?php

declare(strict_types=1);

namespace App\WebmixxModules;

use App\Models\Slideshow;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Collection;
use SjorsvanLeeuwen\Webmixx\Contracts\ModuleItemFieldType;

class PageSlideshowProvider implements ModuleItemFieldType
{
    public static function getModuleDisplayName(): string
    {
        return 'Page header slideshow';
    }

    public static function getSelectList(): Collection
    {
        return Slideshow::query()
            ->get();
    }

    public function getItem(int $value): Model
    {
        return self::getSelectList()->firstWhere('id', $value);
    }
}

像以前一样,现在在AppServiceProvider中注册它

    public function boot(): void
    {
        Webmixx::addPageModule(new PageSlideshowProvider());
    }

现在,当您构建一个PageTemplate并向其中添加一个ModuleItem时,您将看到一个名为数据提供者的新字段。

选择您刚刚构建的ModuleItem(它将以getModuleDisplayName函数中给出的名称显示)。

当您使用新的PageTemplate构建页面时,您将看到一个包含所有可用幻灯片的下拉元素。