backpack/pagemanager

使用页面模板和Backpack\CRUD为Laravel的展示网站创建管理面板。

3.3.1 2024-09-05 09:23 UTC

README

Latest Version on Packagist Software License Build Status Coverage Status Quality Score Total Downloads

一个接口,允许您的管理员通过定义任意数量的内容区域和任意数量的内容类型,添加和编辑Laravel 6, 7, 8, 9或10网站的展示页面。使用Laravel Backpack

Backpack PageManager edit page

安全更新和重大更改

订阅Backpack通讯,以便了解有关任何安全更新、重大更改或新功能的最新消息。我们每1-2个月发送一次电子邮件。

安装

  1. app/PageTemplates.php中添加一个文件来定义您的页面模板
<?php

namespace App;

trait PageTemplates
{
    /*
    |--------------------------------------------------------------------------
    | Page Templates for Backpack\PageManager
    |--------------------------------------------------------------------------
    |
    | Each page template has its own method, that define what fields should show up using the Backpack\CRUD API.
    | Use snake_case for naming and PageManager will make sure it looks pretty in the create/update form
    | template dropdown.
    |
    | Any fields defined here will show up after the standard page fields:
    | - select template
    | - page name (only seen by admins)
    | - page title
    | - page slug
    */

    private function services()
    {
        $this->crud->addField([   // CustomHTML
                        'name' => 'metas_separator',
                        'type' => 'custom_html',
                        'value' => '<br><h2>'.trans('backpack::pagemanager.metas').'</h2><hr>',
                    ]);
        $this->crud->addField([
                        'name' => 'meta_title',
                        'label' => trans('backpack::pagemanager.meta_title'),
                        'fake' => true,
                        'store_in' => 'extras',
                    ]);
        $this->crud->addField([
                        'name' => 'meta_description',
                        'label' => trans('backpack::pagemanager.meta_description'),
                        'fake' => true,
                        'store_in' => 'extras',
                    ]);
        $this->crud->addField([
                        'name' => 'meta_keywords',
                        'type' => 'textarea',
                        'label' => trans('backpack::pagemanager.meta_keywords'),
                        'fake' => true,
                        'store_in' => 'extras',
                    ]);
        $this->crud->addField([   // CustomHTML
                        'name' => 'content_separator',
                        'type' => 'custom_html',
                        'value' => '<br><h2>'.trans('backpack::pagemanager.content').'</h2><hr>',
                    ]);
        $this->crud->addField([
                        'name' => 'content',
                        'label' => trans('backpack::pagemanager.content'),
                        'type' => 'summernote',
                        'placeholder' => trans('backpack::pagemanager.content_placeholder'),
                    ]);
    }

    private function about_us()
    {
        $this->crud->addField([
                        'name' => 'content',
                        'label' => trans('backpack::pagemanager.content'),
                        'type' => 'summernote',
                        'placeholder' => trans('backpack::pagemanager.content_placeholder'),
                    ]);
    }
}
  1. 在您的终端中
composer require backpack/pagemanager
  1. 发布视图、迁移和PageTemplates特质
php artisan vendor:publish --provider="Backpack\PageManager\PageManagerServiceProvider"
  1. 运行迁移以获取所需的数据库表
php artisan migrate
  1. [可选] 添加一个菜单项
# For Backpack v6
php artisan backpack:add-menu-content "<x-backpack::menu-item title='Pages' icon='la la-file-o' :link=\"backpack_url('page')\" />"
# For Backpack v5 or v4
php artisan backpack:add-sidebar-content "<li class='nav-item'><a class='nav-link' href='{{ backpack_url('page') }}'><i class='nav-icon la la-file-o'></i> <span>Pages</span></a></li>"

用法

  1. 转到yourapp/admin/page并查看其工作方式。
  2. 使用Backpack\CRUD API在app/PageTemplates.php中定义您自己的模板。

前端示例

未提供前端(Backpack只负责管理面板),但对于大多数项目,这段前端代码就足够了

(1) 在路由文件末尾创建一个通配符路由

/** CATCH-ALL ROUTE for Backpack/PageManager - needs to be at the end of your routes.php file  **/
Route::get('{page}/{subs?}', ['uses' => '\App\Http\Controllers\PageController@index'])
    ->where(['page' => '^(((?=(?!admin))(?=(?!\/)).))*$', 'subs' => '.*']);

(2) 创建app\Http\Controllers\PageController.php,实际显示页面。

<?php

namespace App\Http\Controllers;

use Backpack\PageManager\app\Models\Page;
use App\Http\Controllers\Controller;

class PageController extends Controller
{
    public function index($slug, $subs = null)
    {
        $page = Page::findBySlug($slug);

        if (!$page)
        {
            abort(404, 'Please go back to our <a href="'.url('').'">homepage</a>.');
        }

        $this->data['title'] = $page->title;
        $this->data['page'] = $page->withFakes();

        return view('pages.'.$page->template, $this->data);
    }
}

(3) 为这些模板创建视图(这些页面的外观 - HTML CSS JS),并将它们放置在resources/views/pages/目录中。在这些blade文件中,您可以使用$page变量。那里存储了所有页面内容。对于更复杂的页面,您还可以在页面模板中使用虚拟字段。您也可以在$page变量中找到这些属性。

注意:如果您发现自己需要在多个页面上加载的视图中发送额外数据,您应该考虑使用视图组合器

扩展

如果您需要修改控制器、模型或请求,您应该

  • 确保config/backpack/pagemanager.php已发布;如果没有,请使用php artisan vendor:publish --provider="Backpack\PageManager\PageManagerServiceProvider"发布它;
  • 创建一个新的控制器/模型,它扩展了包中的模型;
  • 在pagemanager.php配置文件中将控制器或模型输入,这将CRUD使用;

可选:使用'store_in'和'fake'键的字段突变器

虚拟字段不会触发单独的突变器,它们会触发“虚拟列”突变器。例如,请勿定义setImageAttribute()突变器,而是定义setExtrasAttribute()突变器。您将有$value

变更日志

请参阅CHANGELOG以获取有关最近更改的更多信息。

测试

$ composer test

贡献

请参阅CONTRIBUTINGCONDUCT以获取详细信息。

覆盖功能

如果您需要修改项目中此功能的工作方式

  • 创建一个routes/backpack/pagemanager.php文件;该包将识别出这一点,并加载您的路由文件,而不是包中的路由文件;
  • 创建扩展包中提供的控制器/模型的控制器/模型,并在您的新路由文件中使用它们;
  • 修改新控制器/模型中的任何内容;

安全

如果您发现任何与安全相关的问题,请通过电子邮件hello@backpackforlaravel.com联系,而不是使用问题跟踪器。

鸣谢

许可证

Backpack免费供非商业用途使用,商业用途为69 EUR/项目。请参阅许可证文件backpackforlaravel.com以获取更多信息。

雇佣我们

我们在Laravel上创建、打磨和维护管理面板已经超过10,000小时。我们开发了电子商务、电子学习、ERP系统、社交网络、支付网关等等。我们在管理面板上的工作如此之多,以至于我们创造了其领域中最受欢迎的软件之一——仅仅是从我们项目中的重复性内容开始公开。

如果您正在寻找一个开发者/团队来帮助您在Laravel上构建管理面板,那就没有必要再寻找了。您将很难找到比我们有更多经验和对这项工作更有热情的人。这就是我们所做的联系我们 - 让我们看看是否可以合作