sideapps/laravel-pages

为Laravel Eloquent模型提供的动态和静态页面类

1.1.2 2021-06-04 09:31 UTC

This package is auto-updated.

Last update: 2024-09-04 16:55:10 UTC


README

Laravel pages是一个Laravel的包,允许您使用PHP类表示视图

此包提供两种类型的类

  • 静态(如主页)
  • 动态(Eloquent模型)

与joedixon/laravel-translation和spatie/laravel-translatable兼容

安装

composer require sideapps/laravel-pages

"require": {
    "sideapps/laravel-pages": "^1.0.4"
},

用法

静态页面

php artisan page:static TestStaticPage
namespace App\Pages;

use Sideapps\LaravelPages\Breadcrumb\Breadcrumb;
use Sideapps\LaravelPages\Pages\StaticPage;
use Sideapps\LaravelPages\Pages\Page;

class TestStaticPage extends StaticPage implements Page {

    protected static string $translation_key = 'test_page';

    protected static string $route = 'test';

    protected static string $view = 'static.test';

    public function getBreadcrumb():?Breadcrumb {
        return new Breadcrumb([
            $this->getBreadcrumbItem(false) // set false for not clickable anchor
        ]);
    }

}
class StaticPageController extends Controller {

    private CreatePageFactory $createPageFactory;

    public function __construct(CreatePageFactory $createPageFactory) {
        $this->createPageFactory = $createPageFactory;
    }

    public function test() {
        $page = $this->createPageFactory->getPage(TestStaticPage::class);
        return $page->render();
    }

    ...

}

您必须为您的页面创建翻译文件并设置以下属性(可在配置文件或每个页面类中进行编辑)

  • meta_title
  • meta_description
  • fil_ariane
  • titre_h1

动态页面

php artisan page:dynamic PostPage
namespace App\Pages;

use Sideapps\LaravelPages\Breadcrumb\Breadcrumb;
use Sideapps\LaravelPages\Pages\DynamicPage;
use Sideapps\LaravelPages\Pages\Page;

class PostPage extends DynamicPage implements Page {

    protected static string $translation_key = 'post_page';

    protected static string $route = 'posts.show';

    protected static string $view = 'posts.show';

    public function routeParams():array {
        return [
            'slug' // Same as 'slug' => 'slug' (get $this->model->slug value)
            'slugBis' => 'slug' // (get $this->model->slug value) for slubBis route parameter
            'slugBisBis' => function() {return $this->model->slug;} // Specify value with closure
        ];
    }

    public function getBreadcrumb():?Breadcrumb {
        return new Breadcrumb([
            $this->createPageFactory->getPage(HomePage::class)->getBreadcrumbItem(),
            $this->getBreadcrumbItem(false) // set false for not clickable anchor
        ]);
    }

}
class Post extends Model implements Pageable {

    use HasTranslations;

    public array $translatable = [
        'meta_title', 'meta_description', 'title', 'html_content', 'slug'
    ];
 
    public function getPage():Page {
        return CreatePageFactory::make()->getPage(PostPage::class, $this);
    }

}
class PostController extends Controller {
    
    ...

    public function show(string $locale, string $slug) {
        $post = $this->postRepository->findBySlug($slug);
        $page = $post->getPage();
        return $page->render(compact($post));
    }

}

您的Eloquent模型必须实现Pageable接口并具有以下属性

  • meta_title
  • meta_description
  • breadcrumb
  • title

全局

现在您可以在所有blade视图中使用$page变量。您还可以在布局中使用它,例如

<!doctype html>
<html lang="{{ $page->getLangAttribute() }}">

<head>
    <title>{{ $page->getMetaTitle() }} - Site Name</title>
    <meta name="description" content="{{ $page->getMetaDescription() }}">
    {!! $page->generateMetaIndex() !!}
    {!! $page->generateAlternateLinks() !!}
</head>

<body>
    {!! $page->generateSwitchLanguageLinks() !!}
    {!! $page->generateBreadcrumb() !!}
    @yield('content')
</body>

</html>

选项

不索引,不跟随

protected static bool $metaIndex = false;

将此行添加到您的页面类中

视图中可用的方法

获取翻译
{{ $page->trans('paragraph1') }}
获取lang属性
{{ $page->getLangAttribute() }}
获取meta-title
{{ $page->getMetaTitle() }}
获取meta-description
{{ $page->getMetaDescription() }}
生成不索引meta(如果页面不索引,则生成meta noindex, nofollow)
{{ $page->generateMetaIndex() }}
生成替代链接
{{ $page->generateAlternateLinks() }}
生成切换语言链接
{{ $page->generateSwitchLanguageLinks() }}
生成面包屑
{{ $page->generateBreadcrumb() }}

发布配置和视图文件

php artisan vendor:publish --provider="Sideapps\LaravelPages\LaravelPagesServiceProvider"