Magento 2.1 Topmenu blok geçersiz kılmaya çalışıyorum ama bunu yapmak için herhangi bir kılavuz bulamıyorum. Burada ve başka yerlerde bulduğum her şey ya sadece farklı bir klasör yapısı kullanıyor gibi görünen 2.0 sürümü için geçerli gibi görünüyor ya da sadece uygun bağlamı (bilmiyorum) zaten bilmemi beklediğim kısmi kod örnekleri vardır.
Özel tema için geçerli klasör yapım app/design/frontend/Vendor/theme_name
. Bu kayıt, tema ve besteci dosyaları yanı sıra çeşitli modüller için klasörleri var, örneğin Magento_Theme
ve Magento_Search
.
Ben bir ile başlamak gerekir anladığım etc/di.xml
düzenlenebilir aşağıda gibi dosyada, burada :
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Theme\Block\Html\Topmenu" type="[Namespace]\[Module]\Block\Html\Topmenu" />
</config>
Ayrıca bir sonraki adım Block/Html/Topmenu.php
aşağıdaki gibi bir dosya eklemek olduğunu anlamak (yine yukarıdaki kaynaktan düzenlenmiş):
namespace [Namespace]\[Module]\Block\Html;
class Topmenu extends \Magento\Theme\Block\Html\Topmenu
{
protected function _addSubMenu($child, $childLevel, $childrenWrapClass, $limit)
{
}
}
Ancak, ne için kullanmam gerektiği [Namespace]
ve [Module]
bu dosyaları nereye yerleştireceğim açık değil . Ben satıcı ve tema adı kullanarak ve etc
ve Block
klasörleri app/design/frontend/Vendor/theme_name
yerleştirerek yanı sıra app/design/frontend/Vendor/theme_name/Magento_Theme
, ad alanlarını değiştirerek yerleştirmeyi denedim Vendor\theme_name\Magento_Theme\Block\Html
, ama hiçbir etkisi yoktur.
Herkes 2.1 sürümünde Topmenu bloğunu geçersiz kılmak (ve başka bir blok çıkarım) tam olarak ne yapmam gerektiğini açıklamak yardımcı olabilir, ben çok takdir edilecektir.
ek
Ben teşebbüs ettik Khoa TruongDinh cevabını ancak etkileyecek hiçbir etti. Aşağıdaki dosyaları kullandım:
app/code/Vendor/MagentoTheme/Block/Html/Topmenu.php
<?php
namespace Vendor\MagentoTheme\Block\Html;
class Topmenu extends \Magento\Theme\Block\Html\Topmenu
{
protected function _addSubMenu($child, $childLevel, $childrenWrapClass, $limit)
{
$html = '';
if (!$child->hasChildren())
{
return $html;
}
$colStops = null;
if ($childLevel == 0 && $limit)
{
$colStops = $this->_columnBrake($child->getChildren(), $limit);
}
// Added "test" class to test
$html .= '<ul class="level' . $childLevel . ' test submenu">';
$html .= $this->_getHtml($child, $childrenWrapClass, $limit, $colStops);
$html .= '</ul>';
return $html;
}
}
app/code/Vendor/MagentoTheme/composer.json
{
"name": "vendor/magento-theme",
"description": "",
"require": {
"php": "~5.5.0|~5.6.0|~7.0.0",
"magento/framework": "100.0.*"
},
"type": "magento2-module",
"version": "100.0.1",
"license": [
"OSL-3.0",
"AFL-3.0"
],
"autoload": {
"files": [ "registration.php" ],
"psr-4": {
"Vendor\\MagentoTheme\\": ""
}
}
}
app/code/Vendor/MagentoTheme/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">
<preference for="Magento\Theme\Block\Html\Topmenu" type="Vendor\MagentoTheme\Block\Html\Topmenu" />
</config>
app/code/Vendor/MagentoTheme/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_MagentoTheme" setup_version="1.0.0"></module>
</config>
app/code/Vendor/MagentoTheme/registration.php
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Vendor_MagentoTheme',
__DIR__
);
Sonra içeriğini kaldırdık pub/static/frontend
, var/generation
ve var/view_preprocessed
, ve Magento önbellek kızardı. Alt menüde amaçlanan "test" sınıfı eklenmemiştir:
<ul class="level0 submenu ui-menu ui-widget ui-widget-content ui-corner-all" role="menu" aria-expanded="false" style="display: none; top: 52.6719px; left: 487.5px;" aria-hidden="true">...</ul>
ul
Topmenu sınıfını başarıyla geçersiz kıldığımı doğrulamak için alt menüye bir "test" sınıfı eklemeye çalışıyorum .