angel / core
Angel 是一个基于 Laravel 构建的 CMS。
Requires
- php: >=5.3.0
- illuminate/support: 4.1.*
- mobiledetect/mobiledetectlib: 2.8.3
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 一起工作的 电子商务模块 也经过充分测试并使用。
目录
演示
安装
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
自定义
核心中的每个类都很容易扩展。
让我们从扩展 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'); });