Для вывода списка товаров из нескольких категорий и их подкатегорий вместе с кратким описанием в CodeIgniter 4, вам необходимо создать модели, контроллер и представление со следующим кодом:
1. Модель `ProductModel.php`:
```php
<?php
namespace App\Models;
use CodeIgniter\Model;
class ProductModel extends Model
{
protected $table = 'products';
protected $primaryKey = 'id';
protected $allowedFields = ['name', 'description', 'category_id'];
public function getProductsByCategories($categories)
{
$query = $this->db->table('products')
->select('name, description, category_id')
->whereIn('category_id', $categories)
->get();
return $query->getResult();
}
}
```
2. Контроллер `ProductController.php`:
```php
<?php
namespace App\Controllers;
use App\Models\ProductModel;
class ProductController extends BaseController
{
public function index()
{
$productModel = new ProductModel();
// Список нескольких категорий и их подкатегорий
$categories = [1, 2, 3]; // пример категорий
$data['products'] = $productModel->getProductsByCategories($categories);
return view('products', $data);
}
}
```
3. Представление `products.php`:
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Products</title>
</head>
<body>
<h1>Products List</h1>
<ul>
<?php foreach ($products as $product): ?>
<li>
<h3><?= $product->name ?></h3>
<p><?= $product->description ?></p>
</li>
<?php endforeach; ?>
</ul>
</body>
</html>
```
Чтобы настроить вывод товаров на сайте в зависимости от уровня категории, вы можете использовать условия в представлении для отображения превью подкатегорий без товаров только на верхнем уровне категории и вывода всех товаров из дочерних категорий на всех остальных уровнях категорий.
Например, в представлении `products.php` вы можете добавить следующее условие для показа превью подкатегорий без товаров:
```html
<ul>
<?php foreach ($products as $product): ?>
<li>
<h3><?= $product->name ?></h3>
<p><?= $product->description ?></p>
</li>
<?php endforeach; ?>
<?php if (empty($products)): ?>
<li>No products in this category</li>
<?php endif; ?>
</ul>
```
Таким образом, вы сможете управлять выводом товаров на сайте в зависимости от выбранного уровня категории.