Рендеринг переменной из макета в другой макет

0

В макете я получаю некоторую ценность:

$quote = Quotes::model()->findAll(array('order'=>'id DESC', 'limit'=>1));

И это работает Хорошо, неважно, что это плохая практика, чтобы вызвать модель из представления. В другом макете в той же папке я не могу сделать то же самое. Если это имеет значение, эти макеты отображаются на одной странице. Я отвечаю прямо на модель, и контроллер не отображает переменные для просмотра. Есть ли способ отправить этот var в пользовательский макет или просмотр?

  • 0
    Какой бы макет не был установлен в вашем контроллере Yii, этот макет может получить к нему доступ, но если вы собираетесь использовать то же самое в другом макете, который не определен в вашем действии или контроллере, он не будет работать.
Теги:
yii

3 ответа

0

Я не думаю, что ставить модель внутри представлений/макетов напрямую - лучшая практика. По какой-то причине я помещаю открытую переменную, называемую $ 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');?>

Реальный код может выглядеть более сложным, чем выше, но я надеюсь, что это поможет вам немного.

0

Я поставил эту строку до $quote и это сработало!

Yii::import('application.modules.quotes.models.*');

Не уверен, как это работает, может быть, это мой частный случай.

0

Вы можете создать метод внутри вашего контроллера, который вернет нужное вам значение, а затем вы можете вызвать этот метод из представления. Или, если вы используете $this-> render() внутри своего представления, вам просто нужно передать эту переменную в свое пользовательское представление: $this-> render ('quotes', $ quotes);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню