dynamic/silverstripe-product-wishlist

为您的网站添加产品愿望列表

安装: 60

依赖项: 0

建议者: 0

安全性: 0

星级: 0

关注者: 7

分支: 1

开放问题: 0

类型:silverstripe-vendormodule

dev-master / 2.0.x-dev 2023-10-04 15:36 UTC

This package is auto-updated.

Last update: 2024-09-04 17:37:32 UTC


README

Build Status codecov Scrutinizer Code Quality Build Status

product-wishlist

允许用户在网站上创建和管理愿望列表。

要求

  • silverstripe/recipe-cms ^4.0
  • dynamic/viewable-dataobject ^2.0
  • dynamic/silverstripe-additional-formfields ^2.0
  • dynamic/silverstripe-manageable-dataobject ^2.0

安装

composer require dynamic/silverstripe-product-wishlist

示例用法

此模块未与任何添加产品的特定模块挂钩,以提供灵活性。以下示例将使用 FoxyStripe。

产品愿望列表扩展

必须通过数据扩展将产品关系添加到 Dynamic\Wishlist\Model\ProductWishList

Dynamic\Wishlist\Model\ProductWishList:
  extensions:
    - Foo\Bar\ORM\WishListExtension
<?php

namespace Foo\Bar\ORM;

use Dynamic\FoxyStripe\Page\ProductPage;
use SilverStripe\ORM\DataExtension;

class WishListExtension extends DataExtension
{
    /**
     * @var array
     */
    private static $many_many = [
        'Products' => ProductPage::class,
    ];
}

产品关系

产品还必须与愿望列表有互惠关系。

Dynamic\FoxyStripe\Page\ProductPage:
  extensions:
    - Foo\Bar\ORM\ProductExtension
<?php

namespace Foo\Bar\ORM;

use Dynamic\Wishlist\Model\ProductWishList;

class ProductExtension extends DataExtension
{
    /**
     * @var array
     */
    private static $belongs_many_many = [
        'WishLists' => ProductWishList::class,
    ];
}

愿望列表表单

应将 ProductControllerExtension 应用到处理显示产品的控制器。

Dynamic\FoxyStripe\Page\ProductPageController:
  extensions:
    - Dynamic\Wishlist\Extensions\ProductControllerExtension

可以通过传递产品 ID 来避免使用当前控制器的页面 ID。如果用户未登录,则不会显示表单。

添加到愿望列表表单和从愿望列表中删除表单

这些表单之间唯一的真正区别是它们调用的操作和额外的类。

更新愿望列表

这是一个更新下拉字段中可见愿望列表的扩展点。它传递与当前用户关联的愿望列表的 DataList

/**
 * @param SilverStripe\ORM\DataList $lists
 */
public function updateWishLists($lists)
{
    // Stuff here
}
更新字段

这是一个更新表单字段的扩展点。它传递一个 FieldList 和一个整数值。

/**
 * @param SilverStripe\Forms\FieldList $fields
 * @param int $productID
 */
public function updateFields($fields, $productID)
{
    // Stuff here
}
更新操作

这是一个更新表单操作的扩展点。它传递一个 FieldList 和一个整数值。

/**
 * @param SilverStripe\Forms\FieldList $actions
 * @param int $productID
 */
public function updateActions($actions, $productID)
{
    // Stuff here
}

愿望列表表单处理

默认情况下不包含处理 addToWishListremoveFromWishList 操作。示例实现应在控制器上,或应用于控制器的扩展中。

添加到愿望列表示例

/**
 * @param $data
 * @param \SilverStripe\Forms\Form $form
 * @return \SilverStripe\Control\HTTPResponse
 * @throws \Exception
 */
public function addToWishList($data, Form $form)
{
    /** @var ProductWishList|\Foo\Bar\Extension\WishListExtension $list */
    $list = ProductWishList::get()->filter([
        'ID' => $data['List'],
    ])->first();

    $list->Products()->add($data['ProductID']);

    return $this->owner->redirectBack();
}

从愿望列表中删除示例

/**
 * @param $data
 * @param \SilverStripe\Forms\Form $form
 * @return \SilverStripe\Control\HTTPResponse
 * @throws \Exception
 */
public function removeFromWishList($data, Form $form)
{
    /** @var ProductWishList|\Foo\Bar\Extension\WishListExtension $list */
    $list = ProductWishList::get()->filter([
        'ID' => $data['List'],
    ])->first();

    $list->Products()->removeByID($data['ProductID']);

    return $this->owner->redirectBack();
}

文档

请参阅 docs/en 文件夹。