В макете я получаю некоторую ценность:
$quote = Quotes::model()->findAll(array('order'=>'id DESC', 'limit'=>1));
И это работает Хорошо, неважно, что это плохая практика, чтобы вызвать модель из представления. В другом макете в той же папке я не могу сделать то же самое. Если это имеет значение, эти макеты отображаются на одной странице. Я отвечаю прямо на модель, и контроллер не отображает переменные для просмотра. Есть ли способ отправить этот var в пользовательский макет или просмотр?
Я не думаю, что ставить модель внутри представлений/макетов напрямую - лучшая практика. По какой-то причине я помещаю открытую переменную, называемую $ settings внутри моего Controller.php, и помещаю ее в защищенный/компонент/
class Controller extends CController {
protected $settings = array();
public function init() {
$this->settings = Settings::model()->getAllSettings();
}
public function getSetting($key = '')
{
if (isset($this->settings[$key]))
{
return CHtml::decode($this->settings[$key]);
}
return NULL;
}
}
Поэтому в моем макете (main.php) я сделаю так.
<h1>Welcome to <?php echo $this->getSetting('brand_name');?>
Реальный код может выглядеть более сложным, чем выше, но я надеюсь, что это поможет вам немного.
Я поставил эту строку до $quote
и это сработало!
Yii::import('application.modules.quotes.models.*');
Не уверен, как это работает, может быть, это мой частный случай.
Вы можете создать метод внутри вашего контроллера, который вернет нужное вам значение, а затем вы можете вызвать этот метод из представления. Или, если вы используете $this-> render() внутри своего представления, вам просто нужно передать эту переменную в свое пользовательское представление: $this-> render ('quotes', $ quotes);