2015-02-24 2 views
0

Каков наилучший способ получить данные из разных моделей в моем файле макета (main.php для использования в нижнем колонтитуле). Например, я хочу, чтобы мой нижний колонтитул всегда содержал 5 записей из моей модели/таблицы продуктов.Каков наилучший способ отображения данных из разных моделей в макете

Поэтому у меня есть два вопроса:

  1. Как можно отобразить данные в/общий файл компонента макета?
  2. Когда нужно только пять записей, это будет сделано в рамках функции модели или в моем цикле foreach?

ответ

0

Для отображения данных в файле макета в области Контроллера должна быть указана переменная. Так что если у вас есть что-то вроде:

class BookController extends Controller { 
    /* 
    * The var below will be accessible from your template files (main.php, etc) 
    * and any other view file 
    */ 
    public $globalContent = 'Hello'; 

    public function actionIndex(){ 
     //The var below is not accessible in your main.php 
     $localContent = 'World'; 
     $this->render('index', array('localContent' => $localContent)); 
    } 
} 

Хороший способ иметь общую переменную среди всех контроллеров, чтобы ваши контроллеры расширить пользовательский controller.php.

Обратитесь к How do I pass a global variable in Main layout page before $content in Yii2 для получения дополнительной информации

0

Вы также можете использовать это в вашем файле макета, но я думаю, что это не лучший способ, транзакции базы данных должны быть в модели.

$command = Yii::$app->db->createCommand("select * from product;"); 
$products = $command->queryOne(); 
0

Я сделал следующее, что работает.

создал контроллер с моей папкой общих/компонентов со следующим кодом в нем:

<?php 

namespace common\components; 

use frontend\models\ProductItem; 

class FooterComponent 
{ 
    public static function getProducts() 
    { 
     return ProductItem::find()->limit(8)->all(); 
    } 
} 

а затем в течение моего файла макет (main.php)

<?php 

foreach(common\components\FooterComponent::getProducts() as $product){ 
     echo "<li><a href='" . $product->id . "'>" . $product->name . "</a></li>"; 
    } 

?> 
0

Я решить проблему аналогичным образом. После этого урока http://www.bsourcecode.com/yiiframework2/how-to-create-custom-widget-in-yii2-0-framework/ Я создал виджет в каталоге $app/components и использовал его возвращаемое значение, чтобы показать его по умолчанию.

+0

Было бы полезно привести соответствующий текст из связанной статьи в строку, чтобы он стал частью вашего ответа и этого сайта. Если ссылка будет нарушена в будущем, и вы процитируете текст в строке, у кого-то все еще будет шанс следовать вашим советам. – user700390

Смежные вопросы