OC v3.х Как правильно написать код для twig меню категорий в 2 колонки

svitlo

Разрушитель (V)
Сообщения
597
Симпатии
245
Баллы
10 815
Такая вот проблемка есть шаблон опенкарт 2.3 там код
<div class="col-2 offset-1">
<ul>
<?php foreach (array_slice($categories, 0, $half) as $category): ?>
<li><a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a></li>
<?php endforeach ?>
</ul>
</div>

<div class="col-2 offset-1">
<ul>
<?php foreach (array_slice($categories, $half) as $category): ?>
<li><a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a></li>
<?php endforeach ?>
</ul>
</div>
Конвертор его конвертирует вот так
<div class="col-2 offset-1">
<ul>
{% for category in rray_slice %}
<li><a href="{{ category.href }}">{{ category.name }}</a></li>
{% endfor %}
</ul>
</div>

<div class="col-2 offset-1">
<ul>
{% for category in rray_slice %}
<li><a href="{{ category.href }}">{{ category.name }}</a></li>
{% endfor %}
</ul>
</div>
Но так не работает!
Подскажите как правильно написать этот код для twig???
Вот код контролера
// Menu
$this->load->model('catalog/category');

$data['categories'] = array();

foreach ($this->model_catalog_category->getCategories(0) as $category) {
if ($category['top']) {
$data['categories'][] = array(
'name' => $category['name'],
'href' => $this->url->link('product/category', 'path=' . $category['category_id'])
);
}
}

$count = count($data['categories']) + 1;
$data['half'] = $count/ 2;


foreach ($categories as $category) {
if ($category['settings']) {
$settings = unserialize($category['settings']);
if ($settings['show_in_top'] == 0) continue;
}

$articles = array();

if ($category['settings'] && $settings['show_in_top_articles']) {
$filter = array('filter_category_id' => $category['category_id'],'filter_sub_category' => true);
$results = $this->model_newsblog_article->getArticles($filter);

foreach ($results as $result) {
$articles[] = array(
'name' => $result['name'],
'href' => $this->url->link('newsblog/article', 'newsblog_path=' . $category['category_id'] . '&newsblog_article_id=' . $result['article_id'])
);
}
}
$data['categories'][] = array(
'name' => $category['name'],
'children' => $articles,
'column' => 1,
'href' => $this->url->link('newsblog/category', 'newsblog_path=' . $category['category_id'])
);
}
 
