afzalsabbir/pagemanager

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

v3.0.11 2022-06-14 09:02 UTC

This package is auto-updated.

Last update: 2024-09-16 21:34:30 UTC


README

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

一个接口,允许您的管理员通过定义任何数量内容区域和任何数量内容类型的页面模板,添加和编辑Laravel 6、7、8或9网站的展示页面。使用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' => 'wysiwyg',
                        'placeholder' => trans('backpack::pagemanager.content_placeholder'),
                    ]);
    }

    private function about_us()
    {
        $this->crud->addField([
                        'name' => 'content',
                        'label' => trans('backpack::pagemanager.content'),
                        'type' => 'wysiwyg',
                        'placeholder' => trans('backpack::pagemanager.content_placeholder'),
                    ]);
    }
}
  1. 在您的终端中
composer require afzalsabbir/pagemanager
  1. 发布视图、迁移和PageTemplates特性
php artisan vendor:publish --provider="Backpack\PageManager\PageManagerServiceProvider"
  1. 运行迁移以拥有所需的数据库表
php artisan migrate
  1. [可选] 在resources/views/vendor/backpack/base/inc/sidebar.blade.phpmenu.blade.php中添加一个菜单项
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将使用它;

变更日志

请参阅CHANGELOG以了解最近有哪些变更。

测试

$ composer test

贡献

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

覆盖功能

如果您需要修改项目中的此功能

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

安全

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

致谢

许可证

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

雇佣我们

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

如果您正在寻找开发者/团队来帮助您在 Laravel 上构建管理面板,无需再寻找。您很难找到比这更有经验和热情的人。这就是我们 所做的事情联系我们 - 看看我们是否可以合作