Как создать и настроить свой веб-сервер на VDS (05 сен 2024)
Осенью самое время заняться установкой и тюнингом своего веб-сервера. Не правда ли?
CommerceML: импорт товаров в OpenCart
- Aleksej
- Автор темы
- Не в сети
- Модератор
Less
Больше
7 года 10 мес. назад - 7 года 10 мес. назад #1
от Aleksej
Aleksej создал тему: CommerceML: импорт товаров в OpenCart
Здесь продолжаем разговор, начатый статьей блога
CommerceML: импорт товаров из 1С в OpenCart
, далее следует обещанный код с небольшими комментариями. Итак, как же нам изменить иерархию импортированных из файлов CommerceML категорий товаров произвольным образом?
Открываем файл header.tpl, отвечающий, в том числе, за работу основного меню OpenCart (надеюсь, найдете самостоятельно?) - нас интересует участок кода, начинающийся сразу за </header>, и способный выглядеть вот так:
Если вы измените header.tpl примерно следующим образом - так, как показано далее - проблема произвольного отображения вложенных пунктов меню (они же child-категории товаров, экспортированных из 1С) окажется, пожалуй, решенной. Взгляните:
Начинаем с того, что создаем ассоциативный массив, ключи которого равнозначны необходимым категориям (пунктам меню верхнего уровня), которые создаем вручную в админке OpenCart, а значения являются фильтрами, руководствуясь которыми далее реализуем выборку дочерних категорий (dropdown пунктов меню) для родительских пунктов меню , вот собственно, и все. Также, как видите, я убрал нововведение, появившееся во второй линейке OpenCart - фразу «смотреть все» для подкатегорий, подробнее см. топик Трюки и хаки OpenCart
Открываем файл header.tpl, отвечающий, в том числе, за работу основного меню OpenCart (надеюсь, найдете самостоятельно?) - нас интересует участок кода, начинающийся сразу за </header>, и способный выглядеть вот так:
Code:
<?php if ($categories) { ?>
<div class="container">
<nav id="menu" class="navbar">
<div class="navbar-header"><span id="category" class="visible-xs"><?php echo $text_category; ?></span>
<button type="button" class="btn btn-navbar navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse"><i class="fa fa-bars"></i></button>
</div>
<div class="collapse navbar-collapse navbar-ex1-collapse">
<ul class="nav navbar-nav">
<?php foreach ($categories as $category) { ?>
<?php if ($category['children']) { ?>
<li class="dropdown"><a href="<?php echo $category['href']; ?>" class="dropdown-toggle" data-toggle="dropdown"><?php echo $category['name']; ?></a>
<div class="dropdown-menu">
<div class="dropdown-inner">
<?php foreach (array_chunk($category['children'], ceil(count($category['children']) / $category['column'])) as $children) { ?>
<ul class="list-unstyled">
<?php foreach ($children as $child) { ?>
<li><a href="<?php echo $child['href']; ?>"><?php echo $child['name']; ?></a></li>
<?php } ?>
</ul>
<?php } ?>
</div>
<a href="<?php echo $category['href']; ?>" class="see-all"><?php echo $text_all; ?> <?php echo $category['name']; ?></a> </div>
</li>
<?php } else { ?>
<li><a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a></li>
<?php } ?>
<?php } ?>
</ul>
</div>
</nav>
</div>
<?php } ?>
Если вы измените header.tpl примерно следующим образом - так, как показано далее - проблема произвольного отображения вложенных пунктов меню (они же child-категории товаров, экспортированных из 1С) окажется, пожалуй, решенной. Взгляните:
Code:
<?php
$filteredCategories = array(
'Запчасти для отопителей и подогревателей' => 'запчасти',
'Автозапчасти' => 'Запчасти ',
'Предпусковые подогреватели' => 'ЖИДКОСТНЫЕ',
'Подогреватели' => ' ПОДОГРЕВАТЕЛИ',
'Электроподогреватели' => 'ЭЛЕКТРОПОДОГРЕВАТЕЛИ',
'Теплостар' => 'Теплостар',
'Элтра' => 'Элтра',
'Эбершпехер' => 'Эбершпехер'
);
$allChilds = array_reduce(
array_column($categories, 'children')
,'array_merge'
,array()
);
if ($categories) {?>
<div class="container">
<nav id="menu" class="navbar">
<div class="navbar-header"><span id="category" class="visible-xs"><?php echo $text_category; ?></span>
<button type="button" class="btn btn-navbar navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse"><i class="fa fa-bars"></i></button>
</div>
<div class="collapse navbar-collapse navbar-ex1-collapse">
<ul class="nav navbar-nav">
<?php
foreach ($categories as $category) {
if (!empty($filteredCategories[$category['name']])){
$childrensFiltered = array_filter(
$allChilds
,function($v) use ($category, $filteredCategories){return false != stristr($v['name'], strtolower($filteredCategories[$category['name']])); }
);
?>
<li class="dropdown"><a href="<?php echo $category['href']; ?>" class="dropdown-toggle" data-toggle="dropdown"><?php echo $category['name']; ?></a>
<div class="dropdown-menu">
<div class="dropdown-inner">
<?php foreach (array_chunk($childrensFiltered, max(ceil(count($childrensFiltered) / $category['column']), 1)) as $children) {?>
<ul class="list-unstyled">
<?php foreach ($children as $child) {?>
<li><a href="<?php echo $child['href']; ?>"><?php echo $child['name'];?></a></li>
<?php }?>
</ul>
<?php }?>
</div>
</li>
<?php }
else {?>
<li><a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a></li>
<?php
}
}?>
</ul>
</div>
</nav>
</div>
<?php } ?>
Начинаем с того, что создаем ассоциативный массив, ключи которого равнозначны необходимым категориям (пунктам меню верхнего уровня), которые создаем вручную в админке OpenCart, а значения являются фильтрами, руководствуясь которыми далее реализуем выборку дочерних категорий (dropdown пунктов меню) для родительских пунктов меню , вот собственно, и все. Также, как видите, я убрал нововведение, появившееся во второй линейке OpenCart - фразу «смотреть все» для подкатегорий, подробнее см. топик Трюки и хаки OpenCart
Последнее редактирование: 7 года 10 мес. назад пользователем Aleksej.
Спасибо сказали: superlamer
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- superlamer
- Не в сети
- Давно я тут
Less
Больше
- Сообщений: 118
- Спасибо получено: 2
7 года 10 мес. назад - 7 года 10 мес. назад #2
от superlamer
superlamer ответил в теме CommerceML: импорт товаров в OpenCart
Два "но". Первое, фильтры, реализованные таким образом, очень чувствительны, к регистру, даже к пробелам. В коде массива видно, что необходимо, вероятно, прибегать то к строчным то к прописным буквам, чтобы массив согласовывался с названиями субкатегорий товаров в выгрузке CommerceML, даже пробелы кое-где расставлены. Но это ладно, гораздо хуже то, что дефолтные категории, которые из корня выгрузки, так и остаются в меню, и если их скрыть в опциях админки "Категории" (или сделать подчиненными другому корню), цикл перестает работать. Одно из решений заключается, в переименовании верхних пунктов меню в любые другие (например в те, которые в массиве в header.tpl), в какой то степени это решение проблемы.
Последнее редактирование: 7 года 10 мес. назад пользователем superlamer.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.