bpez/infuse

Infuse 是一个用于生成管理风格界面的 Laravel 管理包

安装数: 5,259

依赖者: 0

建议者: 0

安全: 0

星星: 2

关注者: 1

分支: 0

开放问题: 0

语言:CSS


README

Latest Stable Version Total Downloads Latest Unstable Version License

设置

步骤 1: 将 laravel5 路径仓库添加到 toddish/verify 包

"repositories": [
 {
      "type": "vcs",
      "url": "https://github.com/industrious-mouse/Verify-L4"
  }
],

步骤 2: 通过 composer 安装

> composer require bpez/infuse:5.*

步骤 3: 添加 ServiceProvider

// config/app.php
'providers' => [
    ...
    'Bpez\Infuse\InfuseServiceProvider' ,
] ,

步骤 4: 添加到中间件

// app\http\Kernel.php
protected $middleware = [
  ...
  'Bpez\Infuse\Middleware\InfuseBeforeMiddleware',
  'Bpez\Infuse\Middleware\InfuseAfterMiddleware'
];

步骤 5: 配置 auth 文件

// config/auth.php
...
'driver' => 'verify',
'model' => 'InfuseUser',
...
'password' => [
    'email' => 'infuse::emails.password',
    ...
  ],
...

步骤 6: 发布配置、公共资产并运行迁移

> php artisan vendor:publish --provider="\Bpez\Infuse\InfuseServiceProvider" --tag=infuse_public --force
> php artisan vendor:publish --provider="\Bpez\Infuse\InfuseServiceProvider" --tag=infuse_config
> php artisan vendor:publish --provider="\Bpez\Infuse\InfuseServiceProvider" --tag=infuse_structure
> php artisan migrate --path="vendor/bpez/infuse/migrations"

步骤 7: 添加到 composer.json

"post-update-cmd": [
    ...
    "php artisan vendor:publish --provider="\Bpez\Infuse\InfuseServiceProvider" --tag=infuse_public --force"
],

步骤 8: 添加到 .htaccess


RewriteEngine On
...
    RewriteCond %{HTTP:Cookie} devicePixelRatio [NC]
    RewriteRule \.(?:jpe?g|gif|png|bmp)$ bpez/infuse/other/retinaimages.php [NC,L]

步骤 9: 运行 infuse 迁移

> php artisan migrate

步骤 10: 添加对服务器视网膜图像的支持

RewriteCond %{HTTP:Cookie} devicePixelRatio [NC]
RewriteRule \.(?:jpe?g|gif|png|bmp)$ /packages/bpez/infuse/retinaimages.php [NC,L]

可能未来的功能

> https://github.com/websoftwares/Throttle
> https://laravel.net.cn/docs/cache
> https://github.com/frenzyapp/turbolinks
> https://github.com/rails/turbolinks
> https://github.com/kossnocorp/jquery.turbolinks

安装强化版的 artisan

> sudo curl https://raw.github.com/villimagg/Artisan-on-Steroids/master/artisan -o /usr/local/bin/artisan && sudo chmod +x /usr/local/bin/artisan

Behat infuse 测试套件

imports:
  - vendor/bpez/infuse/behat.yml

高级数据流

model(mapConifig -> getbModelInstance(s) -> boot -> apiCalls) -> process(route -> renderView)

Infuse 配置 API

addSelect

将数据库字段转换为 HTML 表单选择。接受单个实例或多个。

addSelect(array(
    array(
        "column" => $columnName,
        "array" => array(),
        "insertBlank" => false,
        "topSelect" => false,
        "nested" => $nested,
        "nestedLastArray" => $nestedLastArray )
    ),
    ...
);

参数

  • column - (必需) [字符串] 数据库表字段名
  • array - (必需) [数组] 值数组。格式化
