Magento 2: Xóa mã cửa hàng trong URL chỉ dành cho cửa hàng mặc định


9

Chúng tôi chạy một magento 2 multistore trong 2 langauges trong đó chế độ xem cửa hàng mặc định là tiếng Đức. Cửa hàng trực tuyến cũng có sẵn bằng tiếng Pháp. Mã cửa hàng được thêm vào các URL như sau:

www.domain.at
www.domain.at/de
www.domain.at/fr

Khi nói đến SEO, chúng tôi gặp vấn đề về nội dung trùng lặp vì cửa hàng mặc định có sẵn với AND mà không có mã cửa hàng URL. Các url sau đây hiển thị cùng một nội dung:

www.domain.at/de  
www.domain.at/

Trong thực tế, chúng ta cần hành vi tương tự như ở đây đối với magento 1: Magento xóa mã lưu trữ "mặc định" khỏi url

Có ai giải quyết được vấn đề này không?

Câu trả lời:


5

Ưu tiên \Magento\Store\Model\Store, ghi đè các chức năng được bảo vệ sau đây.

protected function _updatePathUseStoreView($url)
{
    if ($this->isUseStoreInUrl()) {
        $url .= $this->getCode() . '/';
    }
    return $url;
}

với mã dưới đây:

protected function _updatePathUseStoreView($url)
{
    if ($this->isUseStoreInUrl()) {
        if($this->getCode() == 'default'){
            $url .= '/';
        }else{
            $url .= $this->getCode() . '/';
        }

    }
    return $url;
}

Không hoạt động với trình chuyển đổi cửa hàng (mã cửa hàng được chờ đợi trước)
George

sử dụng plugin sau chức năng công khai làUseStoreInUrl, tốt hơn là thay đổi tùy chọn di, nâng cấp an toàn hơn, đó là lý do tại sao
DWils 23/2/18

2

Bạn có thể vô hiệu hóa mã cửa hàng thông qua quản trị viên ở đường dẫn bên dưới

Admin > Stores > Configuration > General > Web > URL options > Add Store Code to Urls > No

Giữ bộ đệm bị vô hiệu hóa hoặc chạy các lệnh nâng cấp / triển khai / bộ đệm nếu bạn không thấy các thay đổi


Chúng tôi không muốn xóa hoàn toàn mã cửa hàng khỏi URL. Chỉ dành cho chế độ xem cửa hàng mặc định (= de)
christoph

bạn có thể vui lòng giúp tôi về mageno 2.3 đa trang web magento.stackexchange.com/q/256694/57334 @Manoj Deswal
zus

2
  1. Tạo mô-đun mới trong Vendor / HideDefaultStoreCode

đăng ký.php

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Vendor_HideDefaultStoreCode',
    __DIR__
);

vv / module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Vendor_HideDefaultStoreCode" setup_version="0.1.0" />
</config>
  1. Thêm tùy chọn vào bảng quản trị

vv / adminhtml / system.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
    <system>
        <section id="web">
            <group id="url">
                <field id="hide_default_store_code" translate="label" type="select" sortOrder="100" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1">
                    <label>Hide Default Store Code</label>
                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
                </field>
            </group>
        </section>
    </system>
</config>

Giá trị tùy chọn mặc định là Không

vv / config.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
    <default>
        <web>
            <url>
                <hide_default_store_code>0</hide_default_store_code>
            </url>
        </web>
    </default>
</config>
  1. Thêm người trợ giúp

Người trợ giúp / Dữ liệu.php

<?php
namespace Vendor\HideDefaultStoreCode\Helper;

class Data extends \Magento\Framework\App\Helper\AbstractHelper
{
    const XML_PATH_HIDE_DEFAULT_STORE_CODE = 'web/url/hide_default_store_code';

    /**
     *
     * @var \Magento\Framework\App\Config\ScopeConfigInterface
     */
    protected $scopeConfig;

    /**
     *
     * @param \Magento\Framework\App\Helper\Context $context
     * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
     */
    public function __construct(
        \Magento\Framework\App\Helper\Context $context,
        \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
    ) {
        parent::__construct($context);
        $this->scopeConfig = $scopeConfig;
    }

