fbf / laravel-blog
为网站添加简单博客的Laravel 4包
Requires
- php: >=5.3.0
- cviebrock/eloquent-sluggable: 1.0.*
- fzaninotto/faker: 1.3.*
- illuminate/support: 4.*
- thujohn/rss: dev-master
This package is not auto-updated.
Last update: 2024-09-24 02:34:05 UTC
README
为网站添加简单博客的Laravel 4包
功能
- 分页索引视图,可配置每页结果
- 按年/月存档过滤,包括可包含在您自己的视图中的存档部分(需要MySQL)
- 草稿/批准状态和发布日期字段,用于审批和安排发布帖子
- 可配置URL,例如 /blog 或 /news/yyyy/mm 或 /articles/<文章缩略名>
- 标题、缩略名、主图像或YouTube视频ID、摘要、内容、链接文本和url、是否固定、发布日期、状态、元描述和关键词、是否在RSS中?的字段
- Faker种子,用于将大量测试数据填充到博客中
- 用于与FrozenNode的Administrator包一起使用的管理员配置文件
- 捆绑迁移,用于构建数据库模式
- 可扩展以添加类别或标签关系,并按它们过滤,见下文
安装
将以下内容添加到您的composer.json文件中(建议将"dev-master"更改为最新版本)
"fbf/laravel-blog": "dev-master"
运行
composer update
将以下内容添加到app/config/app.php
'Fbf\LaravelBlog\LaravelBlogServiceProvider'
运行包迁移
php artisan migrate --package=fbf/laravel-blog
发布配置
php artisan config:publish fbf/laravel-blog
可选:调整应用程序中的许多配置文件中的设置
可选:将管理员配置文件(src/config/administrator/posts.php)复制到您的管理员模型配置目录。
创建您在配置中指定的相关图像上传目录,例如
public/uploads/packages/fbf/laravel-blog/main_image/original
public/uploads/packages/fbf/laravel-blog/main_image/thumbnail
public/uploads/packages/fbf/laravel-blog/main_image/resized
Faker种子
该包附带一个种子,可以填充大量示例帖子。在配置文件中为种子提供了一些配置选项。要运行它
php artisan db:seed --class="Fbf\LaravelBlog\PostTableFakeSeeder"
配置
查看配置目录中的文件中的许多配置选项
管理员
您可以使用出色的Laravel Administrator包(由FrozenNode提供)来管理您的博客。
http://administrator.frozennode.com/docs/installation
在包的src/config/administrator目录中提供了用于Post模型(posts.php)的现成模型配置文件,您可以将它复制到app/config/administrator目录(或管理员配置文件中设置的model_config_path)。
用法
该包应该可以直接使用(如果您有一个主blade布局文件,因为现成的视图扩展了它),但如果您想在页面上添加其他内容,例如自己的页眉、徽标、导航、侧边栏等,您将需要覆盖提供的视图。
该包的视图声明了几个您可能在app/views/layouts/master.blade.php
文件中yield
的部分,例如
<!DOCTYPE html> <html> <head> <title>@yield('title')</title> <meta name="description" content="@yield('meta_description')"> <meta name="keywords" content="@yield('meta_keywords')"> </head> <body> <div class="content"> @yield('content') </div> </body> </html>
该包的视图实际上非常简单,大部分的展示都是在部分中完成的。这是故意的,这样您就可以在自己的应用程序中覆盖包的视图,包括您自己的chrome、导航和侧边栏等,同时您也可以使用提供的部分,如果您想的话。
要覆盖您自己应用程序中的任何视图,只需创建以下目录,将包中的文件复制到其中,然后进行修改
app/views/packages/fbf/laravel-blog/posts
app/views/packages/fbf/laravel-blog/partials
扩展包
这可以用于将Post模型与Category模型关联起来,允许按类别过滤,或将Post模型与User模型关联起来,为帖子添加作者,或者只是简单地覆盖捆绑的Post模型的功能。
基本方法
(详见以下示例以获取更多信息。)
要覆盖包中的Post
模型,请在您的应用目录的app/models
中创建一个扩展包模型的模型。
最后,更新IoC容器以注入您的模型实例到Fbf\LaravelBlog\PostsController
,而不是使用包的模型,例如在app/start/global.php
中。
App::bind('Fbf\LaravelBlog\PostsController', function() { return new Fbf\LaravelBlog\PostsController(new Post); });
为了添加关系并按该关系过滤,这涉及到扩展Post
模型以添加您想要的关联方法到应用中的另一个现有模型,并覆盖Post::indexByRelationship()
方法。
此外,您还需要在Post模型和关联模型之间创建一个链接。根据您是要进行belongsTo
关系还是belongsToMany
关系,这将涉及到向fbf_posts
表添加字段,例如category_id
,或者创建一个多对多连接表,将fbf_posts
表与相关模型表连接起来,例如post_tag
。因此,创建迁移并运行它。
如果您正在使用FrozenNode的Administrator包,请更新配置文件app/config/administrator/posts.php
以使用您的新模型,例如Post
,而不是Fbf\LaravelBlog\Post
,并在edit_fields
部分添加字段以允许您将Post关联到相关模型。
最后,您需要启用按关系过滤的路由。在包的路由配置文件src/config/routes.php
中,将'relationship_uri_prefix'
的值从false更改为您希望在URL中使用的字符串,在基本部分之后,在'关系标识符'之前。例如,如果您希望URL为http://domain.com/posts/tagged/my-tag
,则将'relationship_uri_prefix'
的值更改为'tagged'
。
示例:Post属于多个类别(层次结构)
这是一个示例模型类,演示了如何将多对多关系添加到Post模型,并允许按相关模型中的项目过滤帖子。此示例将Post模型与fbf/laravel-categories
包中的Category模型相关联,该模型具有层次结构,因此这不仅允许您过滤分配给所选类别的帖子,还可以过滤它们通过所选类别及其子类别。
要按原样实现,请在app/models/Post.php
中创建一个文件,并将此代码复制到其中。
<?php use Fbf\LaravelCategories\Category; class Post extends Fbf\LaravelBlog\Post { /** * Defines the belongsToMany relationship between Post and Category * * @return mixed */ public function categories() { return $this->belongsToMany('Fbf\LaravelCategories\Category', 'category_post'); } /** * Query scope to filter posts by a given category * * @param $query * @param $categorySlug * @throws InvalidArgumentException * @return mixed */ public function scopeByRelationship($query, $categorySlug) { $category = Category::live() ->where('slug', '=', $categorySlug) ->first(); if (!$category) { throw new InvalidArgumentException('Category not found'); } return $query->join('category_post', $this->getTable().'.id', '=', 'category_post.post_id') ->join('fbf_categories', 'category_post.category_id', '=', 'fbf_categories.id') ->whereBetween('fbf_categories.lft', array($category->lft, $category->rgt)) ->groupBy($this->getTable().'.id'); } }
以下是链接帖子到类别的示例迁移。创建一个名为2014_02_25_154025_link_posts_categories.php
的迁移,并将此代码粘贴到其中,然后运行迁移。
<?php use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class LinkPostsCategories extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('category_post', function(Blueprint $table) { $table->integer('category_id'); $table->integer('post_id'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop('category_post'); } }
如果您正在使用FrozenNode的Administrator包,请更新配置文件app/config/administrator/posts.php
以使用您的新模型,例如Post
,而不是Fbf\LaravelBlog\Post
,并在edit_fields
部分添加字段以允许您将Post关联到相关模型。
/** * The class name of the Eloquent model that this config represents * * @type string */ 'model' => 'Post',
...
'categories' => array( 'title' => 'Categories', 'type' => 'relationship', 'name_field' => 'path', 'options_sort_field' => 'name', ),
如上所述,更新IoC容器以将您的模型实例注入到Fbf\LaravelBlog\PostsController
,而不是使用包的模型,例如在app/start/global.php
中。
App::bind('Fbf\LaravelBlog\PostsController', function() { return new Fbf\LaravelBlog\PostsController(new Post); });
最后,您需要启用'按关系过滤'路由。在包的路由配置文件src/config/routes.php
中,将'relationship_uri_prefix'
的值从false更改为'category'
。
创建一些类别并将一些帖子分配给它们后,您可以通过访问类似http://domain.com/blog/category/my-category
的URL来过滤帖子。