angel/core

该软件包的最新版本(v1.0.3)没有可用的许可证信息。

Angel 是一个基于 Laravel 构建的 CMS。

v1.0.3 2015-07-22 01:16 UTC

This package is not auto-updated.

Last update: 2024-09-14 15:11:18 UTC


README

Angel 是一个基于 Laravel 构建的 CMS。您可以通过 Packagist 获取它。

更新 2016年8月5日:Angel 的 Laravel 5 版本正在 此处进行

更新 2015年3月9日:只想提醒大家,这个项目仍在非常活跃地使用和部署中,并且经过几个大型应用程序的充分测试。与 Stripe 一起工作的 电子商务模块 也经过充分测试并使用。

目录

演示

Demo Screenshot

安装

Installation Screenshot

Angel CMS 是在 Laravel 4.1 上构建的。

使用以下命令安装 Laravel 4.1:

composer create-project laravel/laravel --prefer-dist {project-name} 4.1.*

angel/core 软件包要求添加到您的 composer.json 文件中,如下所示:

"require": {
    "laravel/framework": "4.1.*",
    "angel/core": "1.0.*"
},

运行 composer update 命令以安装软件包。

安装软件包后,打开 app/config/app.php 并将以下内容添加到您的 providers 数组中:

'Angel\Core\CoreServiceProvider'

在此处,将 debug 设置为 true。

删除

  • app/routes.php 中的所有默认路由。
  • app/filters.php 中的所有默认过滤器(除了 csrf 过滤器)。
  • app/controllers 中的所有控制器(除了 BaseController.php)。
  • app/models 中的所有模型,包括 User.php。您现在可以替换为 .gitkeep 文件,以确保保留 app/models 目录。

创建并配置数据库,以便我们可以运行迁移。

最后,运行以下 artisan 命令:

php artisan dump-autoload                 # Dump a load
php artisan asset:publish                 # Publish the assets
php artisan config:publish angel/core     # Publish the config
php artisan migrate --package=angel/core  # Run the migrations
mkdir -p public/uploads/kcfinder          # Create the KCFinder uploads folder
touch public/uploads/kcfinder/.gitkeep    # Keep the folder

自定义

Customize Screenshot

核心中的每个类都很容易扩展。

让我们从扩展 PageController 开始。

在扩展此控制器时,您可以为管理面板中创建的每个页面 URI 创建一个方法。

创建以下文件作为 app/controllers/PageController.php

<?php

class PageController extends \Angel\Core\PageController {

	public function home()
	{
		return 'You are home!';
	}

}

删除旧绑定并将新类绑定在 routes.php 文件的顶部

App::offsetUnset('PageController');
App::singleton('PageController', function() {
	return new \PageController;
});

运行 composer dump-autoload

现在,您应该能够导航到 http://yoursite.com/home 并看到: 您在主页!

配置

查看您刚才发布的 app/config/packages/angel/core/config.php 配置文件。

管理 URL

默认情况下,以下配置已设置

'admin_prefix' => 'admin'

这允许您通过 URL http://yoursite.com/admin 访问管理面板。

为了安全起见,您可能希望更改此前缀。黑客往往会针对此类 URL 的网站。

管理菜单

下一节是 'menu' 数组。当您安装模块时,您将它们的索引添加到此数组中,以便它们出现在管理面板的菜单中。

可链接的菜单模型

某些模块附带一些模型,您可以在 Menu 模块中创建指向它们的菜单链接。此数组在 Menu 模块的索引上使用的 Menu Link Creation Wizard 中使用。

使用别名

通常,您会希望让用户能够通过名称而不是通过 ID 在 URL 中访问产品、博客文章、新闻文章等。

例如: http://yoursite.com/products/big-orange-ball

要实现这一点,您需要将模型的一个列/属性“sluggify”。

如果您正在扩展 AngelModel,这就像在您的表中添加一个具有唯一索引的 slug 列一样简单。

$table->string('slug')->unique();

然后设置您的模型中的 slugSeed 属性为生成 slug 的列名。

protected $slugSeed = 'name';

现在,当模型创建或编辑时,将自动从模型的 name 列生成 slugs。(您同样可以使用 title 列或任何其他合适的来源。)

在添加或编辑一些项目后,您可以使用生成的 slugs。

例如

// app/routes.php
Route::get('products/{slug}', 'ProductController@view');

// app/controllers/ProductController.php
class ProductController extends \Angel\Core\AngelController {

	public function view($slug)
	{
		$Product = App::make('Product');
		$this->data['product'] = $Product::where('slug', $slug)->firstOrFail();
		return View::make('products.view', $this->data);
	}
	
}

手动创建唯一的 slugs

// Adding a new item:
$article        = new NewsArticle;
$article->title = Input::get('title');
$article->slug  = slug($article, 'title');
$article->save();

// Editing an item:
$article        = Article::find(1);
$article->title = Input::get('title');
$article->slug  = slug($article, 'title');
$article->save();

将字符串转换为 slug

$slug = sluggify('String to sluggify!'); // Returns 'string-to-sluggify'

开发模块

这里是放置开发模块代码片段的地方。

可重排序的索引

假设我们正在开发一个 persons 模块包。

首先,确保 Person 扩展 \Angel\Core\AngelModel 并具有属性 protected $reorderable = true;

// workbench/persons/src/views/admin/persons/index.blade.php
@section('js')
    {{ HTML::script('packages/angel/core/js/jquery/jquery-ui.min.js') }}
    <script>
    	$(function() {
            $('tbody').sortable(sortObj);
    	});
    </script>
@stop
@section('content')
    <table class="table table-striped">
        <tbody data-url="persons/order"><!-- This data-url is appended to the admin url and posted. -->
            @foreach ($persons as $person)
                <tr data-id="{{ $person->id }}">
                    {{ Form::hidden(null, $person->order, array('class'=>'orderInput')) }}
                    <button type="button" class="btn btn-xs btn-default handle">
                        <span class="glyphicon glyphicon-resize-vertical"></span>
                    </button>
                </tr>
            @endforeach
        </tbody>
    </table>
@stop

// workbench/persons/src/routes.php
Route::group(array('prefix' => admin_uri('persons'), 'before' => 'admin'), function() {
	Route::post('order', 'AdminPersonsController@order');
});