czim / laravel-pxlcms
Laravel 对 PXL CMS 的适配器
1.3.0
2020-06-18 09:22 UTC
Requires
- php: >=5.6.4
- czim/dutch-helper: ^1.0
- czim/laravel-processor: ^1.0
- dimsav/laravel-translatable: ~5.0
- illuminate/database: ^5.3
- illuminate/support: ^5.3
- lookitsatravis/listify: ^1.1
- watson/rememberable: ^1.0
Requires (Dev)
- orchestra/testbench: 3.3.*
- phpunit/phpunit: 4.*
- scrutinizer/ocular: ~1.1
README
PXL CMS 适配器,适用于 Laravel。
版本兼容性
安装
通过 Composer
$ composer require czim/laravel-pxlcms
将以下代码行添加到您的 config/app.php
文件中的 providers 数组中
Czim\PxlCms\PxlCmsServiceProvider::class,
发布配置
$ php artisan vendor:publish
工作流程
- 生成 CMS 内容
- 安装并设置新的 Laravel 项目,并将其连接到 CMS 数据库
- 安装此包
- 配置此包
- 运行生成器:
artisan pxlcms:generate
使用模型
生成的模型在大多数情况下工作方式与正常的 Eloquent 模型相同。这包括关系、更新、预加载等等。有一些注意事项
- CMS 表的外键具有属性的名称。例如,它们被命名为 'category',而不是 'category_id'。
- 这意味着在未加载的关系中使用
$model->category
将不会触发魔法属性,因为该属性存在。您将得到一个整数字段。为了解决这个问题,只需调用关系方法本身(例如$model->category()->first()
)。
- 这意味着在未加载的关系中使用
- 默认情况下,所有模型都全局作用域仅包含 活动 记录(
e_active = true
)。- 如果您想包含非活动记录,请使用
withInactive()
作用域(例如ModelName::withInactive()->get()
)。 - 这取决于您的 pxlcms 配置设置,行为可能会改变。
- 如果您想包含非活动记录,请使用
- 默认情况下,所有模型都按其 位置(
e_position asc
)排序。- 如果您想防止这种情况,请使用
unordered()
作用域(例如ModelName::unordered()->first()
)。 - 这取决于您的 pxlcms 配置设置,行为可能会改变。
- 如果您想防止这种情况,请使用
功能和特性
- 为了多语言支持,使用 translatable。这提供了相同的功能,但使用了一个适配器特性,该特性使用 CMS .._ml 表内容。
- 默认情况下,每个模型都添加了 rememberable,允许您使用模型的任何 Eloquent Builder 实例上的
->remember()
方法缓存查询。 - Listify 用于处理模型上的位置列。您可能希望让 CMS 处理这些事情,但如果有需要,它是可用的。
- 为了处理 slug,提供了 sluggable,通过一个适配器特性实现,该特性使用常用的
cms_slugs
表方法。
有关更改或禁用上述内容的说明,请参阅配置文件。
图片和上传
图片和文件字段在生成的模型上设置为特殊关系。如果您在模型上使用关系上的魔法属性,如下所示
// For a model with a relationship: images() to the CMS Image model $model->images
... 那么图片结果将包含有关调整大小和图片或文件的对外部 URL 的信息。
$image = $model->images->first(); // This will return the external URL to the (base) image $image->url // This will return the local path to the file $image->localPath // This will list all resizes with appended prefixes and full URLs $image->resizes
保存图片将正常工作,但不会影响调整大小。请注意,Laravel 允许您使用不存在的文件更新 Image 模型的记录。此外,不会为任何新图片生成调整大小的文件。
请注意,这将对 已翻译 的图片和上传有效。关系将仅返回当前语言的有关结果。使用的语言可能被覆盖(生成模型代码默认允许这样做)。
// Return image results for locale other than the active application locale $englishImage = $model->images('en')->first(); $dutchImage = $model->images('nl')->first();
Slugs
使用修改版的 Sluggable Eloquent 模型特性来处理在模型生成期间 'sluggified' 的模型的 slugs。这与原始的 Sluggify 类似,但有例外
- Slugs 可以存储在
cms_slugs
表中(这可以在生成器配置中定义)。如果是这样,使用 Sluggable 方法时更改是透明的。 - 路由模型绑定应该工作得很好,请在Sluggable文档中查找相关信息。
- 现在,
findBy
方法增加了一个可选的locale
参数,这限制了slug搜索到特定的区域/语言:findBy($slug, $locale = null)
。同样,whereSlug
范围也有一个可选的locale
参数。 - 翻译模型应该被设置为支持多语言slug。翻译的父模型仍然实现
SluggableInterface
,并将相关调用委托给翻译模型。
运行生成器
代码生成器通过Artisan命令:pxlcms:generate
运行。它将分析数据库CMS内容(如果找到的话),并基于pxclms.php
配置文件生成代码。
以下选项可用
--auto automatic mode, skips interactivity
--dry-run performs analysis and outputs data without writing any files
-v verbose mode, shows debug output
待办事项
- 低优先级:基于'选项'字段列的默认值
- 或许还有自动更新时间戳替换?在模型中使用常量设置更新时间戳属性:const UPDATED_AT = 'date_modified';
生成器
-
检测典型的cms_m#_languages表
- 可配置是否自动执行此操作或交互式执行
- 如果允许,创建与cms_languages的关系,添加基于区域的查找
-
检测典型的multilingual_labels表
- 添加基于区域的方法/辅助函数
- 添加Translation辅助类/方法?
未考虑的事项
- 负引用(它们不会被使用;如果找到,请提供示例)。
- 自定义模块(由于没有可靠的表信息,它们将被跳过,如果它们被使用的话)。
- 与外键属性同名的关联关系不会被捕获。不触碰的原因
- 这将是魔法般的
- 这将与正常的Eloquent使用冲突
- 这将是不高效的(需要在模型的每个访问操作上进行检查)
- CMS配置的翻译列排序。为此,您需要构建自己的首选方法(例如,使用自定义连接)。默认情况下,对模型上任何存在的列的排序将正常工作。
鸣谢
许可协议
MIT许可协议(MIT)。请参阅许可文件以获取更多信息。