Bladeren bron

store 配置化

chengwl 5 jaren geleden
bovenliggende
commit
2c5b228240

+ 1 - 154
appfront/config/fecshop_local_services/Store.php

@@ -3,160 +3,7 @@
    'store' => [
    'store' => [
         'class'  => 'fecshop\services\Store',
         'class'  => 'fecshop\services\Store',
         'stores' => [
         'stores' => [
-            // store key:域名去掉http部分,作为key,这个必须这样定义。
-            'appfront.fecshoptest.com' => [
-                'language'         => 'en_US',        // 语言简码需要在@common/config/fecshop_local_services/FecshopLang.php 中定义。
-                'languageName'     => 'English',    // 语言简码对应的文字名称,将会出现在语言切换列表中显示。
-                'localThemeDir'    => '@appfront/theme/terry/theme01', // 设置当前store对应的模板路径。关于多模板的方面的知识,您可以参看fecshop多模板的知识。
-                'thirdThemeDir'    => [ // 第三方模板路径,数组,可以多个路径
-
-                ],  
-                'currency'         => 'USD', // 当前store的默认货币,这个货币简码,必须在货币配置中配置
-                /*
-                 * 当设备满足什么条件的时候,进行跳转。
-                 * 这种方式不怎么高效,最好的方式是在nginx中配置。
-                 */
-                'mobile'        => [
-                    'enable'            => true,
-                    'condition'         => ['phone', 'tablet'], // phone 代表手机,tablet代表平板,当都填写,代表手机和平板都会进行跳转
-                    'redirectDomain'    => 'demo.fancyecommerce.com',    // 如果是移动设备访问进行域名跳转,这里填写的值为store key
-                    'https'             => false,  // 手机端url是否支持https,如果支持,设置https为true,如果不支持,设置为false
-                    'type'              => 'appserver',  //  填写值选择:[apphtml5, appserver],如果是 apphtml5 , 则表示跳转到html5入口,如果是appserver,则表示跳转到vue这种appserver对应的入口
-                ],
-                // 第三方账号登录配置
-                'thirdLogin' => [
-                    // facebook账号登录
-                    'facebook' => [       //fb api配置 ,fb可以一个app设置pc和手机web两个域名
-                        'facebook_app_id'     => '108618299786621',
-                        'facebook_app_secret' => '420b56da4f4664a4d1065a1d31e5ec73',
-                    ],
-                    // google账号登录
-                    'google' => [       //谷歌api visit https://code.google.com/apis/console to generate your google api
-                        'CLIENT_ID'      => '380372364773-qdj1seag9bh2n0pgrhcv2r5uoc58ltp3.apps.googleusercontent.com',
-                        'CLIENT_SECRET'  => 'ei8RaoCDoAlIeh1nHYm0rrwO',
-                    ],
-                ],
-                // 用于sitemap生成中域名。
-                'https'            => true,
-                // sitemap的路径。
-                'sitemapDir' => '@appfront/web/sitemap.xml',
-            ],
-            'fecshop.appfront.fancyecommerce.com/fr' => [
-                'language'         => 'fr_FR',
-                'languageName'     => 'Français',
-                'localThemeDir'    => '@appfront/theme/terry/theme01',
-                'thirdThemeDir'    => [ // 第三方模板路径,数组,可以多个路径
-                    '@fecshop/theme/rosegal/appfront/theme/rosegal',
-                ], 
-                'currency'         => 'RMB',
-                'mobile'           => [
-                    'enable'               => true,
-                    'condition'            => ['phone'], // phone 代表手机,tablet代表平板。
-                    'redirectDomain'       => 'fecshop.apphtml5.fancyecommerce.com/fr', // 跳转后的url。
-                    'https'             => false,  // 手机端url是否支持https,如果支持,设置https为true,如果不支持,设置为false
-                    'type'              => 'apphtml5',  //  填写值选择:[apphtml5, appserver],如果是 apphtml5 , 则表示跳转到html5入口,如果是appserver,则表示跳转到vue这种appserver对应的入口
-                ],
-                // 第三方账号登录配置
-                'thirdLogin' => [
-                    // facebook账号登录
-                    'facebook' => [       //fb api配置 ,fb可以一个app设置pc和手机web两个域名
-                        'facebook_app_id'     => '108618299786621',
-                        'facebook_app_secret' => '420b56da4f4664a4d1065a1d31e5ec73',
-                    ],
-                    // google账号登录
-                    'google' => [       //谷歌api visit https://code.google.com/apis/console to generate your google api
-                        'CLIENT_ID'      => '380372364773-qdj1seag9bh2n0pgrhcv2r5uoc58ltp3.apps.googleusercontent.com',
-                        'CLIENT_SECRET'  => 'ei8RaoCDoAlIeh1nHYm0rrwO',
-                    ],
-                ],
-                'sitemapDir' => '@appfront/web/fr/sitemap.xml',
-            ],
-            'fecshop.appfront.es.fancyecommerce.com' => [
-                'language'         => 'es_ES',
-                'languageName'     => 'Español',
-                'localThemeDir'    => '@appfront/theme/terry/theme01',
-                'thirdThemeDir'    => ['@fectfurnilife/appfront/theme/furnilife',],
-                'currency'         => 'USD',
-                'mobile'           => [
-                    'enable'            => false,
-                    'condition'         => ['tablet'],
-                    'redirectDomain'    => 'fecshop.apphtml5.es.fancyecommerce.com',
-                    'https'             => false,  // 手机端url是否支持https,如果支持,设置https为true,如果不支持,设置为false
-                    'type'              => 'apphtml5',  //  填写值选择:[apphtml5, appserver],如果是 apphtml5 , 则表示跳转到html5入口,如果是appserver,则表示跳转到vue这种appserver对应的入口
-                ],
-                // 第三方账号登录配置
-                'thirdLogin' => [
-                    // facebook账号登录
-                    'facebook' => [       //fb api配置 ,fb可以一个app设置pc和手机web两个域名
-                        'facebook_app_id'     => '108618299786621',
-                        'facebook_app_secret' => '420b56da4f4664a4d1065a1d31e5ec73',
-                    ],
-                    // google账号登录
-                    'google' => [       //谷歌api visit https://code.google.com/apis/console to generate your google api
-                        'CLIENT_ID'      => '380372364773-qdj1seag9bh2n0pgrhcv2r5uoc58ltp3.apps.googleusercontent.com',
-                        'CLIENT_SECRET'  => 'ei8RaoCDoAlIeh1nHYm0rrwO',
-                    ],
-                ],
-                'sitemapDir' => '@appfront/web/sitemap_es.xml',
-            ],
-            'fecshop.appfront.fancyecommerce.com/cn' => [
-                'language'         => 'zh_CN',
-                'languageName'     => '中文',
-                'localThemeDir'    => '@appfront/theme/terry/theme01',
-                'thirdThemeDir'    => [],
-                'currency'         => 'CNY',
-                'mobile'        => [
-                    'enable'            => true,
-                    'condition'         => ['phone', 'tablet'], // phone 代表手机,tablet代表平板,当都填写,代表手机和平板都会进行跳转
-                    'redirectDomain'    => 'demo.fancyecommerce.com',    // 如果是移动设备访问进行域名跳转,这里填写的值为store key
-                    'https'             => false,  // 手机端url是否支持https,如果支持,设置https为true,如果不支持,设置为false
-                    'type'              => 'appserver',  //  填写值选择:[apphtml5, appserver],如果是 apphtml5 , 则表示跳转到html5入口,如果是appserver,则表示跳转到vue这种appserver对应的入口
-                ],
-                // 第三方账号登录配置
-                'thirdLogin' => [
-                    // facebook账号登录
-                    'facebook' => [       //fb api配置 ,fb可以一个app设置pc和手机web两个域名
-                        'facebook_app_id'     => '108618299786621',
-                        'facebook_app_secret' => '420b56da4f4664a4d1065a1d31e5ec73',
-                    ],
-                    // google账号登录
-                    'google' => [       //谷歌api visit https://code.google.com/apis/console to generate your google api
-                        'CLIENT_ID'      => '380372364773-qdj1seag9bh2n0pgrhcv2r5uoc58ltp3.apps.googleusercontent.com',
-                        'CLIENT_SECRET'  => 'ei8RaoCDoAlIeh1nHYm0rrwO',
-                    ],
-                ],
-                'sitemapDir' => '@appfront/web/cn/sitemap.xml',
-            ],
-            
-            
-            'fecshop.appfront.fancyecommerce.com/it' => [
-                'language'         => 'it_IT',  
-                'languageName'     => 'Italiano',
-                'localThemeDir'    => '@appfront/theme/terry/theme01',
-                'thirdThemeDir'    => [],
-                'currency'         => 'RMB',
-                'mobile'           => [
-                    'enable'               => false,
-                    'condition'            => ['phone'], // phone 代表手机,tablet代表平板。
-                    'redirectDomain'       => 'fecshop.apphtml5.fancyecommerce.com/it', // 跳转后的url。
-                    'https'             => false,  // 手机端url是否支持https,如果支持,设置https为true,如果不支持,设置为false
-                    'type'              => 'apphtml5',  //  填写值选择:[apphtml5, appserver],如果是 apphtml5 , 则表示跳转到html5入口,如果是appserver,则表示跳转到vue这种appserver对应的入口
-                ],
-                // 第三方账号登录配置
-                'thirdLogin' => [
-                    // facebook账号登录
-                    'facebook' => [       //fb api配置 ,fb可以一个app设置pc和手机web两个域名
-                        'facebook_app_id'     => '108618299786621',
-                        'facebook_app_secret' => '420b56da4f4664a4d1065a1d31e5ec73',
-                    ],
-                    // google账号登录
-                    'google' => [       //谷歌api visit https://code.google.com/apis/console to generate your google api
-                        'CLIENT_ID'      => '380372364773-qdj1seag9bh2n0pgrhcv2r5uoc58ltp3.apps.googleusercontent.com',
-                        'CLIENT_SECRET'  => 'ei8RaoCDoAlIeh1nHYm0rrwO',
-                    ],
-                ],
-                'sitemapDir' => '@appfront/web/it/sitemap.xml',
-            ],
+           
         ],
         ],
 
 
     ],
     ],

