davidkrenekcz / shop
AsgardCMS的商店模块
1.0.1
2018-08-20 12:25 UTC
Requires
- php: >=5.6
- composer/installers: >=1.0
- davidkrenekcz/dynamicpages: >=1.0.0
- gloudemans/shoppingcart: ^2.5
- idavoll/core-module: >=2.0
Requires (Dev)
- orchestra/testbench: 3.5.*
- phpunit/phpunit: ~6.0
This package is auto-updated.
Last update: 2024-09-21 02:10:03 UTC
README
您需要在
config/app.php
数组中添加一些内容'aliases' => [ // ... 'Image' => Intervention\Image\Facades\Image::class, // ... ], 'providers' => [ // ... Intervention\Image\ImageServiceProvider::class, Spatie\Sitemap\SitemapServiceProvider::class, Gloudemans\Shoppingcart\ShoppingcartServiceProvider::class // ... ]
设置
- 所有设置都来自文件
./config/asgard/shop/core.php
(格式见./Modules/Shop/Config/core.example
) - 注意:此模块需要
davidkrenekcz/dynamicpages
- 建议您阅读https://packagist.org.cn/packages/davidkrenekcz/dynamicpages的文档
翻译客户数据字段
- 如果您使用不寻常的键(例如客户的卡号)存储用户数据或需要将键翻译为不寻常的语言,则模块无法翻译键并将它们保留为英文。
- 如果您想以自己的格式显示它们,只需在您的应用程序中创建一个字典,并将路径设置为
客户数据字典
设置属性。 - 模块将始终尝试使用您的字典来翻译键,然后再使用它自己的。
产品渲染
- 产品路由、控制器方法和视图的示例可在
\Modules\Shop\Http\frontendRoutes.php
、\Modules\Shop\Http\Controllers\Frontend\ProductsController.php
和\Modules\Shop\Resources\views\frontend\product(s).blade.php
中找到
购物车操作和订单提交 - 使用模块的JS控制器
- 您可以通过模块的JS控制器轻松地操作购物车内容和提交订单
包含JS控制器
- 将
@include("shop::frontend.partials.cart-ajax", [ "omit" => [ ] ])
添加到页面底部(在jQuery加载后) - 您可以通过
omit
参数自定义您想使用的控制器方法 omit
值是cart-add
、cart-update
、cart-remove
、cart-destroy
cart
(所有购物车方法的快捷键)order-customer-data
、order-delivery-data
、order-submit
order
(所有订单方法的快捷键)
- 您可以将它们以任何组合添加到数组中
购物车内容操作
添加产品
- 您只需将
data-add-to-cart-id="{{ $product->id }}
"属性添加到您的链接,控制器将处理其余部分
删除产品
- 当遍历购物车内容时,将
data-remove-from-cart-id="{{ $item->rowId }}"
属性添加到删除链接(其中$item
是购物车行实例)
更新项目数量
- 当遍历购物车内容时,将
data-previous-value="{{ $item->qty }}"
和data-change-quantity-id="{{ $item->rowId }}"
属性添加到您的输入(其中$item
是购物车行实例) - 控制器将监听输入的变化,并在值变化时更新产品数量
- 注意:在更新输入和删除按钮的最近
<tr>
上需要data-row-id="{{ $item->rowId }}"
属性,以便在更改后成功更新DOM
销毁购物车
- 只需将空
data-destroy-cart
属性添加到您的链接即可
订单数据
创建输入
- 一旦您的输入就绪,请将
data-order-customer-field-name
或data-order-delivery-field-name
属性与您希望使用的字段名添加到每个输入中 - 输入值将在表单提交时自动收集
验证输入
- 要验证您的输入,请将
data-order-rule
属性添加到它们 - 支持的属性值是
email
、phone
、number
、filled
、bool
或您的自定义正则表达式 - 在提交表单之前进行验证 - 当验证失败时,将
has-error
类添加到输入框的父元素
根据国家/运输方式值进行运输/支付方式筛选
- 在您的购物车中,您最想做的事情可能是根据选择的运输方式显示/隐藏支付方式,以及类似地根据选择的国家和运输方式
- 要完成此操作,请按照以下简单说明进行
- 为每个选择框添加一个空选项,例如:
<option value="" data-filter-values="">选择运输方式</option>
- 将
data-order-delivery-field-name
属性添加到您的选择框中,对于国家选择框使用"country"
值,对于运输方式选择框使用"shipping"
值,对于支付方式选择框使用"payment"
值 - 将
data-filter-values
添加到国家和运输方式选择框中,用逗号分隔支持的运输/支付方式的ID- 这可以通过以下方式完成:
data-filter-values="{{ implode(",", $country->shippingMethodsIds) }}"
或data-filter-values="{{ implode(",", $shipping->paymentsIds) }}"
- 这可以通过以下方式完成:
- 接下来,确保每个选择框中的选项的
value
与选项的ID相同
- 为每个选择框添加一个空选项,例如:
- 就是这样!您的选择框现在将自动隐藏/显示选项
提交数据表单
- 您只需将
data-submit-order-customer-data
或data-submit-order-delivery-data
添加到您的按钮中 - 控制器将在点击时验证并提交表单
提交订单
- 要提交整个订单,只需将
data-submit-order
属性添加到您的按钮中 - 就这么简单!
事件监听器
- 您可以将自己的回调函数添加到在请求状态改变时被调用的函数中
- 回调函数对象可以通过
window.shop.on.{request name}.{event name}
对象访问 - 可用请求名称
request
用于所有请求addRequest
、updateRequest
、removeRequest
、destroyRequest
用于购物车请求customerDataRequest
、deliveryDataRequest
、submitOrderRequest
用于订单请求
- 所有请求都支持
start
、end
、done
和fail
事件,request
、customerDataRequest
和deliveryDataRequest
还支持validationDone
和validationFail
事件 - 某些事件有默认方法可供使用,无需编码
- 有关详细信息,请参阅
shop::frontend.partials.cart-ajax.blade.php
自定义警告
- 大多数请求在结束时调用警告函数
- 您可以通过替换
window.shop.alert(string, type)
函数来自定义警告
加载元素
- 默认情况下,请求在开始/结束时切换
$(".loading")
元素的可见性 - 您可以通过替换
window.shop.loadinElement
属性来自定义此元素,将其替换为您的自定义jQuery对象
购物车数量/价格更改
- 每次更改购物车内容时,您可能希望更新您网站上某处的价格/产品数量
- 在您想要插入数量/价格的位置使用属性
data-cart-insert="items"
和data-cart-insert="price"
,控制器将在每次更改购物车内容时自动替换它们的内容
价格格式化和筛选选择值
- 如果您需要在应用程序的任何地方将数字格式化为价格,请使用PHP辅助函数
{{ price($number) }}
或JavaScript函数window.shop.price(number)
- 小数位数、分隔符和货币可以在模块设置中设置,请参阅README中的Settings
部分 - 如果您需要根据不同选择框的值筛选选择框的选项(请参阅README中的
Order data > Shipping/payment methods filtering based on country/shipping method value
),您可以使用JS函数window.shop.filterSelectValues(sourceSelect, targetSelect, sourceKeyAttribute?, targetKeyAttribute?, delimiter?)
- 只需调用一次,该方法将监听选择框的变化并自动切换选项
- 有关函数参数的更多信息,请参阅
\Modules\Shop\Resources\views\frontend\partials\cart-ajax.blade.php:151
示例视图
- 要查看示例路由、控制器和视图,请前往
\Modules\Shop\Http\frontendRoutes.php
、\Modules\Shop\Http\Controllers\Frontend\CartController.php
和\Modules\Shop\Resources\views\frontend
,其中包含功能齐全的商店原型
购物车操作(不带JS控制器)
- 要操作购物车内容,您可以使用外观类
Modules\Shop\Facades\Cart
或 AJAX API。
AJAX API
- API 可在 POST
shop-api/cart/(action)
路径下访问,其中(action)
为insert
、update
、remove
或destroy
- 传入的属性与外观类中的方法参数相同(见下文)
PHP 外观类
- 您可以通过
Modules\Shop\Facades\Cart
调用静态方法来操作购物车内容 - 有关更多文档,请参阅
Modules\Shop\Facades\Cart.php
订单提交(无 JS 控制器)
- 外观类
Modules\Shop\Facades\Order
和相应的 AJAX API 可帮助您处理订单
存储用户和配送数据
- 当您有多页购物车时,Shop 模块可以存储您的用户数据和配送数据,因此您不需要手动操作
- 这可以通过外观类的
storeUserData
和storeDeliveryData
方法或api.shop.order.store user data
、api.shop.order.store delivery data
和api.shop.order.store order data
API 路径来实现。 - 一旦设置数据,您可以通过
getStoredUserData
和getStoredDeliveryData
方法检索它
提交订单
- 提交订单通过
submitOrder
方法或api.shop.order.submit
API 路径完成 - 在此处,您可以提交您的用户、配送和产品数据,但如果您使用购物车并存储用户和配送数据,则不需要传递任何数据,所有数据将自动从购物车和存储数据中获取。