czim/laravel-pxlcms

Laravel 对 PXL CMS 的适配器

1.3.0 2020-06-18 09:22 UTC

README

Latest Version on Packagist Software License Build Status Latest Stable Version

PXL CMS 适配器,适用于 Laravel。

版本兼容性

安装

通过 Composer

$ composer require czim/laravel-pxlcms

将以下代码行添加到您的 config/app.php 文件中的 providers 数组中

    Czim\PxlCms\PxlCmsServiceProvider::class,

发布配置

$ php artisan vendor:publish

工作流程

  1. 生成 CMS 内容
  2. 安装并设置新的 Laravel 项目,并将其连接到 CMS 数据库
  3. 安装此包
  4. 配置此包
  5. 运行生成器: 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辅助类/方法?

未考虑的事项

  • 负引用(它们不会被使用;如果找到,请提供示例)。
  • 自定义模块(由于没有可靠的表信息,它们将被跳过,如果它们被使用的话)。
  • 与外键属性同名的关联关系不会被捕获。不触碰的原因
    1. 这将是魔法般的
    2. 这将与正常的Eloquent使用冲突
    3. 这将是不高效的(需要在模型的每个访问操作上进行检查)
  • CMS配置的翻译列排序。为此,您需要构建自己的首选方法(例如,使用自定义连接)。默认情况下,对模型上任何存在的列的排序将正常工作。

鸣谢

许可协议

MIT许可协议(MIT)。请参阅许可文件以获取更多信息。