+ 0 - 103
apphtml5/config/fecshop_local_services/Store.php

@@ -3,110 +3,7 @@
    'store' => [
    'store' => [
         'class'  => 'fecshop\services\Store',
         'class'  => 'fecshop\services\Store',
         'stores' => [
         'stores' => [
-            // store key:域名去掉http部分,作为key,这个必须这样定义。
-            'apphtml5.fecshoptest.com' => [
-                'language'         => 'en_US',        // 语言简码需要在@common/config/fecshop_local_services/FecshopLang.php 中定义。
-                'languageName'     => 'English',    // 语言简码对应的文字名称,将会出现在语言切换列表中显示。
-                'localThemeDir'    => '@apphtml5/theme/terry/theme01', // 设置当前store对应的模板路径。关于多模板的方面的知识,您可以参看fecshop多模板的知识。
-                'thirdThemeDir'    => [],  // 第三方模板路径,数组,可以多个路径
-                'currency'         => 'USD', // 当前store的默认货币,这个货币简码,必须在货币配置中配置
 
 
-                // 第三方账号登录配置
-                'thirdLogin' => [
-                    // facebook账号登录
-                    'facebook' => [       //fb api配置 ,fb可以一个app设置pc和手机web两个域名
-                        'facebook_app_id'     => '108618299786621',
-                        'facebook_app_secret' => '420b56da4f4664a4d1065a1d31e5ec73',
-                    ],
-                    // google账号登录
-                    'google' => [       //谷歌api visit https://code.google.com/apis/console to generate your google api
-                        'CLIENT_ID'      => '380372364773-qdj1seag9bh2n0pgrhcv2r5uoc58ltp3.apps.googleusercontent.com',
-                        'CLIENT_SECRET'  => 'ei8RaoCDoAlIeh1nHYm0rrwO',
-                    ],
-                ],
-                // 用于sitemap生成中域名。
-                'https'            => false,
-                // sitemap的路径。
-                'sitemapDir' => '@apphtml5/web/sitemap.xml',
-            ],
-            'fecshop.apphtml5.fancyecommerce.com/fr' => [
-                'language'         => 'fr_FR',
-                'languageName'     => 'Français',
-                'localThemeDir'    => '@apphtml5/theme/terry/theme01',
-                'thirdThemeDir'    => [],
-                'currency'         => 'RMB',
-                'mobile'           => [
-                    'enable'               => false,
-                    'condition'            => ['phone'], // phone 代表手机,tablet代表平板。
-                    'redirectDomain'       => 'fecshop.apphtml5.fancyecommerce.com/fr', // 跳转后的url。
-                ],
-                // 第三方账号登录配置
-                'thirdLogin' => [
-                    // facebook账号登录
-                    'facebook' => [       //fb api配置 ,fb可以一个app设置pc和手机web两个域名
-                        'facebook_app_id'     => '108618299786621',
-                        'facebook_app_secret' => '420b56da4f4664a4d1065a1d31e5ec73',
-                    ],
-                    // google账号登录
-                    'google' => [       //谷歌api visit https://code.google.com/apis/console to generate your google api
-                        'CLIENT_ID'      => '380372364773-qdj1seag9bh2n0pgrhcv2r5uoc58ltp3.apps.googleusercontent.com',
-                        'CLIENT_SECRET'  => 'ei8RaoCDoAlIeh1nHYm0rrwO',
-                    ],
-                ],
-                'sitemapDir' => '@apphtml5/web/fr/sitemap.xml',
-            ],
-            'fecshop.apphtml5.es.fancyecommerce.com' => [
-                'language'         => 'es_ES',
-                'languageName'     => 'Español',
-                'localThemeDir'    => '@apphtml5/theme/terry/theme01',
-                'thirdThemeDir'    => [],
-                'currency'         => 'USD',
-                'mobile'           => [
-                    'enable'            => false,
-                    'condition'         => ['tablet'],
-                    'redirectDomain'    => 'fecshop.apphtml5.es.fancyecommerce.com',
-                ],
-                // 第三方账号登录配置
-                'thirdLogin' => [
-                    // facebook账号登录
-                    'facebook' => [       //fb api配置 ,fb可以一个app设置pc和手机web两个域名
-                        'facebook_app_id'     => '108618299786621',
-                        'facebook_app_secret' => '420b56da4f4664a4d1065a1d31e5ec73',
-                    ],
-                    // google账号登录
-                    'google' => [       //谷歌api visit https://code.google.com/apis/console to generate your google api
-                        'CLIENT_ID'      => '380372364773-qdj1seag9bh2n0pgrhcv2r5uoc58ltp3.apps.googleusercontent.com',
-                        'CLIENT_SECRET'  => 'ei8RaoCDoAlIeh1nHYm0rrwO',
-                    ],
-                ],
-                'sitemapDir' => '@apphtml5/web/sitemap_es.xml',
-            ],
-            'fecshop.apphtml5.fancyecommerce.com/cn' => [
-                'language'         => 'zh_CN',
-                'languageName'     => '中文',
-                'localThemeDir'    => '@apphtml5/theme/terry/theme01',
-                'thirdThemeDir'    => [],
-                'currency'         => 'CNY',
-                'mobile'           => [
-                    'enable'            => false,
-                    'condition'         => ['phone', 'tablet'],
-                    'redirectDomain'    => 'fecshop.apphtml5.fancyecommerce.com/cn',
-                ],
-                // 第三方账号登录配置
-                'thirdLogin' => [
-                    // facebook账号登录
-                    'facebook' => [       //fb api配置 ,fb可以一个app设置pc和手机web两个域名
-                        'facebook_app_id'     => '108618299786621',
-                        'facebook_app_secret' => '420b56da4f4664a4d1065a1d31e5ec73',
-                    ],
-                    // google账号登录
-                    'google' => [       //谷歌api visit https://code.google.com/apis/console to generate your google api
-                        'CLIENT_ID'      => '380372364773-qdj1seag9bh2n0pgrhcv2r5uoc58ltp3.apps.googleusercontent.com',
-                        'CLIENT_SECRET'  => 'ei8RaoCDoAlIeh1nHYm0rrwO',
-                    ],
-                ],
-                'sitemapDir' => '@apphtml5/web/cn/sitemap.xml',
-            ],
         ],
         ],
 
 
     ],
     ],