array(
    array('id' => 1, ", 'name' => 'display name'),
    array('id' => 2, ", 'name' => 'display name'),
    ...
)
  • insertBlank - (可选) [布尔值] 向选择字段插入空白选项。默认值为 false。
  • nested - (可选) [数组] 模型仅适用于第一个。之后每一层都需要数组格式
$nested = array(
    "Floorplan",
    array("model" => "ImageAsset", "column" => "title")
);
  • nestedLastArray - (可选) [数组] 层级值数组
$nestedLastArray = array(
    array('id' => 1, ", 'name' => 'display name'),
    array('id' => 2, ", 'name' => 'display name'),
    ...
);

describeColumn

向数据库字段添加描述。

describeColumn(array(
    array(
        "column" => $columnName,
        "desc" => "description here",
        "popover" => true
    )
    ...
);

参数

  • column - (必需) [字符串] 数据库表字段名
  • desc - (必需) [字符串] 描述
  • popover (可选) [布尔值] 如果存在选项,则描述以 HTML 弹出显示。

onlyOne

仅允许显示和创建一个数据库条目。

onlyOne();

addPermanentFilters

将 SQL WHERE 子句添加到配置中。

addPermanentFilters(array(
    array(
        "column" => $columnName,
        "operator" => "=",
        "value" => 87
    )
    ...
);

参数

  • column - (必需) [字符串] 数据库表字段名
  • operator - (必需) [字符串] SQL 比较运算符。如果使用 'IN' 作为运算符,则使用 elequents whereIn($column, $value)
  • value - (必需) [字符串 | 数字] 要比较的值

defaultColumnValues

添加保存条目时的默认值。

defaultColumnValues(array(
    "column_name_1" => $value1,
    "column_name_2" => $value2,
    ...
);

参数

  • array - (必需) [数组] 默认值数组,其中索引是列名,值是索引的值

addMultiSelect

将字段转换为多选。ID 通过逗号分隔跟踪。

addMultiSelect(array(
    array(
        "column" => $columnName,
        "array" => array(),
    ),
    ...
);

参数

  • column - (必需) [字符串] 数据库表字段名
  • array - (必需) [数组] 值数组。格式化
array(
    array('id' => 1, ", 'name' => 'display name'),
    array('id' => 2, ", 'name' => 'display name'),
    ...
)

hasMany

在这里定义一对一关系。定义如下格式的子关系。

hasMany(array(
    array("SomeModelName", "Display Name", array("column_name_1", "column_name2"...) $optionsArray),
    ...
);

参数

  1. (必需) [字符串] 子模型名称
  2. (必需) [字符串] 列表在父编辑页面上的条目显示名称
  3. (必需) [数组] 要在父编辑页面条目上显示的子列
  4. (可选) [数组] 包含显示子条目的额外功能。一些选项如下

例如:Child Columns 数组可以嵌套数组以匹配如下 id 与值的对应关系

$childColumnArray = array(
  "column_1",
  "column_2",
  array("column_3" => array(
    array("id" => 1, "name" => "some name"),
    array("id" => 2, "name" => "some name 2")
  ),
  "column_4",
  ...
)

array("category" => $categories)

$optionsArray = array(
  "order_column" => "display_order",
  "order_direction" => "ASC",
  "order_integer" => true
)

例如:添加自定义导出和导入功能。

$optionsArray = array(
    "import_csv_function" => "importUserModelInstancMethod",
    "import_csv_function_url" => "/path/to/example/template.csv",
    "import_csv_function_text" => "Import CSV for users. Use template provided.",
    "export_csv_function" => "exportUserModelInstanceMethod",
    "export_csv_function_text" => "Export CSV template to import.",
)

例如:将表拆分为由 WHERE 子句分隔的 2 个子表。

$optionsArray = array(
    "split" => array(
		"Gallery Assets" =>	"main_gallery = 1",
		"Gallery 2 Assets" =>	"main_gallery = 0"
	)
)

displayOrder

将列更改为用于排序条目的列。整数用于类型。使字段不可由用户编辑,值自动设置。

displayOrder(array("display_order_column"));

参数

  1. 数据库表字段名

fileUpload

配置文件上传功能列

fileUpload(
  array(
    array("column" => "column_name"),
  )
)

参数

  • column - (必需) [字符串] 数据库表字段名

addCkeditor

将文本字段转换为 addCkeditor。

addCkeditor(
    array("column_name_1", "column_name_2", ...)
)

参数

  • 数据库表字段名

callFunction

向条目的操作(显示 | 编辑 | 删除 | YourActionHere)中添加额外操作。返回数组("type" => "success", "message" => $message)可以访问通知系统。类型可以是("success" || "error" || "info" || "warning")。或者返回 false 将触发默认错误消息。

callFunction(array(
    array(
        "function" => "importSomeThing",
        "display_name" => "Import some thing",
        "long_process" => "Processing please wait...",
        "target" => "_BLANK"
    ),
    ...
);

参数

  1. (必需) [字符串] 函数名称。这是一个Laravel Eloquent查询范围。如果名称是importSomeThing,则在模型中声明为scopeImportSomeThing
  2. (必需) [字符串] 函数的显示名称
  3. (可选) [字符串] 如果是耗时过程,可以设置一个消息,在过程运行时填充等待模式。
  4. (可选) [字符串] 为html锚标签提供目标。

例:importSomeThing实现。返回一个包含类型("成功" || "错误")和消息的数组。

public function importSomeThings()
{
	// ... some work here
	$message = "Thanks";
	return array("type" => "success", "message" => $message);
}

addOtherAction

在骨架列表页面上的"其他操作"下拉菜单中添加顶级操作。函数应该是顶级模型中的静态函数。将用户实例传递到静态函数中。返回数组("type" => "成功", "message" => $message)可以调用通知系统。类型可以是("成功" || "错误" || "信息" || "警告")。或者返回false将触发默认错误消息。

addOtherAction(array(
    array(
        "function" => "seedUrls",
        "display_name" => "Import some thing",
    ),
    ...
);

参数

  1. (必需) [字符串] 函数名称。这是一个Laravel Eloquent查询范围。如果名称是importSomeThing,则在模型中声明为scopeImportSomeThing
  2. (必需) [字符串] 函数的显示名称

例:seedUrls实现

public function seedUrls($currentUser)
{
	// ... some work here
	$message = "Thanks";
	return array("type" => "success", "message" => $message);
}

editListingOrder

允许您选择编辑/创建页面的列排序。传入一个包含所需顺序的列名的数组。

editListingOrder(array(
    "created_at",
    "updated_at",
    "destination_site",
    "display_state",
    "property",
    "mobile_video_img",
    "sub_title",
    "video",
    "title",
));

参数

  1. (必需) [字符串] 表字段名称

Eloquent ORM

通过扩展InfuseModel并使用InfuseModelLibrary特性来设置模型以与infuse一起工作。

class BlogPost extends InfuseModel {

	use InfuseModelLibrary;

}

InfuseModel特性

url($columnName, $hstoreColumn = false)

获取保存到特定列的文件名的完整URL路径。调用url方法,并传入列名作为参数。

$post = new BlogPost;
$post->url($columnName); // Will return a url similar to http://somedomain.com/upload/some/path/name.jpg

thumbor($columnName, $hstoreColumn = false)

基于url功能返回一个Thumbor客户端实例。仅适用于已保存文件的列。Thumbor是一个智能图像服务。它支持图像的按需裁剪、缩放和翻转。Thumbor文档和thumber客户端文档可以在以下位置找到

  1. https://github.com/thumbor/thumbor/wiki
  2. https://github.com/99designs/phumbor/blob/master/lib/Thumbor/Url/CommandSet.php

需要服务配置,请参阅以下服务配置进行设置。

$post = new BlogPost;
$post->thumbor($columnName)->smartCrop(true)->resize(699, 525); // Will return a url to the cropped or filtered version
  • 当与img标签一起使用时,请添加此数据属性:data-no-retina
<?php $post = new BlogPost; ?>
<img src="{{$post->thumbor($columnName)->smartCrop(true)->resize(699, 525)}}" data-no-retina />

Bpez\Infuse\Util

Util::thumbor($url)

与InfuseModel url方法相同的功能。用于其他图像资源。

Util::thumbor($url);
  • 当与img标签一起使用时,请添加此数据属性:data-no-retina
<?php $post = new BlogPost; ?>
<img src="{{Util::thumbor($url)->smartCrop(true)->resize(699, 525)}}" data-no-retina />

Util::cdn($url)

用于通过CloudFront CDN发送同源的资产。需要服务配置,请参阅以下服务配置进行设置。

Util::cdn($url);

服务

/config/services.php

'thumbor' => [
    // Thumbor security key here
	'security-key' => '843208u4325032u502532582358235',
	// Use cloudfront in front of thumbor for scalability.
	'host' => 'http://d443523423.cloudfront.net',
],

'cloudfront' => [
    // Distribution domain for file uploaded through infuse.
	's3-uploads' => 'http://d4253425.cloudfront.net',
	// Distribution domain for assets originating from same origin.
	'self-hosted' => 'http://d54343425.cloudfront.net',
],

Retina图像支持

在您的页面上包含Util::infuse()(将其放在模板底部,在关闭标签之前)

	{!! Util::infuse() !!}
    </body>
</html>

S3 CORS需要启用,并且需要配置以支持Retina

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
         <AllowedMethod>HEAD</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>Authorization</AllowedHeader>
    </CORSRule>
</CORSConfiguration>'self-hosted' => 'http://d54343425.cloudfront.net',
],

使用http://dillinger.io创建

待办事项列表

  • 将删除添加到infuse删除,然后添加可以用于删除子项的方法
  • 在模型库中重新生成generateThumbnail,然后在composer.json中删除
  • 替换页面上传功能