Обо мне
Я являюсь подробным разработчиком, и я создавал сайты электронной коммерции и приложения с Magento 1.9 и Magento 2, которые я вполне увлечен.
Проблема, которую я хотел решить
В одном из проектов, над которыми я работал, моя задача состояла в том, чтобы улучшить Magento 1.9 по умолчанию по умолчанию по умолчанию по умолчанию, включив возможность иметь возможность иметь все категории со своими детьми, отображаемыми в меню, подобном дереву. Идея состоит в том, что меню останутся открытым в текущей категории на каждой странице обновления/перезагрузки.
Для чего это такое дерево меню?
Код, который я добавил в шаблон страницы категории в Magento, вместе с некоторым кодом jQuery и некоторыми хорошими изображениями для дерева, подобного дереву меню, предоставляет хороший опыт, имея меню левого дерева для навигации между категориями и их детьми и оставаться в том же место на странице Перезагрузка. За кулисами это комбинированная функциональность между PHP и jQuery JavaScript.
Tech Stack
Прежде всего, для тематического пакета Layout.xml я объявил свой пользовательский шаблон, используемый для левого навигационного слоя на странице категории. Страница использует шаблон «Page/2Column leals.phtml». КОДА Вход для local.xml:
page/2columns-left.phtml
Здесь я покажу содержимое файла custom_left.phtml, который находится в приложении/design/frontend/themename/шаблон/каталог каталога/навигации:
Categories
И, наконец, я опубликую JavaScript JQuery Lines, которые позаботятся о поведении меню, сделав его открытым и закрытым с элегантным легкостью, а также оставаться открытым в текущей категории/подкатегории при перезагрузке. Этот файл JavaScript должен быть расположен в каталоге кожи темы, и, конечно, он должен быть загружен в заголовок проекта для работы в магии (образец Путь: Skin/Frontend/Themename/default/js/file.js), предоставленный jQuery уже загружен и присутствует в заголовке приложений.
jQuery(document).ready(function(){ /* Jewels Category Page */ if(jQuery('#leftnav-tree li.level0 ul').length > 0) { jQuery('#leftnav-tree li.level0 ul').parent().find('label').addClass('contentContainer'); } if(jQuery('li.level2').length > 0) { jQuery('li.level2').parent().parent().find('label').removeClass('contentContainer').addClass('contentContainerSub'); } if(jQuery('#leftnav-tree li.level0 ul li.level1').find('label').hasClass('contentContainer')) { jQuery('#leftnav-tree li.level0 ul li.level1').find('label').removeClass('contentContainer'); } if(jQuery('#leftnav-tree li.level0.active').find('label').hasClass('contentContainer')) { jQuery('#leftnav-tree li.level0.active').addClass('opened'); } if(jQuery('#leftnav-tree li.level0 > ul li.level1.active')) { jQuery('#leftnav-tree li.level0 > ul li.level1.active').parent().css('display', 'block'); jQuery('#leftnav-tree li.level0 > ul li.level1.active').parent().parent().addClass('opened'); } if(jQuery('#leftnav-tree li.level1 > ul li.level2.active')) { jQuery('#leftnav-tree li.level1 > ul li.level2.active').parent().css('display', 'block'); if(jQuery('#leftnav-tree li.level1 > ul li.level2.active').parent().parent().find('label').hasClass('contentContainerSub')) { jQuery('#leftnav-tree li.level1 > ul li.level2.active').parent().parent().addClass('opened'); } jQuery('#leftnav-tree li.level1 > ul li.level2.active').parent().parent().parent().css('display', 'block'); jQuery('#leftnav-tree li.level1 > ul li.level2.active').parent().parent().parent().parent().addClass('opened'); } jQuery('ul.level0 label.contentContainer').on('click', function(ev) { ev.preventDefault(); jQuery(this).parent('li.level0').children('ul.level1').closest('ul.level1').slideToggle(); jQuery(this).parent('li.level0').closest('li.level0').toggleClass('opened'); }); jQuery('ul.level1 label.contentContainerSub').on('click', function(ev) { ev.preventDefault(); jQuery(this).parent('li.level1').children('ul.level2').closest('ul.level2').slideToggle(); jQuery(this).parent('li.level1').closest('li.level1').toggleClass('opened'); }); });
И, конечно же, есть некоторые правила CSS, которые вы можете использовать для улучшения или настройки в соответствии с вашими потребностями проекта. Изображения для дерева, подобного деревам меню – «Toggle-Mell-Expart.png» для открытой ветви дерева и «Toggle-Small.png» для замкнутой ветви дерева. Эти стили просто есть для руководства, но некоторые из них являются обязательными для дерева, чтобы вести себя соответственно:
.nav>li>a { position: relative; display: block; padding: 10px 10px; }
/* CATEGORY MENU FIX */ .breadcrumbs ul { list-style-type: none; } .breadcrumbs li { display: inline; } .pages strong { display: none; } ul#leftnav-tree { padding: 10px 0 0 20px; width: 300px; text-align: left; }
.active { font-weight: 700; } ul#leftnav-tree li { position: relative; margin-left: 0; list-style-type: none; } #leftnav-tree li { padding-left: 15px; } #leftnav-tree label.contentContainer { background:url('../images/toggle-small-expand.png') no-repeat 0 5px; color: #FFFFFF; cursor: pointer; width: 16px; height: 17px; }
#leftnav-tree li.level0.opened label.contentContainer { background:url('../images/toggle-small.png') no-repeat 0 5px; color: #FFFFFF; width: 16px; height: 17px; } #leftnav-tree label.contentContainerSub { background:url('../images/toggle-small-expand.png') no-repeat 0 5px; color: #FFFFFF; cursor: pointer; width: 16px; height: 17px; } #leftnav-tree li.level1.opened label.contentContainerSub { background:url('../images/toggle-small.png') no-repeat 0 5px; color: #FFFFFF; width: 16px; height: 17px; }
#leftnav-tree ul.level1, #leftnav-tree ul.level2 { display:none; } #leftnav-tree li.level0.active > ul.level1 { display:block; } ul.products-grid li { list-style-type: none; display: inline-block; /*necessary*/ margin-bottom: 7px; } .products-grid { height: auto; /*your fixed height*/ -webkit-column-count: 3; -moz-column-count: 3; column-count: 3; /*3 in those rules is just placeholder -- can be anything*/ }
ul.products-list li { list-style-type: none; } ul.add-to-links li { display: inline-block; } .products-list li { display: block; /*necessary*/ margin-bottom: 7px; } .product-info .actions button.btn-cart { margin: 10px auto 10px; letter-spacing: 3px; width: 80%; display: block; border-radius: 30px; -moz-border-radius: 30px; -webkit-border-radius: 30px; border: 1px solid #666699; background: #666699; font-family: 'Questrial'; font-size: 16px; text-transform: uppercase; color: #fff; padding: 15px 20px; transition: all 0.3s ease; } .product-shop .action button.btn-cart { margin: 10px auto 10px; letter-spacing: 3px; width: 30%; display: block; border-radius: 30px; -moz-border-radius: 30px; -webkit-border-radius: 30px; border: 1px solid #666699; background: #666699; font-family: 'Questrial'; font-size: 16px; text-transform: uppercase; color: #fff; padding: 15px 20px; transition: all 0.3s ease; }
Процесс построения этой особенности
Во время этой функции отладки я столкнулся с некоторыми проблемами, делая работу кода jQuery, как ожидалось, но все это отлично работало в конце.
Проблемы я столкнулся
Это была хорошая проблема, поскольку там не так много гидов о том, как добиться такой особенности в Magento Layered навигации. Я чувствовал себя очень доволен, чтобы увидеть все это, хорошо работаю вместе.
Назначение ключей
Я узнал о возможности объединения языка PHP-сервера и бессмысленного jQuery неожиданным способом.
Окончательные мысли и следующие шаги
Я с нетерпением жду возможности поделиться своим опытом других вдохновляющих проектов в Magento 1.9 и Magento 2. Я надеюсь, что вдохновения и руководство от других работ по разработчикам также в этих рамках. И я извиняюсь, если эта страница не отображается в частях, где он содержит код (
Если вы найдете этот код полезным, пожалуйста, опубликуйте свои комментарии!