+ 13 - 0
vendor/fancyecommerce/fecshop/config/services/StoreDomain.php

@@ -0,0 +1,13 @@
+<?php
+/**
+ * FecShop file.
+ *
+ * @link http://www.fecshop.com/
+ * @copyright Copyright (c) 2016 FecShop Software LLC
+ * @license http://www.fecshop.com/license/
+ */
+return [
+    'storeDomain' => [
+        'class' => 'fecshop\services\StoreDomain',
+    ],
+];

+ 28 - 0
vendor/fancyecommerce/fecshop/models/mysqldb/StoreDomain.php

@@ -0,0 +1,28 @@
+<?php
+/**
+ * FecShop file.
+ *
+ * @link http://www.fecshop.com/
+ * @copyright Copyright (c) 2016 FecShop Software LLC
+ * @license http://www.fecshop.com/license/
+ */
+
+namespace fecshop\models\mysqldb;
+
+use yii\db\ActiveRecord;
+use yii\base\InvalidValueException;
+
+/**
+ * @author Terry Zhao <2358269014@qq.com>
+ * @since 1.0
+ */
+class StoreDomain extends ActiveRecord
+{
+    public static function tableName()
+    {
+        return '{{%store_domain}}';
+    }
+
+}
+
+

+ 132 - 0
vendor/fancyecommerce/fecshop/services/Store.php

