bjuppa/laravel-blog

为您的Laravel项目添加博客功能

v1.8.3 2021-09-08 18:39 UTC

README

Build Status

此包是一个灵活的博客解决方案,您可以将其添加到您的Laravel应用中。

它从存储中获取博客条目并将其以常见的格式发布到互联网,以便人们和机器通过URL进行消费。

每个博客包括

  • 一个列出最新条目的索引页面
  • 每个博客条目的完整内容页面
  • 一个Atom订阅源

默认存储是Eloquent,但您可以根据需要编写自己的BlogEntryProvider。您可以查看src/Contracts中的文件,以快速了解该包处理的实体。

管理界面

此包提供任何用于编辑博客条目的管理界面。有一个单独的包可以可选安装,以提供用于编辑博客内容的路由。

另一个选项是在您的Laravel应用中创建编辑博客条目的机制。默认情况下,条目由Eloquent模型表示,因此对于Laravel开发者来说不应太难。

要求

您需要至少Laravel 5.6.8才能使用此包。包含的条目模型迁移需要一个支持json类型列的数据库连接。

用法

  1. 需要此包

    composer require bjuppa/laravel-blog

    此包将自动注册自身。

  2. 发布配置文件

    php artisan vendor:publish --provider="Bjuppa\LaravelBlog\BlogServiceProvider" --tag="blog-config"
  3. 编辑已发布的配置文件config/blog.php以设置您想要的博客及其选项。

    配置可以在以后更改,可以添加更多博客等。只需记住,在博客发布后,应尽可能保持永久链接和生成的条目ID不变,以避免破坏受众的源和链接。

    服务提供商处理所有配置博客的路由注册。您可以使用以下方法检查生成的哪些路由和路径:

    php artisan route:list
  4. 运行迁移来自动设置使用配置的博客条目提供者所需的任何表

    php artisan migrate
  5. (可选) 如果您想在数据库中创建默认博客条目,可以运行生成器

    php artisan db:seed --class="Bjuppa\LaravelBlog\Database\Seeds\DefaultBlogEntrySeeder"
  6. (可选) 如果您想使用包含的样式,首先将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文件

创建自己的样式

您可能想创建自己的样式来应用您个人的风格或品牌。在您的 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,可以将其设置为单个BlogwithEntryProvider()

要仅为Blog使用自定义条目模型,可以使用getEntryProvider()->withEntryModel(),只要条目提供者是Bjuppa\LaravelBlog\Eloquent\BlogEntryProvider

背景

在寻找将简单博客添加到现有Laravel应用程序的方法时,我发现许多包和一些完整的Laravel应用程序,但没有一个能做我想做的事情。

提供高度可配置的博客插件,可以集成到任何Laravel应用程序中.

Povilas Korop在我遇到同样的需求之前大约半年写了一篇关于它的博客文章。这个包是我尝试为自己创建几个博客,而不必求助于WordPress,并希望为其他开发者提供一些有用的东西。

我的需求是

  • 一个或多个博客必须在同一Laravel应用程序内可配置
  • 安装包后的简单配置(理想情况下,只需运行迁移即可,如果只有一个标准博客)
  • 发布Atom源
  • 提供默认的Eloquent模型用于帖子/条目,但使其对每个博客可替换
  • 可配置的URL以避免与现有应用程序路由冲突
  • 灵活且可替换的默认视图
  • 命名路由,以便从Laravel应用程序的其余部分轻松链接
  • 可选的仪表板,这样您就可以编写或使用自己的管理页面,如果您已经有了仪表板