con322
(Connor Brough)
1
I was wondering what the best way to get data from various display models within my layout file.
For example I want my footer to always contain 5 record from my products model/table.
So I have two questions one How can I display data within a layout/common component file?
Two when only wanting five records would this be done within a model function or in my view foreach loop?
timmy78
(Timothee Planchais)
2
First solution :
Define a class like Utils in components
namespace app\components;
class Utils
{
public static function getProducts()
{
return app\models\Product::find()->limit(5)->all();
}
}
And in your layout :
<footer>
<?php foreach(app\components\Utils::getProducts() as $product): ?>
...
</footer>
Second solution :
Create app\components\Controller which is extended by all your controllers.
And create in in this class the same function getProducts()
And after in your layout you can access it with
foreach($this->context->getProducts() as $product)
Third solution :
Create a function in app\components\Controller which will return the HTML like this :
public function getProducts()
{
return $this->render>Partial('/layouts/_products', ['products' => app\models\Product::find()->limit(5)->all()]);
}
Layout :
<footer>
<?= $this->context->getProducts() ?>
</footer>
File layouts/products :
<div id="products">
<?php foreach($products as $product): ?>
...
</div>