sideapps / laravel-pages
为Laravel Eloquent模型提供的动态和静态页面类
1.1.2
2021-06-04 09:31 UTC
Requires
- php: ^7.4
- joedixon/laravel-translation: ^1.1
- laravel/framework: ^8.12
- spatie/laravel-translatable: ^4.6
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"