albert-gee-ca / yii2-shop
Yii2框架的电子商务模块
Requires
- php: >=7.0
- black-lamp/blcms-staticpage: 0.*
- black-lamp/yii2-email-templates: ^3.0.0
- black-lamp/yii2-imagable: 1.*
- black-lamp/yii2-locale: 0.7.6
- black-lamp/yii2-multi-lang: ^1.0.0
- black-lamp/yii2-seo: 0.1.*
- evgeniyrru/yii2-slick: 1.0.1
- kartik-v/yii2-widgets: *
- marqu3s/yii2-summernote: 1.0.0
- rmrevin/yii2-fontawesome: ~2.17
- yii2tech/ar-position: *
- yiisoft/yii2: >=2.0.4
- yiisoft/yii2-bootstrap: *
README
强大的Yii2框架电子商务模块。
安装
1. 将扩展添加到您的项目中
运行命令
composer require albert-sointula/yii2-shop
或添加
"albert-sointula/yii2-shop": "*"
到您的composer.json的require部分。
2. 您应该在通用配置文件中配置"authManager"组件
'authManager' => [
'class' => 'yii\rbac\DbManager',
],
3. 在后端配置文件中设置"Yii2-multi-lang"组件
'components' => [
'urlManager' => [
'class' => bl\multilang\MultiLangUrlManager::className(),
'baseUrl' => '/admin',
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
],
],
'urlManagerFrontend' => [
'class' => bl\multilang\MultiLangUrlManager::className(),
'baseUrl' => '/',
'showScriptName' => false,
'enablePrettyUrl' => true,
'enableDefaultLanguageUrlCode' => false,
'rules' => [
[
'class' => bl\articles\UrlRule::className()
],
[
'class' => xalberteinsteinx\shop\UrlRule::className(),
'prefix' => 'shop'
],
]
],
]
4. 在前端配置文件中设置"Yii2-locale"扩展
'components' => [
'urlManager' => [
'class' => bl\locale\UrlManager::className(),
'baseUrl' => '/',
'showScriptName' => false,
'detectInSession' => false,
'detectInCookie' => false,
'enablePrettyUrl' => true,
'languageProvider' => [
'class' => bl\locale\provider\DbLanguageProvider::className(),
'db' => 'db',
'table' => 'language',
'localeField' => 'lang_id',
'languageCondition' => ['active' => true],
],
'lowerCase' => true,
'useShortSyntax' => false,
'languageKey' => 'language',
'showDefault' => false,
'rules' => [
[
'class' => albertgeeca\shop\UrlRule::className(),
'prefix' => 'shop'
],
[
'class' => bl\seo\UniqueUrlRule::class,
'destination' => 'cart',
'duplicate' => [
'cart/cart/show',
'cart/cart'
]
],
]
],
]
5. 在前端配置中设置Dektrium-user模块
在后台配置中
'modules' => [
...
'user' => [
'modelMap' => [
'RegistrationForm' => albertgeeca\shop\common\components\user\models\RegistrationForm::className(),
'RecoveryForm' => albertgeeca\shop\common\components\user\models\RecoveryForm::className(),
'LoginForm' => albertgeeca\shop\common\components\user\models\LoginForm::className(),
'SettingsForm' => albertgeeca\shop\common\components\user\models\SettingsForm::className(),
],
'controllerMap' => [
'registration' => albertgeeca\shop\frontend\components\user\controllers\RegistrationController::className(),
'settings' => albertgeeca\shop\frontend\components\user\controllers\SettingsController::className(),
'security' => albertgeeca\shop\frontend\components\user\controllers\SecurityController::className(),
'recovery' => albertgeeca\shop\frontend\components\user\controllers\RecoveryController::className()
],
'as frontend' => dektrium\user\filters\FrontendFilter::className(),
'enableFlashMessages' => false
],
...
],
'components' => [
...
'user' => [
'identityClass' => albertgeeca\shop\common\components\user\models\User::className(),
'enableAutoLogin' => true,
'identityCookie' => [
'name' => '_frontendIdentity',
'path' => '/',
'httpOnly' => true,
],
'on afterLogin' => function() {
if (Yii::$app->cart->saveToDataBase) Yii::$app->cart->transportSessionDataToDB();
},
'on afterConfirm' => function() {
if (Yii::$app->cart->saveToDataBase) Yii::$app->cart->transportSessionDataToDB();
},
],
...
],
在通用配置文件中
'modules' => [
...
'user' => [
'enableRegistration' => false,
'enableConfirmation' => false,
'admins' => ['admin'],
'adminPermission' => 'rbacManager',
'controllerMap' => [
'admin' => albertgeeca\shop\backend\components\user\controllers\AdminController::className(),
'security' => albertgeeca\shop\frontend\components\user\controllers\SecurityController::className()
],
'as backend' => [
'class' => 'dektrium\user\filters\BackendFilter',
'only' => ['register'], // Block View Register Backend
],
],
...
],
'components' => [
...
'user' => [
'identityClass' => dektrium\user\models\User::className(),
'enableAutoLogin' => true,
'returnUrl' => '/',
'identityCookie' => [
'name' => '_backendIdentity',
'path' => '/admin',
'httpOnly' => true,
],
],
...
'view' => [
'theme' => [
'basePath' => '@backend/themes/' . $params['themeName'],
'baseUrl' => '@web/themes/' . $params['themeName'],
'pathMap' => [
'@dektrium/user/views' => '@vendor/sointula/yii2-shop/backend/views/user',
],
],
],
],
在前端配置中
'modules' => [
'user' => [
'class' => dektrium\user\Module::className(),
'modelMap' => [
'Profile' => albertgeeca\shop\common\components\user\models\Profile::className(),
'User' => albertgeeca\shop\common\components\user\models\User::className()
],
],
6. 应用迁移
- php yii migrate --migrationPath=@vendor/dektrium/yii2-user/migrations
- php yii migrate --migrationPath=@yii/rbac/migrations
- php yii migrate --migrationPath=@vendor/black-lamp/yii2-multi-lang/migration
- php yii migrate --migrationPath=@vendor/black-lamp/yii2-seo/migrations
- php yii migrate --migrationPath=@vendor/black-lamp/blcms-staticpage/migrations
- php yii migrate --migrationPath=@vendor/black-lamp/yii2-email-templates/src/migrations
- php yii migrate --migrationPath=@vendor/albert-sointula/yii2-shop/migrations
7. 在通用配置文件中添加Imagable模块的配置
'shop_imagable' => [
'class' => bl\imagable\Imagable::className(),
'imageClass' => \bl\imagable\instances\CreateImageImagine::className(),
'nameClass' => bl\imagable\name\CRC32Name::className(),
'imagesPath' => '@frontend/web/images',
'categories' => [
'origin' => false,
'category' => [
'shop-product' => [
'origin' => false,
'size' => [
'big' => [
'width' => 1500,
'height' => 500
],
'thumb' => [
'width' => 500,
'height' => 500,
],
'small' => [
'width' => 150,
'height' => 150
]
]
],
'shop-vendors' => [
'origin' => false,
'size' => [
'big' => [
'width' => 1500,
'height' => 500
],
'thumb' => [
'width' => 320,
'height' => 240,
],
'small' => [
'width' => 150,
'height' => 150
]
]
],
'delivery' => [
'origin' => false,
'size' => [
'big' => [
'width' => 1500,
'height' => 500
],
'thumb' => [
'width' => 500,
'height' => 500,
],
'small' => [
'width' => 150,
'height' => 150
]
]
],
'shop-category/cover' => [
'origin' => false,
'size' => [
'big' => [
'width' => 1500,
'height' => 500
],
'thumb' => [
'width' => 500,
'height' => 500,
],
'small' => [
'width' => 150,
'height' => 150
]
]
],
'shop-category/thumbnail' => [
'origin' => false,
'size' => [
'big' => [
'width' => 1500,
'height' => 500
],
'thumb' => [
'width' => 500,
'height' => 500,
],
'small' => [
'width' => 150,
'height' => 150
]
]
],
'shop-category/menu_item' => [
'origin' => false,
'size' => [
'big' => [
'width' => 1500,
'height' => 500
],
'thumb' => [
'width' => 500,
'height' => 500,
],
'small' => [
'width' => 150,
'height' => 150
]
]
],
'payment' => [
'origin' => false,
'size' => [
'big' => [
'width' => 1500,
'height' => 500
],
'thumb' => [
'width' => 500,
'height' => 500,
],
'small' => [
'width' => 150,
'height' => 150
]
]
],
]
]
],
8. 将模块添加到您的后端配置中
'bootstrap' => [ //'albertgeeca\shop\backend\components\events\PartnersBootstrap', 'albertgeeca\shop\backend\components\events\ShopLogBootstrap', 'albertgeeca\shop\backend\components\events\CartBootstrap', ], 'modules' => [ 'shop' => [ 'class' => 'albertgeeca\shop\backend\Module', 'enableCurrencyConversion' => true ] ]
9. 将模块添加到您的前端配置中
'modules' => [ ... 'shop' => [ 'class' => albertgeeca\shop\frontend\Module::className(), 'enableCurrencyConversion' => true, 'partnerManagerEmail' => $params['partnerManagerEmail'], 'senderEmail' => $params['senderEmail'], 'showChildCategoriesProducts' => false ], ... ], 'components' => [ ... 'partnerMailer' => [ 'class' => yii\swiftmailer\Mailer::className(), 'useFileTransport' => false, 'messageConfig' => [ 'charset' => 'UTF-8', ], 'viewPath' => '@vendor/albert-sointula/yii2-shop/frontend/views/partner-request/mail', 'htmlLayout' => '@vendor/albert-sointula/yii2-shop/frontend/views/partner-request/mail/layout', 'transport' => [ 'class' => 'Swift_SmtpTransport', 'username' => 'info@mail.com', 'password' => '55555555', 'host' => 'pop.mail.com', 'port' => '587', ], ], ... ] 'bootstrap' => [ 'albertgeeca\shop\frontend\components\events\PartnersBootstrap', 'albertgeeca\shop\frontend\components\events\UserRegistrationBootstrap' ],
10. 在前端配置文件中设置"Yii2-email-templates"模块
https://github.com/black-lamp/yii2-email-templates
11. 设置静态页面模块
将StaticPageManager角色添加到您的管理员用户在auth_assignment表中。创建新的静态页面,键为"shop"和"cart"。在您的后端配置文件中添加以下内容
'seo' => [
'class' => 'bl\cms\seo\backend\Module'
],
],
需求
- PHP版本:7.0或更高
- PHP扩展:file-info, imagick, intl
角色及其权限:
attributeManager
- addAttributeValue
- deleteAttribute
- saveAttribute
- viewAttributeList
countryManager
- saveCountry
- viewCountryList
- deleteCountry
currencyManager
- updateCurrency
- viewCurrencyList
- deleteCurrency
deliveryMethodManager
- 保存配送方式
- 查看配送方式列表
- 删除配送方式
订单管理器
- 删除订单
- 删除订单产品
- 查看订单
- 查看订单列表
订单状态管理器
- 保存订单状态
- 查看订单状态列表
- 删除订单状态
产品可用性管理器
- 保存产品可用性
- 查看产品可用性列表
- 删除产品可用性
产品管理器
- 创建产品
- 创建无需审核的产品
- 删除自己的产品
- 删除产品
- 更新自己的产品
- 更新产品
- 查看完整产品列表
- 查看产品列表
产品合作伙伴
- 访问管理面板
- 创建产品
- 创建无需审核的产品
- 删除自己的产品
- 删除产品
- 更新自己的产品
- 更新产品
- 查看完整产品列表
- 查看产品列表
商店分类管理器
- 保存商店分类
- 查看商店分类列表
供应商管理器
- 保存供应商
- 查看供应商列表
- 删除供应商
支付管理器
- 查看支付方式列表
- 保存支付方式
- 删除支付方式
商店管理员 从所有管理器继承权限。
小工具
推荐产品
示例
<?= \albertgeeca\shop\widgets\RecommendedProducts::widget([
'id' => $product->id,
]); ?>
您还可以在视图中使用 albertgeeca\shop\widgets\assets\RecommendedProductsAsset。
筛选小工具
要使用此小工具,您必须在模型中设置关系。例如在产品模型中
/** * @return \yii\db\ActiveQuery */ public function getProductCountry() { return $this->hasOne(ProductCountry::className(), ['id' => 'country_id']); }
日志记录
您的应用程序可以记录多少人观看特定产品。要启用日志记录,您必须在前端配置文件中添加以下设置
public $log = [
'enabled' => true,
'maxProducts' => 10 // Max number of viewed products by one user.
];
在其中,您指定产品数量,该数量存储在 shop_product_views 表中。此值可以是 'all',即无限。
如果 'maxProducts' 属性值为 "all",则对于注册用户,产品对象的 "观看次数" 将增加一次。否则,每次注册用户查看产品时都会增加一次。
翻译
该模块在几种语言上有翻译。如果没有您的语言或您想自己更改它,您可以在后端或前端配置文件中进行配置
'i18n' => [
'translations' => [
'shop' => [
'class' => 'yii\i18n\PhpMessageSource',
'basePath' => '@backend/messages',
'sourceLanguage' => 'en-us',
]
],
],
管理页面
- 商店主要静态页面 /admin/seo/static/save-page?page_key=shop&languageId=2
- 分类 /admin/shop/category/index
- 产品 /admin/shop/product/index
- 国家 /admin/shop/country/index
- 供应商 /admin/shop/vendor/index
- 属性 /admin/shop/attribute/index
- 可用性状态 /admin/shop/product-availability/index
- 货币 /admin/shop/currency/index
报告
- "找不到类 'Imagick'"
如果您使用 PHP 7 与 OpenServer,您必须像这里一样安装 Imagick 扩展 http://open-server.ru/forum/viewtopic.php?f=4&t=2897&hilit=imagick
产品显示
您可以选择两种模式之一:显示当前分类及其子分类的产品,或仅显示当前分类。使用 frontend Module 类配置中的 $showChildCategoriesProducts 属性。迁移
日志记录 此配置适用于商店模块和购物车模块。
要启用日志记录,请将日志组件添加到您的通用配置文件中
'components' => [
'log' => [
'targets' => [
[
'logTable' => 'shop_log',
'class' => 'yii\log\DbTarget',
'levels' => ['info'],
'categories' => [
'afterCreateProduct', 'afterDeleteProduct', 'afterEditProduct',
'afterCreateCategory', 'afterEditCategory', 'afterDeleteCategory',
],
],
[
'logTable' => 'cart_log',
'class' => 'yii\log\DbTarget',
'levels' => ['info'],
'categories' => [
'afterChangeOrderStatus'
],
],
[
'logTable' => 'user_log',
'class' => 'yii\log\DbTarget',
'levels' => ['info'],
'categories' => [
'afterRegister', 'afterConfirm'
],
],
],
],
然后应用迁移,但请在配置您的应用程序后再进行。迁移将在配置中列出的日志目标创建表。
php yii migrate --migrationPath=@yii/log/migrations/
在模块的后端和前端配置中添加
'enableLog' => true,
供应商列表
- /shop/vendor
合作伙伴请求电子邮件 创建新的模板 'partner-request-manager' 和 'partner-request-partner':/admin/email-templates/default/list
您可以使用以下变量:'{contact_person}','{company_name}','{website}','{message}','{name}','{surname}','{patronymic}','{info}'
还可以创建不带变量的模板 'partner-request-accept'。
产品合作伙伴向经理提供的新产品信息 - 模板 'new-product-to-manager'。您可以使用以下变量:{productId},{title},{ownerId},{ownerEmail},{owner},{link}。为向创建此产品的合作伙伴发送新产品信息,请添加模板 'new-product-to-partner',并使用变量 {productId},{title},{ownerId},{ownerEmail},{owner},{link}。
如果产品经过审核并且状态为 'accept',则会发送邮件 'accept-product-to-owner'。您可以使用变量:{title},{ownerEmail},{owner},{link}。
链接
Dektrium-User 模块: https://github.com/dektrium/yii2-user