Magento 2: Entfernen Sie den Geschäftscode in der URL nur für den Standardspeicher


9

Wir führen einen Magento 2-Multistore in 2 Sprachen aus, wobei die Standardspeicheransicht Deutsch ist. Online-Shop ist auch in Französisch verfügbar. Speichercode wird URLs wie den folgenden hinzugefügt:

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

Wenn es um SEO geht, haben wir das Problem, dass Inhalte doppelt vorhanden sind, da der Standardspeicher mit UND ohne Speichercode verfügbar ist URL. Die folgenden URLs zeigen den gleichen Inhalt:

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

Tatsächlich benötigen wir dasselbe Verhalten wie hier für Magento 1: Magento entfernt "Standard" -Speichercode aus URLs

Weiß jemand, wie man dieses Problem behebt?

Antworten:


5

Bevorzugt \Magento\Store\Model\Store, überschreiben Sie die folgende geschützte Funktion.

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

mit folgendem Code:

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

    }
    return $url;
}

Funktioniert nicht mit Store Switcher (Store Code erneut vorangestellt)
George

Verwenden Sie ein Plugin nach der öffentlichen Funktion isUseStoreInUrl, es ist besser als die di-Präferenz zu ändern, mehr Upgrade sicher, deshalb ist es da
DWils

2

Sie können die Geschäftscodes über den Administrator unter dem folgenden Pfad deaktivieren

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

Cache deaktivieren oder Upgrade / Deployment / Cache-Befehle ausführen, wenn die Änderungen nicht angezeigt werden


Wir möchten die Geschäftscodes nicht vollständig aus der URL entfernen. Nur für Standard Store View (= de)
Christoph

Können Sie mir bitte helfen für mageno 2.3 Multi-Website magento.stackexchange.com/q/256694/57334 @Manoj Deswal
zus

2
  1. Erstellen Sie ein neues Modul in Vendor / HideDefaultStoreCode

register.php

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

etc / 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. Fügen Sie dem Admin-Bereich eine Option hinzu

etc / 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>

Der Standardoptionswert ist Nein

etc / 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. Helfer hinzufügen

Helper / Data.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. After-Plugin erstellen

etc / 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;
    }
}

Mein Plugin zum Ausblenden des Standardspeichercodes - https://github.com/alex-79/magento2-hide-default-store-code-from-url


tolle Erweiterung, es hat bei mir funktioniert. stundenlang suchen.
Amy

0

Ich habe das gleiche Problem. Nach Recherchen hier habe ich eine Lösung basierend auf Rennens Antwort. Stellen Sie im Backend den "Store Code hinzufügen" ein. Dann erstellen Sie eine di.xml in Ihrem Erweiterungspfad unter "Vendor / Module / etc / di.xml" für ein 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>

Erstellen Sie anschließend die Plugin-Klasse unter "Vendor / Module / plugin / RemoveDefaultStorePath.php" mit der folgenden Funktion "after" IsUseStoreInUrl, um das Standardverhalten zu überschreiben

<?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;
          }
       }
    }
}

Und dann kompilieren und bereinigen Sie den Cache.

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

Ich hoffe das hilft jemandem - in meiner Umgebung habe ich jetzt die "Standard" Store URLs ohne zusätzlichen "Store_code" und für die anderen Multisites den bevorzugten Code "en" / "fr" usw. Bitte nicht: unter Die Store-Konfiguration - Setzen Sie den Store-Code nicht auf URL:

Geben Sie hier die Bildbeschreibung ein

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.