@@ -65,6 +65,13 @@ class Store extends Service
     
     
     public $apiAppNameArr = ['appserver','appapi'];
     public $apiAppNameArr = ['appserver','appapi'];
 
 
+    public function init()
+    {
+        parent::init();
+        
+        $this->initCurrentStoreConfig();
+    }
+
     // 是否是api入口
     // 是否是api入口
     public function isApiStore()
     public function isApiStore()
     {
     {
@@ -75,6 +82,16 @@ class Store extends Service
             return false;
             return false;
         }
         }
     }
     }
+    public function isAppserver()
+    {
+        $appServerArr = ['appserver'];
+        $currentAppName = $this->getCurrentAppName();
+        if (in_array($currentAppName, $appServerArr)) {
+            return true;
+        }
+        
+        return false;
+    }
 
 
 
 
     /**
     /**
@@ -85,7 +102,122 @@ class Store extends Service
     {
     {
         return Yii::$app->params['appName'];
         return Yii::$app->params['appName'];
     }
     }
+        // 初始化store配置
+    public function initCurrentStoreConfig()
+    {
+        $currentAppName = $this->getCurrentAppName();
+        if ($this->isAppserver()) {
+            return $this->initAppserverCurrentStoreConfig(); 
+        }
+        $coll = Yii::$service->storeDomain->getCollByAppName($currentAppName);
+        if (is_array($coll)) {
+            foreach ($coll as $one) {
+                $storeKey = $one['key'];
+                $lang = $one['lang'];
+                $lang_name = $one['lang_name'];
+                $local_theme_dir = $one['local_theme_dir'];
+                $third_theme_dir = $one['third_theme_dir'] ? explode(',',$one['third_theme_dir']) : '';
+                $currency = $one['currency'];
+                $mobile_enable = $one['mobile_enable'] == 1 ? true : false;
+                $mobile_condition = $one['mobile_condition'] ? explode(',',$one['mobile_condition']) : '';
+                $mobile_redirect_domain = $one['mobile_redirect_domain'];
+                $mobile_https_enable = $one['mobile_https_enable'] == 1 ? true : false;
+                $mobile_type = $one['mobile_type'];
+                $facebook_login_app_id = $one['facebook_login_app_id'];
+                $facebook_login_app_secret = $one['facebook_login_app_secret'];
+                $google_login_client_id = $one['google_login_client_id'];
+                $google_login_client_secret = $one['google_login_client_secret'];
+                $https_enable = $one['https_enable'] == 1 ? true : false;
+                $sitemap_dir = $one['sitemap_dir'];
+                // set config stores
+                $this->stores[$storeKey] = [
+                    'language'         => $lang,        // 语言简码需要在@common/config/fecshop_local_services/FecshopLang.php 中定义。
+                    'languageName'     => $lang_name,    // 语言简码对应的文字名称,将会出现在语言切换列表中显示。
+                    'localThemeDir'    => $local_theme_dir, // 设置当前store对应的模板路径。关于多模板的方面的知识,您可以参看fecshop多模板的知识。
+                    'thirdThemeDir'    => $third_theme_dir, // 第三方模板路径,数组,可以多个路径
+                    'currency'         => $currency, // 当前store的默认货币,这个货币简码,必须在货币配置中配置
+                    // 用于sitemap生成中域名。
+                    'https'            => $https_enable,
+                    // sitemap的路径。
+                    'sitemapDir' => $sitemap_dir,
+                ];
+                if ($mobile_condition && $mobile_redirect_domain && $mobile_type) {
+                    $this->stores[$storeKey]['mobile'] = [
+                        'enable'             => $mobile_enable,
+                        'condition'         => $mobile_condition, // phone 代表手机,tablet代表平板,当都填写,代表手机和平板都会进行跳转
+                        'redirectDomain'    => $mobile_redirect_domain,    // 如果是移动设备访问进行域名跳转,这里填写的值为store key
+                        'https'               => $mobile_https_enable,  // 手机端url是否支持https,如果支持,设置https为true,如果不支持,设置为false
+                        'type'                => $mobile_type,  //  填写值选择:[apphtml5, appserver],如果是 apphtml5 , 则表示跳转到html5入口,如果是appserver,则表示跳转到vue这种appserver对应的入口
+                    ];
+                }
+                // 第三方账号登录配置
+                if ($facebook_login_app_id && $facebook_login_app_secret)  {
+                    $this->stores[$storeKey]['thirdLogin']['facebook'] = [
+                        'facebook_app_id'     => $facebook_login_app_id,
+                        'facebook_app_secret' => $facebook_login_app_secret,
+                    ];
+                }
+                // 第三方账号登录配置
+                if ($google_login_client_id && $google_login_client_secret)  {
+                    $this->stores[$storeKey]['thirdLogin']['google'] = [
+                        'CLIENT_ID'     => $google_login_client_id,
+                        'CLIENT_SECRET' => $google_login_client_secret,
+                    ];
+                }
+            }
+        }
+        
+        return true;
+    }
+            // 如果入口是appserver,那么通过这个函数初始化
+    public function initAppserverCurrentStoreConfig()
+    {
+        $appserver_store_config = Yii::$app->store->get('appserver_store');
+        $storeKey = $appserver_store_config['key'];
+        $lang = $appserver_store_config['lang'];
+        $lang_name = $appserver_store_config['lang_name'];
+        $currency = $appserver_store_config['currency'];
+        $facebook_login_app_id = $appserver_store_config['facebook_login_app_id'];
+        $facebook_login_app_secret = $appserver_store_config['facebook_login_app_secret'];
+        $google_login_client_id = $appserver_store_config['google_login_client_id'];
+        $google_login_client_secret = $appserver_store_config['google_login_client_secret'];
+        $https_enable = $appserver_store_config['https_enable'] == 1 ? true : false;
+        // set config stores
+        $this->stores[$storeKey] = [
+            'language'         => $lang,        // 语言简码需要在@common/config/fecshop_local_services/FecshopLang.php 中定义。
+            'languageName'     => $lang_name,    // 语言简码对应的文字名称,将会出现在语言切换列表中显示。
+            'currency'         => $currency, // 当前store的默认货币,这个货币简码,必须在货币配置中配置
+            // 用于sitemap生成中域名。
+            'https'            => $https_enable,
+        ];
+        // 第三方账号登录配置
+        if ($facebook_login_app_id && $facebook_login_app_secret)  {
+            $this->stores[$storeKey]['thirdLogin']['facebook'] = [
+                'facebook_app_id'     => $facebook_login_app_id,
+                'facebook_app_secret' => $facebook_login_app_secret,
+            ];
+        }
+        // 第三方账号登录配置
+        if ($google_login_client_id && $google_login_client_secret)  {
+            $this->stores[$storeKey]['thirdLogin']['google'] = [
+                'CLIENT_ID'     => $google_login_client_id,
+                'CLIENT_SECRET' => $google_login_client_secret,
+            ];
+        }
+        // 初始化语言。
+        $this->stores[$storeKey]['serverLangs'] = Yii::$app->store->get('appserver_store_lang');
+        // 通过该方法,初始化货币services,直接从headers中取出来currency。进行set,这样currency就不会从session中读取(fecshop-2版本对于appserver已经抛弃session servcies)
+        Yii::$service->page->currency->appserverSetCurrentCurrency();
+        
+        return true;
+    }
     
     
+
+
+
+
+
+
     /**
     /**
      *	Bootstrap:init website,  class property $currentLang ,$currentTheme and $currentStore.
      *	Bootstrap:init website,  class property $currentLang ,$currentTheme and $currentStore.
      *  if you not config this ,default class property will be set.
      *  if you not config this ,default class property will be set.

+ 165 - 0
vendor/fancyecommerce/fecshop/services/StoreDomain.php

@@ -0,0 +1,165 @@
+<?php
+
+/*
+ * FecShop file.
+ *
+ * @link http://www.fecshop.com/
+ * @copyright Copyright (c) 2016 FecShop Software LLC
+ * @license http://www.fecshop.com/license/
+ */
+
+namespace fecshop\services;
+
+use Yii;
+
+/**
+ * Cart services. 购物车service, 执行购物车部分对应的方法。
+ *
+ * @property \fecshop\services\cart\Coupon $coupon coupon sub-service of cart
+ * @property \fecshop\services\cart\Info $info info sub-service of cart
+ * @property \fecshop\services\cart\Quote $quote quote sub-service of cart
+ * @property \fecshop\services\cart\QuoteItem $quoteItem quoteItem sub-service of cart
+ *
+ * @method getCartInfo($activeProduct, $shippingMethod = '', $country = '', $region = '*') see [[\fecshop\services\Cart::actionGetCartInfo()]]
+ * @method mergeCartAfterUserLogin() see [[\fecshop\services\Cart::actionmergeCartAfterUserLogin()]]
+ *
+ * @author Terry Zhao <2358269014@qq.com>
+ * @since 1.0
+ */
+class StoreDomain extends Service
+{
+    
+    public $numPerPage = 20;
+
+    protected $_modelName = '\fecshop\models\mysqldb\StoreDomain';
+
+    protected $_model;
+    
+    //protected $_serilizeAttr = [
+    //    "service_db",
+    //];
+    
+    public function init()
+    {
+        parent::init();
+        list($this->_modelName, $this->_model) = Yii::mapGet($this->_modelName);
+    }
+    
+    public function getPrimaryKey()
+    {
+        return 'id';
+    }
+
+    public function getByPrimaryKey($primaryKey)
+    {
+        if ($primaryKey) {
+            $one = $this->_model->findOne($primaryKey);
+            
+            return $one;
+        } else {
+            return new $this->_modelName();
+        }
+    }
+    
+    public function getByKey($key)
+    {
+        if ($key) {
+            $one = $this->_model->findOne(['key' => $key]);
+            
+            return $one;
+        }
+        
+        return null;
+    }
+    
+
+    /*
+     * example filter:
+     * [
+     * 		'numPerPage' 	=> 20,
+     * 		'pageNum'		=> 1,
+     * 		'orderBy'	=> ['_id' => SORT_DESC, 'sku' => SORT_ASC ],
+            'where'			=> [
+                ['>','price',1],
+                ['<=','price',10]
+     * 			['sku' => 'uk10001'],
+     * 		],
+     * 	'asArray' => true,
+     * ]
+     */
+    public function coll($filter = '')
+    {
+        $query = $this->_model->find();
+        $query = Yii::$service->helper->ar->getCollByFilter($query, $filter);
+        $coll = $query->all();
+        return [
+            'coll' => $coll,
+            'count'=> $query->limit(null)->offset(null)->count(),
+        ];
+    }
+    // 通过appName得到相应的store配置数组
+    public function getCollByAppName($app_name)
+    {
+        $filter = [
+            'where' => [
+                ['app_name' => $app_name, 'status' => 1,],
+                
+            ],
+            'fetchAll' => true,
+            'asArray' => true,
+        ];
+        $query = $this->_model->find();
+        $query = Yii::$service->helper->ar->getCollByFilter($query, $filter);
+        return $query->all();
+    }
+    
+    /**
+     * @param $one|array
+     * save $data to cms model,then,add url rewrite info to system service urlrewrite.
+     */
+    public function save($one)
+    {
+        $currentDateTime = \fec\helpers\CDate::getCurrentDateTime();
+        $primaryVal = isset($one[$this->getPrimaryKey()]) ? $one[$this->getPrimaryKey()] : '';
+        
+        if ($primaryVal) {
+            $model = $this->_model->findOne($primaryVal);
+            if (!$model) {
+                Yii::$service->helper->errors->add('config {primaryKey} is not exist', ['primaryKey' => $this->getPrimaryKey()]);
+
+                return;
+            }
+        } else {
+            $model = new $this->_modelName();
+            $model->created_at = time();
+        }
+        $model->updated_at = time();
+        
+        $primaryKey = $this->getPrimaryKey();
+        $model      = Yii::$service->helper->ar->save($model, $one);
+        $primaryVal = $model[$primaryKey];
+
+        return true;
+    }
+    
+    public function remove($ids)
+    {
+        if (!$ids) {
+            Yii::$service->helper->errors->add('remove id is empty');
+
+            return false;
+        }
+        if (is_array($ids) && !empty($ids)) {
+            foreach ($ids as $id) {
+                $model = $this->_model->findOne($id);
+                $model->delete();
+            }
+        } else {
+            $id = $ids;
+            $model = $this->_model->findOne($id);
+            $model->delete();
+        }
+
+        return true;
+    }
+}