bjuppa / laravel-blog
为您的Laravel项目添加博客功能
Requires
- php: ^7.3 || ^8.0
- bjuppa/metatagbag: ^1.0
- illuminate/database: 5.6.*|| 5.7.* || 5.8.* || ^6 || ^7 || ^8
- illuminate/http: 5.6.* || 5.7.* || 5.8.* || ^6 || ^7 || ^8
- illuminate/routing: 5.6.* || 5.7.* || 5.8.* || ^6 || ^7 || ^8
- illuminate/support: ~5.6.8 || 5.7.* || 5.8.* || ^6 || ^7 || ^8
- illuminate/view: 5.6.* || 5.7.* || 5.8.* || ^6 || ^7 || ^8
- league/commonmark: ^1.3 || ^2.0
- spatie/laravel-sluggable: ^2.1
Requires (Dev)
- andrefigueira/blog-article-faker: dev-replace-fzaninotto
- laravel/framework: >=5.6.25
- laravel/legacy-factories: *
- mockery/mockery: ^1.0
- orchestra/testbench: ~3.6.7 || ~3.7.8 || ~3.8.6 || ^4.8 || ^5.2 || ^6.0
- phpunit/phpunit: >=7.5
- squizlabs/php_codesniffer: ^3.3
Suggests
- bjuppa/laravel-blog-admin: An optional admin interface for the Eloquent blogs configured in bjuppa/laravel-blog
README
此包是一个灵活的博客解决方案,您可以将其添加到您的Laravel应用中。
它从存储中获取博客条目并将其以常见的格式发布到互联网,以便人们和机器通过URL进行消费。
每个博客包括
- 一个列出最新条目的索引页面
- 每个博客条目的完整内容页面
- 一个Atom订阅源
默认存储是Eloquent,但您可以根据需要编写自己的BlogEntryProvider
。您可以查看src/Contracts
中的文件,以快速了解该包处理的实体。
管理界面
此包不提供任何用于编辑博客条目的管理界面。有一个单独的包可以可选安装,以提供用于编辑博客内容的路由。
另一个选项是在您的Laravel应用中创建编辑博客条目的机制。默认情况下,条目由Eloquent模型表示,因此对于Laravel开发者来说不应太难。
要求
您需要至少Laravel 5.6.8才能使用此包。包含的条目模型和迁移需要一个支持json类型列的数据库连接。
用法
-
需要此包
composer require bjuppa/laravel-blog
此包将自动注册自身。
-
发布配置文件
php artisan vendor:publish --provider="Bjuppa\LaravelBlog\BlogServiceProvider" --tag="blog-config"
-
编辑已发布的配置文件
config/blog.php
以设置您想要的博客及其选项。配置可以在以后更改,可以添加更多博客等。只需记住,在博客发布后,应尽可能保持永久链接和生成的条目ID不变,以避免破坏受众的源和链接。
服务提供商处理所有配置博客的路由注册。您可以使用以下方法检查生成的哪些路由和路径:
php artisan route:list
-
运行迁移来自动设置使用配置的博客条目提供者所需的任何表
php artisan migrate
-
(可选) 如果您想在数据库中创建默认博客条目,可以运行生成器
php artisan db:seed --class="Bjuppa\LaravelBlog\Database\Seeds\DefaultBlogEntrySeeder"
-
(可选) 如果您想使用包含的样式,首先将CSS发布到您的公共目录
php artisan vendor:publish --provider="Bjuppa\LaravelBlog\BlogServiceProvider" --tag="blog-styling"
...然后编辑
config/blog.php
并将'css/blog.css'
添加到stylesheets
配置。
现在在浏览器中访问您的新博客!默认URL路径是/blog
,除非您已更改配置。
编辑博客文章
以您喜欢的方式在数据库中添加和编辑博客条目。您可以创建自己的管理界面,直接写入数据库,或者或许可以使用 php artisan tinker
... 😉 默认使用的模型是 Bjuppa\LaravelBlog\Eloquent\BlogEntry
。
存在一个提供管理界面的独立包。
用户权限
所有已发布的条目在其URL上对任何人都是公开的 查看。
要启用用户预览未发布的条目,首先创建一个Laravel 权限门 或 策略(针对您的条目模型),然后在 config/blog.php
中配置 preview_ability
以匹配。
在您的 App\Providers\AuthServiceProvider
中定义的权限门可能如下所示
Gate::define('preview blog entries', function ($user) { // Check for your own admin user model, or some other criteria! return $user instanceof \App\AdminUser; });
美化前端
包含的CSS文件是使用 Kingdom CSS 构建的,它是一个CSS框架,由...本人创建。
默认样式是为了给标准HTML元素添加一些一致的样式,因此使用它的博客不会看起来“设计感”,尽管它有一些有偏见的布局和间距(尤其是在大屏幕上)。可以说它采用了一种 “粗野主义” 方法,它甚至使用了浏览器默认的字体。
使用包含的实用工具类
博客作者可能希望在条目内部的一些元素上添加一些特殊样式。一些类对条目内容第一级内的元素很有用
-
.full-bleed
将元素扩展到覆盖整个视口的宽度 - 对于图像来说很棒。 -
.start-margin-bleed
和.end-margin-bleed
将元素扩展到左侧或右侧边距。 -
.float-right
和.float-left
将元素浮动在单列视图中。 -
.span-content
将元素在屏幕足够大以进行两列视图时覆盖两个列 - 对于需要更多空间但不是全宽的元素来说很好。 -
.full-column-bleed
与.full-bleed
类似,但不会覆盖多列。 -
.blog-related-content
将元素移动到第二列的第一行 - 对于<aside>
元素和其他相关内容但不需要严格遵循流程的内容来说很棒。(广告部分是一个例子,它进入第二列的第一个空白槽)
如果相关内容需要覆盖第二列的多行,您可以添加实用工具类
.grid-row-span-2
、.grid-row-span-3
等(来自Kingdom)
包含的CSS包含了许多Kingdom的实用工具类,它们太多而无法在此处记录,请参阅原始的SASS文件
_colors.scss
_borders.scss
_sizing.scss
_spacing.scss
layout/_lists.scss
layout/_screenreaders.scss
layout/_floats.scss
layout/_grid.scss
text/_whitespace-wrapping.scss
创建自己的样式
您可能想创建自己的样式来应用您个人的风格或品牌。在您的 config/blog.php
中的 stylesheets
配置是您可以将任何CSS文件包含到您的博客中的地方。
您可以添加一个文件列表,以便将此包的CSS文件与包含您自己样式的额外CSS文件合并。或者,您可以使用Laravel Mix将它们合并为单个文件。
如果您喜欢冒险,可以引入Kingdom npm
包并在您的构建中使用它。您可以从中汲取灵感,甚至包括此包中的SASS文件。
Blade模板
该包将其所有Blade视图存储在resources/views
中,并运行此命令将它们全部发布到您的应用程序的resources/views/vendor/blog
中,以便您可以编辑它们。
php artisan vendor:publish --provider="Bjuppa\LaravelBlog\BlogServiceProvider" --tag="blog-views"
...然而,您可能只需要更改一些文件中的几个部分。我建议您只提交实际更改的文件到版本控制,并将未更改的其余已发布文件从您的应用程序中删除。如果vendor
视图目录中找不到任何文件,Blade将回退到使用包的视图。
本地化
此包包含英语翻译字符串,可以使用此命令发布到您的应用程序:
php artisan vendor:publish --provider="Bjuppa\LaravelBlog\BlogServiceProvider" --tag="blog-translations"
如果您没有为新的语言添加翻译,您可能不需要所有文件,甚至不需要文件中的所有字符串。考虑仅覆盖您想要的,如Laravel文档中所述。
自定义条目提供者和模型
您可以在任何Laravel服务提供者的boot()
方法中从BlogRegistry
中提取任何配置的Blog
,并超越仅使用配置文件所能做到的。
要使用自定义BlogEntryProvider
,可以将其设置为单个Blog
的withEntryProvider()
。
要仅为Blog
使用自定义条目模型,可以使用getEntryProvider()->withEntryModel()
,只要条目提供者是Bjuppa\LaravelBlog\Eloquent\BlogEntryProvider
。
背景
在寻找将简单博客添加到现有Laravel应用程序的方法时,我发现许多包和一些完整的Laravel应用程序,但没有一个能做我想做的事情。
提供高度可配置的博客插件,可以集成到任何Laravel应用程序中.
Povilas Korop在我遇到同样的需求之前大约半年写了一篇关于它的博客文章。这个包是我尝试为自己创建几个博客,而不必求助于WordPress,并希望为其他开发者提供一些有用的东西。
我的需求是
- 一个或多个博客必须在同一Laravel应用程序内可配置
- 安装包后的简单配置(理想情况下,只需运行迁移即可,如果只有一个标准博客)
- 发布Atom源
- 提供默认的Eloquent模型用于帖子/条目,但使其对每个博客可替换
- 可配置的URL以避免与现有应用程序路由冲突
- 灵活且可替换的默认视图
- 命名路由,以便从Laravel应用程序的其余部分轻松链接
- 可选的仪表板,这样您就可以编写或使用自己的管理页面,如果您已经有了仪表板