M2支持多网站(
website
)多网店(store
)多视图(store view
)。
关于这3者区别 请看官方介绍:
https://docs.magento.com/m2/ce/user_guide/stores/websites-stores-views.html
比如我有2个网店,中文站和英文站
2个网站的分类和产品基本一样,只是翻译不同。
如果只是翻译不同的话 可以用一个store
+多store view
。
- 英文站(默认站) -> magento2demo.texiaoyao.cm
- 中文站 -> magento2demo-zh.texiaoyao.cn
注意:magento2demo-zh.texiaoyao.cn需要先域名解析
创建中文store view
好的,创建完成后,我们就去configuration页面设置域名
设置中文站
选择中文
,点击确定
把国家设为中国,语言设为中文
保存,点击右上角的'Save Config'
设置域名
保存,点击右上角的'Save Config'
前台测试
可以看到 前台可以直接切换到中文站
见鬼了,发现打不开。
别慌,这是因为你没有在nginx里配置。
Nginx虚拟主机里增加域名
好吧。我们继续到服务器里配置nginx的虚拟主机。
这个稍微有点复杂,仔细看。
还记得之前我们是怎么配置的吗?
之前在 /etc/nginx/sites-enabled/magento2
里
我们继续编辑该文件
改成
upstream fastcgi_backend {
server unix:/run/php/php7.0-fpm.sock;
}
map $http_host $MAGE_RUN_CODE {
magento2demo.texiaoyao.cn default;
magento2demo-zh.texiaoyao.cn cn;
}
server {
listen 80;
server_name magento2demo.texiaoyao.cn;
set $MAGE_ROOT /var/www/magento2;
set $MAGE_MODE developer;
set $MAGE_RUN_TYPE store;
include /var/www/magento2/nginx.conf.sample;
error_log /var/log/magento2/nginx/error.log;
}
server {
listen 80;
server_name magento2demo-zh.texiaoyao.cn;
set $MAGE_ROOT /var/www/magento2;
set $MAGE_MODE developer;
set $MAGE_RUN_TYPE store;
include /var/www/magento2/nginx.conf.sample;
error_log /var/log/magento2/nginx/error.log;
}
保存。
这里东西有点多,我一个个解释:
- 分了2个server。因为同时加在一个server里会有bug,在访问
http://magento2demo-zh.texiaoyao.cn
的时候 会跳转到默认的http://magento2demo.texiaoyao.cn
里去。 - 加了
map $http_host $MAGE_RUN_CODE
来给每个域名指定一个$MAGE_RUN_CODE
,这个$MAGE_RUN_CODE
就是m2后台创建store view
的时候设置的Code
标识符。通过这个Code
标识符我们才能找到这个store view
。 - 加了
set $MAGE_RUN_TYPE store
,因为我们的域名是设置的store view
,是属于store
的,所以MAGE_RUN_TYPE
是store
。如果我们的域名是设置的store
,store
是属于website
的,那么MAGE_RUN_TYPE
就是website
还需要改下/var/www/magento2/nginx.conf.sample
文件。
vim /var/www/magento2/nginx.conf.sample
把
location ~ (index|get|static|report|404|503|health_check)\.php$ {
try_files $uri =404;
fastcgi_pass fastcgi_backend;
fastcgi_buffers 1024 4k;
fastcgi_param PHP_FLAG "session.auto_start=off \n suhosin.session.cryptua=off";
fastcgi_param PHP_VALUE "memory_limit=756M \n max_execution_time=18000";
fastcgi_read_timeout 600s;
fastcgi_connect_timeout 600s;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
改成
location ~ (index|get|static|report|404|503|health_check)\.php$ {
try_files $uri =404;
fastcgi_pass fastcgi_backend;
fastcgi_buffers 1024 4k;
fastcgi_param PHP_FLAG "session.auto_start=off \n suhosin.session.cryptua=off";
fastcgi_param PHP_VALUE "memory_limit=756M \n max_execution_time=18000";
fastcgi_read_timeout 600s;
fastcgi_connect_timeout 600s;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# START - Multisite customization
fastcgi_param MAGE_RUN_TYPE $MAGE_RUN_TYPE;
fastcgi_param MAGE_RUN_CODE $MAGE_RUN_CODE;
fastcgi_param MAGE_MODE $MAGE_MODE;
# END - Multisite customization
include fastcgi_params;
}
主要加入了MAGE_RUN_TYPE
和MAGE_RUN_CODE
变量。
保存。
最后重启nginx和php7.0-fpm
sudo systemctl restart nginx
sudo systemctl restart php7.0-fpm
再浏览器访问http://magento2demo-zh.texiaoyao.cn
发现ok了。
妈蛋,怎么不是中文的?这还是显示的英文啊。
嗯,是的,m2自身不带中文语言包,需要我们自己安装。
好吧,请继续。
安装中文语言包
ssh登入服务器。
参考
https://github.com/zouhongzhao/magento2_zh_hans_cn
composer require zouhongzhao/magento2_zh_hans_cn:dev-master
或者用老外做的中文包
composer require mageplaza/magento-2-chinese-language-pack:dev-master
如果很慢的话,可以执行下面的语句
wget https://github.com/zouhongzhao/magento2_zh_hans_cn/archive/master.zip
mkdir -p app/i18n/Zouhongzhao
mv master.zip app/i18n/Zouhongzhao/
cd app/i18n/Zouhongzhao/
unzip master.zip
rm master.zip -rf
mv magento2_zh_hans_cn-master zh_Hans_CN
cd ../../../
php bin/magento i18n:pack -m replace /var/www/magento2/app/i18n/Zouhongzhao/zh_Hans_CN/zh_Hans_CN.csv -d zh_Hans_CN
最后更新下系统
rm -rf var/di/* && rm -rf var/generation/* && rm -rf var/cache/* && rm -rf var/page_cache/* && rm -rf var/view_preprocessed/* && rm -rf pub/static/* && rm -rf generated/* && mkdir var/di
php bin/magento setup:upgrade && php bin/magento setup:di:compile
php bin/magento setup:static-content:deploy en_US zh_Hans_CN -f
php bin/magento indexer:reindex
php bin/magento cache:clean
php bin/magento cache:flush
测试
浏览器刷新下,发现都变成中文了。
如何修改网店的根分类(Root Category)
见
//bbs.mallol.cn/?thread-170.htm
附录
1,Apache下的虚拟主机配置
sudo vim /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
ServerName magento2demo.texiaoyao.cn
DocumentRoot /var/www/magento2/pub/
SetEnv MAGE_MODE "developer"
</VirtualHost>
<VirtualHost *:80>
ServerName magento2demo-zh.texiaoyao.cn
DocumentRoot /var/www/magento2/pub/
SetEnv MAGE_MODE "developer"
SetEnv MAGE_RUN_CODE "cn"
SetEnv MAGE_RUN_TYPE "store"
</VirtualHost>
保存后,重启apache
CentOS: service httpd restart
Ubuntu: service apache2 restart
2,website级别的多网店多域名怎么配置呢?
我们上面说的是store view
级别的多网店多域名配置。
那么website
级别的怎么配置呢?
只是操作要麻烦些。
Create Website
,设置code
,比如我设置为b2c-cn
Create Store
,选择website
,选择Root Category
,设置code
Create Store View
,选择Store
,设置code
然后在去后台Configuration
配置页面,切换到对应的website
,给website
设置域名。
最后 在nginx里配置虚拟主机,有点不一样。
要把$MAGE_RUN_TYPE
改成website
。$MAGE_RUN_CODE
要改成Create Website
里设置的code
.
map $http_host $MAGE_RUN_CODE {
magento2demo.texiaoyao.cn base;
magento2demo-zh.texiaoyao.cn b2c-cn;
}
server {
listen 80;
server_name magento2demo.texiaoyao.cn;
set $MAGE_ROOT /var/www/magento2;
set $MAGE_MODE developer;
set $MAGE_RUN_TYPE website;
include /var/www/magento2/nginx.conf.sample;
error_log /var/log/magento2/nginx/error.log;
}
server {
listen 80;
server_name magento2demo-zh.texiaoyao.cn;
set $MAGE_ROOT /var/www/magento2;
set $MAGE_MODE developer;
set $MAGE_RUN_TYPE website;
include /var/www/magento2/nginx.conf.sample;
error_log /var/log/magento2/nginx/error.log;
}
最后重启下nginx就行了。