手枪88/yii2-shop

yii2-shop是一个网站商店后端模块

安装: 250

依赖: 0

建议: 0

安全: 0

星级: 15

关注者: 7

分支: 15

开放问题: 1

类型:yii2-extension

This package is auto-updated.

Last update: 2024-08-27 22:16:11 UTC


README

模块开发始于2017年4月24日,请在此处:dvizh/yii2-shop安装模块。建议从Dvizh仓库安装模块,那里有最新版本。

Yii2-shop

该模块代表了一个电子商务网站的后端。

yii2-shop

包括(CRUD)管理

  • 分类
  • 制造商
  • 商品
  • 价格
  • 筛选器(选项)
  • 附加字段

如有需要,也可以安装我的其他模块

安装

建议在common/modules/pistol88下安装

git clone https://github.com/pistol88/yii2-shop.git

通过psr-4部分连接composer.json

"autoload": {
    "psr-4": {
        "pistol88\\shop\\": "common/modules/pistol88/yii2-shop"
    }
}

该模块依赖于许多其他包,请将其从我的composer.json复制到自己的require部分。之后,别忘了执行composer update和每个模块的迁移。

如果您想通过composer将它们安装在vendor文件夹中而不做任何更改,请按标准安装:'php composer require pistol88/yii2-shop' 和 'php composer update' 在命令行中。

迁移

php yii migrate --migrationPath=vendor/pistol88/yii2-shop/migrations

配置

在配置(可能是bootstrap.php)中添加

Yii::setAlias('@storageUrl','/frontend/web/images');

在配置的modules部分添加

    'modules' => [
        //..
        'shop' => [
            'class' => 'pistol88\shop\Module',
            'adminRoles' => ['administrator', 'superadmin', 'admin'],
        ],
        'filter' => [
            'class' => 'pistol88\filter\Module',
            'adminRoles' => ['administrator'],
            'relationFieldName' => 'category_id',
            'relationFieldValues' =>
                function() {
                    return \pistol88\shop\models\Category::buildTextTree();
                },
        ],
        'field' => [
            'class' => 'pistol88\field\Module',
            'relationModels' => [
                'pistol88\shop\models\Product' => 'Продукты',
                'pistol88\shop\models\Category' => 'Категории',
                'pistol88\shop\models\Producer' => 'Производители',
            ],
            'adminRoles' => ['administrator'],
        ],
        'relations' => [
            'class' => 'pistol88\relations\Module',
            'fields' => ['code'],
        ],
        'gallery' => [
            'class' => 'pistol88\gallery\Module',
            'imagesStorePath' => dirname(dirname(__DIR__)).'/storage/web/images/store',
            'imagesCachePath' => dirname(dirname(__DIR__)).'/storage/web/images/cache',
            'graphicsLibrary' => 'GD',
            'placeHolderPath' => dirname(dirname(__DIR__)).'/storage/web/images/placeHolder.png',
        ],
        //..
    ]

在shop中可以传递modelMap,其中指定所需的模型。还可以指定标准的yii控制器map、viewPath,以便在发展您的商店过程中用自己的控制器和视图替换。

在components部分

    'components' => [
        //..
        'fileStorage' => [
            'class' => '\trntv\filekit\Storage',
            'baseUrl' => '@storageUrl/source',
            'filesystem'=> function() {
                $adapter = new \League\Flysystem\Adapter\Local(dirname(dirname(__DIR__)).'/frontend/web/images/source');
                return new League\Flysystem\Filesystem($adapter);
            },
        ],
        //..
    ]

使用

  • ?r=shop/product - 产品
  • ?r=shop/category - 分类
  • ?r=shop/producer - 制造商
  • ?r=filter/filter - 筛选器(选项)
  • ?r=field/field - 附加字段

小部件

  • pistol88\shop\widgets\ShowPrice - 传递'model',输出价格。通过jQuery触发器与pistol88\cart\widgets\ChangeOptions相关联,可以确定选择的修改,并动态更改价格。

一个商品的示例卡片,其中包含所有商店和购物车小部件,它们协同工作并动态更改彼此的数据。

<?php
use pistol88\shop\widgets\ShowPrice;
use pistol88\cart\widgets\BuyButton;
use pistol88\cart\widgets\TruncateButton;
use pistol88\cart\widgets\CartInformer;
use pistol88\cart\widgets\ElementsList;
use pistol88\cart\widgets\ChangeCount;
use pistol88\cart\widgets\ChangeOptions;

$product = \pistol88\shop\models\Product::findOne(1); //from controller
?>
<div class="site-index">
    <h1><?=$product->name;?></h1>
    
    <h2>Shop</h2>
    <div class="block row">
        <h3>ShowPrice</h3>
        <?=ShowPrice::widget(['model' => $product]);?>
    </div>
    
    <h2>Cart</h2>
    <div class="block row">
        <div class="col-md-3">
            <h3>ChangeCount</h3>
            <?=ChangeCount::widget(['model' => $product]);?>
        </div>
        <div class="col-md-3">
            <h3>ChangeOptions</h3>
            <?=ChangeOptions::widget(['model' => $product]);?>
        </div>
        <div class="col-md-3">
            <h3>BuyButton</h3>
            <?=BuyButton::widget(['model' => $product]);?>
        </div>
        <div class="col-md-3">
            <h3>TruncateButton</h3>
            <?=TruncateButton::widget();?>
        </div>
        <div class="col-md-3">
            <h3>CartInformer</h3>
            <?=CartInformer::widget();?>
        </div>
        <div class="col-md-3">
            <h3>ElementsList</h3>
            <?=ElementsList::widget(['type' => 'dropdown']);?>
        </div>
    </div>
    
    <style>
        .block {
            border: 2px solid blue;
        }
    </style>
    
</div>