Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

foreach внутри foreach - КАК?


Recommended Posts

Всем доброго времени суток!

В контроллере пытаюсь вывести один цикл внутри другого (2 дня ломаю голову:()

Мне нужно что-то типа этого.

категория 1

      имя товара1

      имя товара2

      имя товара3

категория2

      имя товара1

      имя товара2

      имя товара3

 

Не могу с помощью контроллера получить нужный мне массив. Подскажите пожалуйста!!!

Вот код:

$this->load->model('catalog/category');
$this->load->model('catalog/product');
$data['categories'] = array();
$categories = $this->model_catalog_category->getCategories(0);

foreach ($categories as $category) {
	$data['products'] = array();
	$filter = array(
		'filter_category_id' => $category['category_id'],
		'limit'              => 3
	);
	$products = $this->model_catalog_product->getProducts($filter);

	if (!empty($products)) {
		foreach ($products as $product) {
			$data['products'][] = array(
				'name' => $product['name'],
				'product_id'  => $product['product_id'],
			);
		}
	}

	$data['categories'][] = array(
		'products' => $data['products'],
		'category_id' => $category['category_id'],
		'name'        => $category['name'],
		'href'        => $this->url->link('product/category', 'path=' . $category['category_id'])
	);
	
}

 

Змінено користувачем comrues
Надіслати
Поділитися на інших сайтах


нужно вынеести

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

  за пределы первого цикла

вы его при каждом проходе обнуляете

Надіслати
Поділитися на інших сайтах


1 час назад, openprice сказал:

нужно вынеести


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

  за пределы первого цикла

вы его при каждом проходе обнуляете

Его не надо убирать за пределы цикла. В каждой итерации массив должен обнуляться и записывать новые имена для новой категории. Иначе он с каждой итерацией будет пополнять массив новыми именами товаров. В результате в каждую категорию будут вписываться одинаковые имена товаров

Змінено користувачем comrues
Надіслати
Поділитися на інших сайтах


 

4 минуты назад, spectre сказал:

и показали бы print_r сразу б стало все ясно

да, я поправил и массив выводится правильный. Ураа! Вот только почему то в view выводятся категории, а имена товаров внутри категории НЕ выводятся.

Вот мой вывод через view (посмотрите пожалуйста):

{% for category in categories %}
	<!-- Item -->
	<div class="col-12 col-md-6 col-lg-4">
      <h2 class="categories_item_title">{{ category.name }}</h2>
      <div class="categories_item">
        {% for product in products %}
        <span>{{ product.name }}</span>
        {% endfor %}
      </div>
	</div>

{% endfor %}

 

А вот массив через print_r:
 

Array
(
    [0] => Array
        (
            [products] => Array
                (
                    [0] => Array
                        (
                            [name] => 1Труба 20 мм Rehau RAUTITAN stabil platinum
                            [product_id] => 56
                        )

                    [1] => Array
                        (
                            [name] => 2Труба 20 мм Rehau RAUTITAN stabil platinum
                            [product_id] => 57
                        )

                    [2] => Array
                        (
                            [name] => 3Труба 20 мм Rehau RAUTITAN stabil platinum
                            [product_id] => 53
                        )
                )
            [category_id] => 60
            [name] => Водоснабжение
            [href] => http://renovatucasa.loc/ttuktuk
        )

    [1] => Array
        (
            [products] => Array
                (
                    [0] => Array
                        (
                            [name] => еееееее
                            [product_id] => 61
                        )
                )
            [category_id] => 62
            [name] => Канализация
            [href] => http://renovatucasa.loc/index.php?route=product/category&amp;path=62
        )

Я не правильно вывожу в twig???

Надіслати
Поділитися на інших сайтах


$this->load->model('catalog/category');
$this->load->model('catalog/product');

$data['categories'] = [];

$categories = $this->model_catalog_category->getCategories(0);

foreach ($categories as $category) {
  $category_products = [];

  $filter = [
    'filter_category_id'  => $category['category_id'],
    'filter_sub_category' => false, // поставить true если нужно учитывать подкатегории
    'start'               => 0,
    'limit'               => 3
  ];

  $products = $this->model_catalog_product->getProducts($filter);

  if (!empty($products)) {
    foreach ($products as $product) {
      $category_products[] = [
        'name'       => $product['name'],
        'product_id' => $product['product_id'],
      ];
    }
  }

  $data['categories'][] = [
    'products'    => $category_products,
    'category_id' => $category['category_id'],
    'name'        => $category['name'],
    'href'        => $this->url->link('product/category','path='.$category['category_id'])
  ];
}

как то так 

  • +1 1
Надіслати
Поділитися на інших сайтах

Вставлю сюда код с которым у меня всё заработало.
controller:

$this->load->model('catalog/category');
$this->load->model('catalog/product');
$data['categories'] = array();
$categories = $this->model_catalog_category->getCategories(0);

foreach ($categories as $category) {
	$data['products'] = array();
	$filter = array(
		'filter_category_id' => $category['category_id'],
		'start' => 0,
		'limit' => 3
	);
	$products = $this->model_catalog_product->getProducts($filter);

	if (!empty($products)) {
		foreach ($products as $product) {
			$data['products'][] = array(
				'name' => $product['name'],
				'product_id'  => $product['product_id'],
			);
		}
	}

	$data['categories'][] = array(
		'products' => $data['products'],
		'category_id' => $category['category_id'],
		'name'        => $category['name'],
		'href'        => $this->url->link('product/category', 'path=' . $category['category_id'])
	);
}

 

view:

{% for category in categories %}
	<!-- Item -->
	<div class="col-12 col-md-6 col-lg-4">
		<a href="{{ category.href }}" class="categories_item">
			<h2 class="categories_item_title">{{ category.name }}</h2>
			<div
				class="categories_item_imgs">
				{# {% for product in products %}
										<div class="categories_item_img"><img src="{{ product.image }}" alt="{{ product.name }}"></div>
									{% endfor %} #}
				{% for product in category.products %}
					<span>{{ product.name }}</span>
				{% endfor %}
			</div>
		</a>
	</div>

{% endfor %}

ВСЕМ УСПЕХА!!!

Надіслати
Поділитися на інших сайтах


2 минуты назад, comrues сказал:

а во view как это выводить?

{% if categories %}
	{% for category in categories %}
		{% if category.products %}
			{% for product in category.products %}
				...
			{% endfor %}
		{% endif %}
	{% endfor %}
{% endif %}

 

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.