    /**
     *
     * @return boolean
     */
    public function isHideDefaultStoreCode()
    {
        if ($this->scopeConfig->getValue(self::XML_PATH_HIDE_DEFAULT_STORE_CODE, \Magento\Store\Model\ScopeInterface::SCOPE_STORE)) {
            return true;
        }
        return false;
    }
}
  1. Tạo plugin sau

vv / di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Store\Model\Store">
        <plugin name="vendor_hide_default_store_code" type="\Vendor\HideDefaultStoreCode\Plugin\Model\HideDefaultStoreCode" sortOrder="0" />
    </type>
</config>

Plugin / Model / HideDefaultStoreCode.php

<?php

namespace Vendor\HideDefaultStoreCode\Plugin\Model;

class HideDefaultStoreCode
{
    /**
     *
     * @var \Vendor\HideDefaultStoreCode\Helper\Data 
     */
    protected $helper;

    /**
     *
     * @var \Magento\Store\Model\StoreManagerInterface
     */
    protected $storeManager;

    /**
     * 
     * @param \Vendor\HideDefaultStoreCode\Helper\Data $helper
     * @param \Magento\Store\Model\StoreManagerInterface $storeManager
     */
    public function __construct(
        \Vendor\HideDefaultStoreCode\Helper\Data $helper,
        \Magento\Store\Model\StoreManagerInterface $storeManager
    ){
        $this->helper = $helper;
        $this->storeManager = $storeManager;
    }

    /**
     * 
     * @param \Magento\Store\Model\Store $subject
     * @param string $url
     * @return string
     */
    public function afterGetBaseUrl(\Magento\Store\Model\Store $subject, $url)
    {
        if ($this->helper->isHideDefaultStoreCode()) {
            $url = str_replace('/'.$this->storeManager->getDefaultStoreView()->getCode().'/','/', $url);
        }
        return $url;
    }
}

Plugin của tôi để ẩn Mã cửa hàng mặc định - https://github.com/alex-79/magento2- leather - default-store-code - from - url


mở rộng tuyệt vời, nó làm việc cho tôi. tìm kiếm trong nhiều giờ
Amy

0

Tôi có cùng một vấn đề. Sau khi nghiên cứu ở đây, tôi có một giải pháp dựa trên câu trả lời của Renk hè. Trong phần phụ trợ, đặt "thêm mã cửa hàng". Hơn tạo một di.xml trong đường dẫn mở rộng của bạn trong "Nhà cung cấp / Mô-đun / etc / di.xml" cho một plugin.

<?xml version="1.0"?>
   <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
        <type name="\Magento\Store\Model\Store">
            <plugin name="RemoveDefaultStorePath" type="Vendor\Module\Plugin\RemoveDefaultStorePath" sortOrder="1" disabled="false" />
        </type>
    </config>

Sau đó, tạo lớp plugin trong "Nhà cung cấp / Mô-đun / plugin / RemoveDefaultStorePath.php" với chức năng theo sau là "sau" IsUseStoreInUrl để ghi đè hành vi tiêu chuẩn

<?php

namespace Vendor\Module\Plugin;


class RemoveDefaultStorePath
{
    public function afterIsUseStoreInUrl(\Magento\Store\Model\Store $subject, $resultIsUseInUrl)
    {
       if ($subject->getCode()==='default')
        {
          $resultIsUseInUrl = false;
          return $resultIsUseInUrl && 'default';
        }
        else
        {
          $resultIsUseInUrl = true;
          if(!$subject->getCode() ==='admin') {
            return $resultIsUseInUrl && $subject->getCode() . '/';
          } else {
            $resultIsUseInUrl = false;
            return $resultIsUseInUrl && $subject::ADMIN_CODE;
          }
       }
    }
}

Và hơn biên dịch và làm sạch bộ đệm.

php bin/magento setup:di:compile
php bin/magento cache:clean

Tôi hy vọng rằng, giúp đỡ ai đó - trong môi trường của tôi, giờ đây tôi đã có url url lưu trữ "mặc định" mà không có bất kỳ "store_code" bổ sung nào và đối với nhiều cửa hàng khác lưu trữ mã ưu tiên "en" / "fr", v.v. cấu hình cửa hàng - donet đã đặt mã cửa hàng thành url:

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.