Мне нужно вывести категории и товары на одной странице, как здесь - http://bavaria.bavaria-rest.ru/products
Код ProductController -
<?php
class ProductController extends Controller
{
public function actionIndex()
{
$mod = new Category();
$model = $mod->selectAll();
$cat = Category::findAll(['active' => 1]);
$mod1 = new Product();
$product = $mod1->selectCat($cat->id);
$product1 = Product::find()->all();
}
return $this->render('index',
[
'model' => $model,
'cat' => $cat,
'product' => $product,
'product1' => $product1,
/*'add' => $this->findModel($alias),*/
]);
}
}
Код модели Product -
<?php
class Product extends BaseModel
{
public function rules()
{
return [
[['name', 'price', 'categoryId'], 'required'],
[['description'], 'string'],
[['type', 'count', 'active', 'categoryId', 'clear', 'clear1', 'clear2', 'clear3', 'clear4'], 'integer'],
[['price'], 'number'],
[['createdAt', 'updatedAt'], 'safe'],
[['name', 'alias', 'image', 'image1', 'image2', 'image3', 'image4', 'title'], 'string', 'max' => 255],
[['metaKeywords', 'metaDescription'], 'string', 'max' => 300],
['alias', 'unique'],
['name', 'unique'],
//дополнительные поля
[['str1', 'str1'], 'string', 'max' => 255],
[['num1', 'num2'], 'integer']
];
}
public function getCategory()
{
return $this->hasOne(Category::className(), ['id' => 'categoryId']);
}
public function selectCat($id)
{
return self::find()->where(['categoryId' => $id])->all();
}
public function getAction()
{
return Product::find()->limit(7)->where('categoryId = 2')->all();
}
}
Код модели Category -
<?php
class Category extends BaseModel
{
public function rules()
{
return [
[['name'], 'required'],
[['parentId', 'active', 'sort'], 'integer'],
[['active'], 'default', 'value' => 1],
[['createdAt', 'updatedAt'], 'safe'],
[['name', 'alias', 'image', 'title'], 'string', 'max' => 255],
[['description'], 'string'],
[['metaKeywords', 'metaDescription'], 'string', 'max' => 300],
['parentId', 'validateParent'],
[['clear'], 'integer'],
['name', 'unique'],
['alias', 'unique']
];
}
public function selectAll()
{
return self::find()->where('id != 2 AND sort = 0')->all();
}
}
Код CategoryController -
<?php
class CategoryController extends Controller
{
public function actionIndex()
{
$searchModel = new CategorySearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
}
Код view -
<?php
<section id="contant">
<a id="main-content"></a>
<div class="region region-content">
<section id="block-views-delivery-header-header" class="block block-views clearfix">
<h2 class="block-title">Доставка готовых блюд из ресторана "Бавария"</h2>
<div class="view view-delivery-header view-id-delivery_header view-display-id-header view-dom-id-0befc60be66c1da85f8b16cd12d233c2">
<div class="delivery-label"> Порадуйте себя и своих близких любимыми и вкуснейшими блюдами, заказав доставку в удобное для Вас время и место </div>
<div class="delivery-condition"> <p>При заказе на сумму от 650 рублей доставка БЕСПЛАТНАЯ.</p>
<p>При заказе с сайта или мобильного приложения действует скидка 7%</p>
</div>
</div>
</section>
<section id="block-views-taxonomy-category-block" class="block block-views clearfix">
<div class="category-menu container clearfix ">
<?php foreach($model as $cat): ?>
<a class="go_to" href="#<?= $cat->id ?>"><div><p><?= $cat->title ?></p></div></a>
<?php endforeach; ?>
</div>
</section>
<section id="block-system-main" class="block block-system clearfix">
<div class="gpbgrid container clearfix">
<?php foreach($model as $cats): ?>
<div class="category"><div class="link" id="<?= $cats->id ?>"></div><h2><?= $cats->name ?></h2></div>
<?php foreach ($product1 as $art): ?>
<div class="product item">
<div class="commerce-add-to-cart commerce-cart-add-to-cart-form-236" id="commerce-cart-add-to-cart-form-236"><div>
<button type="button" class="btn btn-warning cart-add" data-cart="<?= $art->id ?>" data-alias="<?= Url::to(['product/view', 'alias' => $model->alias]) ?>">Добавить в корзину</button>
</div></div>
<div class="description"><div class="price"><?= $art->price /*- ceil(($art->price * 7) / 100)*/ ?></div><div class="composition"><?= $art->title ?>
</div></div>
<div class="background-wrap">
<?= Html::img('/uploads/img/' . $art->image, [
'style' => [
'width' => '333px',
'height' => '225px',
]]) ?>
</div>
</div>
<?php endforeach; ?>
<?php endforeach; ?>
</div>
</section>
</div>
</section>
Как мне это вывести в цикле, чтобы шла категория, а за ней все ее продукты?
Разобрался сам, код ProductController -
public function actionIndex()
{
$mod = new Category();
$model = $mod->selectAll();
$category = Category::find()->asArray()->all();
$product= Product::find()->asArray()->all();
return $this->render('index',
[
'model' => $model,
'category' => $category,
'product' => $product
/*'add' => $this->findModel($alias),*/
]);
}
Во view -
<section id="contant">
<a id="main-content"></a>
<div class="region region-content">
<section id="block-views-delivery-header-header" class="block block-views clearfix">
<h2 class="block-title">Доставка готовых блюд из ресторана "Бавария"</h2>
<div class="view view-delivery-header view-id-delivery_header view-display-id-header view-dom-id-0befc60be66c1da85f8b16cd12d233c2">
<div class="delivery-label"> Порадуйте себя и своих близких любимыми и вкуснейшими блюдами, заказав доставку в удобное для Вас время и место </div>
<div class="delivery-condition"> <p>При заказе на сумму от 650 рублей доставка БЕСПЛАТНАЯ.</p>
<p>При заказе с сайта или мобильного приложения действует скидка 7%</p>
</div>
</div>
</section>
<section id="block-views-taxonomy-category-block" class="block block-views clearfix">
<div class="category-menu container clearfix ">
<?php foreach($model as $cat): ?>
<a class="go_to" href="#<?= $cat->id ?>"><div><p><?= $cat->title ?></p></div></a>
<?php endforeach; ?>
</div>
</section>
<section id="block-system-main" class="block block-system clearfix">
<div class="gpbgrid container clearfix">
<?php foreach ($category as $item) :?>
<?php if ($item['sort'] == 0): ?>
<div class="category"><div class="link" id="<?= $item['id'] ?>"></div><h2><?=$item['title']?></h2></div>
<?php foreach ($product as $itemok) :?>
<?php if ($item['id'] == $itemok['categoryId']): ?>
<div class="product item">
<div class="commerce-add-to-cart commerce-cart-add-to-cart-form-236" id="commerce-cart-add-to-cart-form-236"><div>
<button type="button" class="btn btn-warning cart-add" data-cart="<?=$itemok['id']?>" data-alias="<?= Url::to(['product/view', 'alias' => $itemok['alias']]) ?>">Добавить в корзину</button>
</div></div>
<div class="description"><div class="price"><?=$itemok['price']?></div><div class="composition"><?=$itemok['title']?>
</div></div>
<div class="background-wrap">
<?= Html::img('/uploads/img/' . $itemok['image'], [
'style' => [
'width' => '333px',
'height' => '225px',
]]) ?>
</div>
</div>
<?php endif; ?>
<?php endforeach; ?>
<?php endif; ?>
<?php endforeach; ?>
</div>
</section>
Вариант 1, чуть быстрее, но не правильней В ProductController:
$cat = Category::findAll(['active' => 1]);
$mod1 = new Product();
foreach ($cat as $key => $cat_one) {
$products = $mod1->selectCat($cat_one->id);
$cat[$key]['products'] = $products;
}
В итоге, в $cat у каждой категории будет массив products с продуктами
Вариант 2, чуть дольше, но правильнее В модели Product написать подобную функцию, которая вернет такой же преобразованный массив
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Стоит такая задачка на Joomla сделать так чтоб при отправке статьи или какой другой либо ссылке ведущей на нужный мне сайт в скайпе появлялась...
столкнулся с проблемой рендеринга языка форматированного datetime в Laravel тоесть по-умолчанию если использовать например $personal->created_at->format('d B Y') то будет...