আমি ম্যাজেন্টো ২.১ এ টপমেনু ব্লকটিকে ওভাররাইড করার চেষ্টা করছি তবে এটি করার জন্য কোনও গাইড খুঁজে পাচ্ছি না। আমি এখানে এবং অন্য কোথাও যা কিছু পেয়েছি তা কেবলমাত্র সংস্করণ ২.০ এ প্রয়োগ হয় যা ভিন্ন ফোল্ডার কাঠামো ব্যবহার করে বলে মনে হয় বা কেবলমাত্র আংশিক কোড উদাহরণ রয়েছে যা আমাকে ইতিমধ্যে তাদের যথাযথ প্রসঙ্গটি (যা আমি জানি না) জানতে পেরে প্রত্যাশা করে।
কাস্টম থিমের জন্য আমার বর্তমান ফোল্ডার কাঠামোটি app/design/frontend/Vendor/theme_name। এর মধ্যেই আমি বিভিন্ন মডিউল, যেমন জন্য রেজিস্ট্রেশন, থিম, এবং সুরকার ফাইল সেইসাথে ফোল্ডার নেই Magento_Themeএবং Magento_Search।
আমি যা বুঝি সেখান থেকে 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="[Namespace]\[Module]\Block\Html\Topmenu" />
</config>
আমি আরও বুঝতে পারি যে পরবর্তী পদক্ষেপটি Block/Html/Topmenu.phpনীচের মতো একটি ফাইল যুক্ত করা (আবার উপরের উত্স থেকে সম্পাদিত):
namespace [Namespace]\[Module]\Block\Html;
class Topmenu extends \Magento\Theme\Block\Html\Topmenu
{
protected function _addSubMenu($child, $childLevel, $childrenWrapClass, $limit)
{
}
}
তবে, আমার কী ব্যবহার করা উচিত [Namespace]এবং [Module]এই ফাইলগুলি কোথায় রাখা উচিত তা আমার কাছে পরিষ্কার নয় । আমি বিক্রেতা এবং থিম নাম ব্যবহার করে, এবং স্থাপন চেষ্টা করেছি etcএবং Blockফোল্ডার app/design/frontend/Vendor/theme_nameপাশাপাশি, তাদের মধ্যে স্থাপন হিসাবে app/design/frontend/Vendor/theme_name/Magento_Theme, এর নামব্যবধান সংশোধনের Vendor\theme_name\Magento_Theme\Block\Html, কিন্তু তন্ন তন্ন কোনো প্রভাব আছে।
টপমেনু ব্লকটি ওভাররাইড করার জন্য আমার ঠিক কী করা দরকার তা যদি কেউ ব্যাখ্যা করতে পারে তবে ভার্সন ২.১-এ আমি আরও প্রশংসা করব।
অভিযোজ্য বস্তু
আমি খোয়া ট্রুংডিনহ এর জবাব চেষ্টা করেছি কিন্তু এর কোনও প্রভাব পড়েনি । আমি নিম্নলিখিত ফাইলগুলি ব্যবহার করেছি:
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__
);
আমি তখন বিষয়বস্তু সরিয়ে ফেলে থাকেন pub/static/frontend, var/generationএবং var/view_preprocessed, এবং Magento ক্যাশে রাঙা। সাবমেনুতে উদ্দেশ্যযুক্ত "পরীক্ষা" শ্রেণিটি নেই:
<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যাতে আমি টপমেনু ক্লাসকে সফলভাবে ওভাররাইড করে ফেলেছি তা নিশ্চিত করতে।