考座座2 / laravel-blade-sortable
自定义Blade组件,用于在您的应用程序中添加可排序/可拖拽的HTML元素,为支持最新版本的Laravel请进行Fork
Requires
- php: ^7.2|^7.3|^7.4|^8.0|^8.1|^8.2
- illuminate/support: ^7.0|^8.0|^9.0|^10.0
Requires (Dev)
- orchestra/testbench: ^5.0|^6.0
- phpunit/phpunit: ^8.0|^9.0|^10.1
This package is auto-updated.
Last update: 2024-09-12 13:49:29 UTC
README
演示
安装
您可以通过composer安装此包
composer require asantibanez/laravel-blade-sortable
安装包后,请确保将 laravel-blade-sortable::scripts
组件添加到您的其他脚本旁边。
<x-laravel-blade-sortable::scripts/> <script src="/js/app.js"></script>
要求
包需要安装 SortableJs
和 AlpineJs
以启用排序功能。请参阅它们各自的文档以设置它们。
注意:
SortableJs
必须在Javascript的window
对象级别上可用。为此,请使用以下方式导入库
window.Sortable = require('sortablejs').default
或使用任何其他类似方法
使用方法
该包提供了2个自定义Blade组件,用于启用DOM元素的排序
laravel-blade-sortable::sortable
laravel-blade-sortable::sortable-item
可排序
laravel-blade-sortable::sortable
用作可排序/可拖拽项的包装元素。它必须用于包围它将启用排序的子元素。
<x-laravel-blade-sortable::sortable> {{-- Items here --}} </x-laravel-blade-sortable::sortable>
默认情况下,该组件渲染一个 "div" 作为包装节点。您可以通过传递一个 as
属性来自定义此行为,以渲染所需的节点类型。
<x-laravel-blade-sortable::sortable as="ul" {{-- Will render an unordered list wrapper node --}} > {{-- Items here --}} </x-laravel-blade-sortable::sortable>
注意:您传递的任何其他属性(如class、id、alt等)都将添加到元素中
如果您想使用自定义Blade组件作为包装节点,也可以通过传递一个 component
属性来实现。
<x-laravel-blade-sortable::sortable component="custom-blade-component" {{-- Will render "x-custom-blade-component" --}} > {{-- Items here --}} </x-laravel-blade-sortable::sortable>
可排序项
laravel-blade-sortable::sortable-item
用作您希望启用排序的每个项的包装元素。
<x-laravel-blade-sortable::sortable> <x-laravel-blade-sortable::sortable-item sort-key="jason"> Jason </x-laravel-blade-sortable::sortable-item> <x-laravel-blade-sortable::sortable-item sort-key="andres"> Andres </x-laravel-blade-sortable::sortable-item> <x-laravel-blade-sortable::sortable-item sort-key="matt"> Matt </x-laravel-blade-sortable::sortable-item> <x-laravel-blade-sortable::sortable-item sort-key="james"> James </x-laravel-blade-sortable::sortable-item> </x-laravel-blade-sortable::sortable>
注意:与
laravel-blade-sortable::sortable
类似,您也可以传递一个as
或component
属性来渲染所需的节点或自定义组件。注意:可以传递额外的属性,如class、id、alt等,并将添加到项节点中。
如您所注意到的,每个 laravel-blade-sortable::sortable-item
都需要一个 sort-key
属性。该属性将用于跟踪元素的排序顺序。它应该是唯一的。
就是这样。现在您已经使用Laravel Blade渲染了一个可排序的列表,无需任何自定义JavaScript。 🔥
不过,这个例子看起来很糟糕 😅。因为您可以传递任何自定义组件或样式,您可以根据需要自定义包装器和项节点。以下是一个使用TailwindCSS ❤️ 和自定义组件的示例
看起来很酷,对吧? 👌
高级使用
作为表单输入
元素的排序顺序可以与其他表单字段一起在表单提交中使用。要启用此行为,只需将一个 name
属性传递给 laravel-blade-sortable::sortable
组件。该 name
应该是您表单中输入的名称。
<form> <x-laravel-blade-sortable::sortable name="sort_order" > {{-- Items here --}} </x-laravel-blade-sortable::sortable> </form>
通过添加一个 name
属性,组件内部为每个项的 sort-key
添加隐藏输入。
非常棒! 👌
与Livewire一起使用
Livewire?太棒了。我们知道。
您可以在Livewire视图中使用此包,并在组件中使用排序信息。
要获取Livewire组件中的 "sort change" 更新,只需向 x-laravel-blade-sortable::sortable
组件添加 wire:onSortOrderChange
属性。添加此属性将在排序事件发生时钩住Livewire组件,并调用指定的方法/回调。
<x-laravel-blade-sortable::sortable name="dropzone" wire:onSortOrderChange="handleSortOrderChange" > {{-- Items here --}} </x-laravel-blade-sortable::sortable>
在上面的例子中,每次您对项目进行排序时,都会调用handleSortOrderChange
方法,并将当前排序顺序中项目的sort-key
组成的数组作为参数传递。
同时也会传递额外信息,以便在处理排序顺序时检查额外数据。
public function handleOnSortOrderChanged($sortOrder, $previousSortOrder, $name, $from, $to) { // $sortOrder = new keys order // $previousSortOrder = keys previous order // $name = drop target name // $from = name of drop target from where the dragged/sorted item came from // $to = name of drop target to where the dragged/sorted item was placed }
自定义
为了支持SortableJs的一些高级功能,可以向laravel-blade-sortable::sortable
组件传递以下props
animation
:运行排序动画所需的时间(毫秒)。默认值为150
。ghost-class
:在排序过程中添加到被拖动对象的类。默认为null
。只能有1个类。drag-handle
:用作拖动处理器的类名。只有具有该类的DOM元素才能启用排序。
<x-laravel-blade-sortable::sortable animation="1000" ghost-class="opacity-25" drag-handle="drag-handle" > {{-- Items here --}} </x-laravel-blade-sortable::sortable>
多个拖放区域
想要有不同的拖放区域来进行拖放/排序元素吗?我们为您提供了支持。😎
只需向laravel-blade-sortable::sortable
组件添加一个group
字符串prop。在相同页面上向另一个laravel-blade-sortable::sortable
组件添加相同的prop,然后BOOM!完成!
<x-laravel-blade-sortable::sortable group="people" > {{-- Items here --}} </x-laravel-blade-sortable::sortable> <x-laravel-blade-sortable::sortable group="people" > {{-- Items here --}} </x-laravel-blade-sortable::sortable>
启用/禁用排序和/或拖放
使用:allow-sort=true|false
和:allow-drop=true|false
来控制x-laravel-blade-sortable::sortable
组件的排序和/或拖放元素的启用/禁用。
两者都默认为true
。
<x-laravel-blade-sortable::sortable group="people" :allow-sort="false" :allow-drop="false" > {{-- Items here --}} </x-laravel-blade-sortable::sortable>
测试
composer test
变更日志
请参阅变更日志以获取更多关于最近更改的信息。
贡献
请参阅贡献指南以获取详细信息。
安全
如果您发现任何安全相关的问题,请通过santibanez.andres@gmail.com发送电子邮件,而不是使用问题跟踪器。
鸣谢
许可证
MIT许可证(MIT)。请参阅许可证文件以获取更多信息。