fbf/laravel-blog

为网站添加简单博客的Laravel 4包

v0.7.0 2014-05-17 16:21 UTC

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来过滤帖子。

需要评论吗?

请参阅https://github.com/FbF/Laravel-Comments