sjorsvanleeuwen / webmixx
拥有内容构建工具功能的出色CMS
Requires
- php: ^7.4|^8.0
- illuminate/collections: ^8.0
- illuminate/database: ^8.0
- illuminate/support: ^8.0
Requires (Dev)
- orchestra/testbench: ^4.0 || ^6.0
- phpunit/phpunit: ^8.0 || ^9.0
- dev-master
- 0.6
- 0.5
- 0.4
- 0.3
- v0.2
- v0.1
- dev-dependabot/npm_and_yarn/sass-1.58.3
- dev-dependabot/npm_and_yarn/json5-1.0.2
- dev-dependabot/npm_and_yarn/bootstrap-5.2.3
- dev-dependabot/npm_and_yarn/loader-utils-1.4.2
- dev-dependabot/npm_and_yarn/minimatch-3.1.2
- dev-dependabot/npm_and_yarn/sass-loader-13.2.0
- dev-dependabot/npm_and_yarn/vue-template-compiler-2.7.14
- dev-dependabot/npm_and_yarn/ckeditor5-classic-plus-35.0.1
- dev-dependabot/npm_and_yarn/terser-4.8.1
This package is auto-updated.
Last update: 2024-09-20 04:39:05 UTC
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构建页面时,您将看到一个包含所有可用幻灯片的下拉元素。