Подсмотреть можно в
catalog/view/theme/default/template/common/menu.twig
PHP:
{% if categories %}
<div class="container">
  <nav id="menu" class="navbar">
    <div class="navbar-header"><span id="category" class="visible-xs">{{ 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">
        {% for category in categories %}
        {% if category.children %}
        <li class="dropdown"><a href="{{ category.href }}" class="dropdown-toggle" data-toggle="dropdown">{{ category.name }}</a>
          <div class="dropdown-menu">
            <div class="dropdown-inner"> {% for children in category.children|batch(category.children|length / category.column|round(1, 'ceil')) %}
              <ul class="list-unstyled">
                {% for child in children %}
                <li><a href="{{ child.href }}">{{ child.name }}</a></li>
                {% endfor %}
              </ul>
              {% endfor %}</div>
            <a href="{{ category.href }}" class="see-all">{{ text_all }} {{ category.name }}</a> </div>
        </li>
        {% else %}
        <li><a href="{{ category.href }}">{{ category.name }}</a></li>
        {% endif %}
        {% endfor %}
      </ul>
    </div>
  </nav>
</div>
{% endif %}
 
Подсмотреть можно в
catalog/view/theme/default/template/common/menu.twig
PHP:
{% if categories %}
<div class="container">
  <nav id="menu" class="navbar">
    <div class="navbar-header"><span id="category" class="visible-xs">{{ 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">
        {% for category in categories %}
        {% if category.children %}
        <li class="dropdown"><a href="{{ category.href }}" class="dropdown-toggle" data-toggle="dropdown">{{ category.name }}</a>
          <div class="dropdown-menu">
            <div class="dropdown-inner"> {% for children in category.children|batch(category.children|length / category.column|round(1, 'ceil')) %}
              <ul class="list-unstyled">
                {% for child in children %}
                <li><a href="{{ child.href }}">{{ child.name }}</a></li>
                {% endfor %}
              </ul>
              {% endfor %}</div>
            <a href="{{ category.href }}" class="see-all">{{ text_all }} {{ category.name }}</a> </div>
        </li>
        {% else %}
        <li><a href="{{ category.href }}">{{ category.name }}</a></li>
        {% endif %}
        {% endfor %}
      </ul>
    </div>
  </nav>
</div>
{% endif %}
Там логика другая, мне нужно кодом просто вывести главные категории в 2 колонки ... в версии 2.3 работает вот такой код который я выше опубликовал а как его перевести в твиг? вот тут проблемка)))
 
PHP:
//Проверка, есть ли категории
{% if categories %}
//Разбиваем массив категорий,
{% for category in categories %}
//Делаем проверку, есть ли у категории подкатегории
{% if category.children %}
//Если подкатегории есть, то выводим их
        <li class="dropdown"><a href="{{ category.href }}" class="dropdown-toggle" data-toggle="dropdown">{{ category.name }}</a>
          <div class="dropdown-menu">
            <div class="dropdown-inner"> {% for children in category.children|batch(category.children|length / category.column|round(1, 'ceil')) %}
              <ul class="list-unstyled">
                {% for child in children %}
                <li><a href="{{ child.href }}">{{ child.name }}</a></li>
                {% endfor %}
              </ul>
              {% endfor %}</div>
            <a href="{{ category.href }}" class="see-all">{{ text_all }} {{ category.name }}</a> </div>
        </li>
//Если подкатегории нет, выводи просто ссылку
{% else %}
 <li><a href="{{ category.href }}">{{ category.name }}</a></li>
{% endif %}
 {% endfor %}
{% endif %}
 
PHP:
//Проверка, есть ли категории
{% if categories %}
//Разбиваем массив категорий,
{% for category in categories %}
//Делаем проверку, есть ли у категории подкатегории
{% if category.children %}
//Если подкатегории есть, то выводим их
        <li class="dropdown"><a href="{{ category.href }}" class="dropdown-toggle" data-toggle="dropdown">{{ category.name }}</a>
          <div class="dropdown-menu">
            <div class="dropdown-inner"> {% for children in category.children|batch(category.children|length / category.column|round(1, 'ceil')) %}
              <ul class="list-unstyled">
                {% for child in children %}
                <li><a href="{{ child.href }}">{{ child.name }}</a></li>
                {% endfor %}
              </ul>
              {% endfor %}</div>
            <a href="{{ category.href }}" class="see-all">{{ text_all }} {{ category.name }}</a> </div>
        </li>
//Если подкатегории нет, выводи просто ссылку
{% else %}
 <li><a href="{{ category.href }}">{{ category.name }}</a></li>
{% endif %}
 {% endfor %}
{% endif %}
Ну хорошо но вывода в 2 колонки так как нужно нет
1658053796172.png1658053833560.png
Вот так нужно вывести и код с 2.3 выводит так как нужно на двойке а код со стандартного меню просто выводит категории но на 2 колонки не разбивает
 
По факту мне нужно получить такую вот структуру штмл
<div class="categories-menu hide" bis_skin_checked="1">
<div class="container" bis_skin_checked="1">
<div class="clear" bis_skin_checked="1">
<div class="col-2 offset-1" bis_skin_checked="1">
<ul>
<li><a href="/baletki/">Балетки</a></li>
<li><a href="/bosonozhki/">Босоножки</a></li>
<li><a href="/botinki/">Ботинки</a></li>
<li><a href="/kroscovki--kedi/">Кросcовки, кеды</a></li>
<li><a href="/mehovie-shlepki/">Меховые шлепки</a></li>
<li><a href="/sabo--mjuli/">Сабо, мюли</a></li>
</ul>
</div>

<div class="col-2 offset-1" bis_skin_checked="1">
<ul>
<li><a href="/sapogi/">Сапоги</a></li>
<li><a href="/sliponi/">Слипоны, лоферы</a></li>
<li><a href="/sumki--koshelki/">Сумки, кошельки, ремни</a></li>
<li><a href="/tufli/">Туфли</a></li>
<li><a href="/shlepanci/">Шлепанцы</a></li>
<li><a href="/odezhda/">Одежда</a></li>
</ul>
</div>

<div class="col-5 offset-1 menu-image" bis_skin_checked="1">
</div>
</div>
</div>
</div>
а тот код выводит совершенно другой код я не могу 2 колонки в нем обернуть каждую в свой див
<div class="col-2 offset-1">
<ul>
<li><a href="/bosonozhki">Босоножки</a></li>
</ul>
</div>
Этот код каждую ссылку упаковывает в див а мне нужно упаковать в див массив 1й колонки отдельно а второй отдельно)
 
Вывод есть, осталась только вёрстка.
Это нужно делать непосредственно на сайте, так как завязка идёт на шаблон
 
Вывод есть, осталась только вёрстка.
Это нужно делать непосредственно на сайте, так как завязка идёт на шаблон
<div class="categories-menu hide">
<div class="container">
<div class="clear">
<div class="col-2 offset-1">
<ul>
<?php foreach (array_slice($categories, 0, $half) as $category): ?>
<li><a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a></li>
<?php endforeach ?>
</ul>
</div>

<div class="col-2 offset-1">
<ul>
<?php foreach (array_slice($categories, $half) as $category): ?>
<li><a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a></li>
<?php endforeach ?>
</ul>
</div>

<div class="col-5 offset-1 menu-image">
</div>
</div>
</div>
</div>
</div>
Вот так верстка выглядит на 2.3 если код перевести в твиг корректно то будет такая же верстка... но увы пока не получается)
 
Вывод есть, осталась только вёрстка.
Это нужно делать непосредственно на сайте, так как завязка идёт на шаблон
Вывод в один столбец запросто делается вот так
<div class="col-2 offset-1">
<ul>
{% for category in categories %}
<li><a href="{{ category.href }}">{{ category.name }}</a></li>
{% endfor %}
</ul>
</div>
но это не решает вопрос нужно в 2 колонки так как выводиться в 2.3
 
Вывод есть, осталась только вёрстка.
Это нужно делать непосредственно на сайте, так как завязка идёт на шаблон
Благодаря Denzy решил вопрос так
<div class="col-2 offset-1">
<ul>
{% for category in categories|slice(category, half) %}
<li><a href="{{ category.href }}">{{ category.name }}</a></li>
{% endfor %}
</ul>
</div>

<div class="col-2 offset-1">
<ul>
{% for category in categories|slice(half) %}
<li><a href="{{ category.href }}">{{ category.name }}</a></li>
{% endfor %}
</ul>
</div>
Может кому то понадобиться такой вывод для opencart 3
 
Последнее редактирование модератором:
Назад
Верх