Глобальные переменные Вида

Комментарии: 18  Просмотры: 32 699

В предыдущем уроке мы с вами рассмотрели передачу данных в шаблоны. В частности, передачу данных во внутренний шаблон welcome.php и в основной шаблон main.php. Но те переменные, которые мы передавали в первый шаблон, не были доступны во втором и наоборот. Что же делать, если нужно, чтобы какие-то переменные были доступны во всех файлах Вида. Можно конечно каждый раз передавать эти переменные, но гораздо проще объявить их глобальными переменными Вида. Делается это с помощью статического метода set_global класса View.

Изменим наш код:

class Controller_Welcome extends Controller_Template {
 
    // Определяем шаблон по умолчанию
    public $template = 'main';
 
    public function action_index()
    {
        // Создаем глобальные переменные Вида
        View::set_global('title', 'Работаем с Контроллером Шаблонов');
        View::set_global('description', 'Учимся передавать данные в шаблоны');
 
        $content = View::factory('welcome');
 
        // Передаем данные в шаблон welcome.php
        $content->age = 'больше 18';
        $content->name = 'Васька';
 
        // Выводим основной шаблон
        $this->template->content = $content;
    }
 
} // End Welcome

Сохраните и запустите. Как видите, несмотря на то, что мы не передавали в основной шаблон никаких данных (только контент), но title и description все равно вывелись. Данные глобальные переменные теперь доступны из любого файла Вида. Иногда это бывает полезно.

Использование метода bind_global

В одном из предыдущих уроков, где мы работали с передачей данных в Вид, рассказывалось о методе bind. Он позволял нам как бы заранее объявить (говорят еще — забиндить) переменные и таким образом избежать возможных ошибок с необъявленными переменными. Точно также можно поступать и с глобальными переменными.

Снова изменим код:

class Controller_Welcome extends Controller_Template {
 
    // Определяем шаблон по умолчанию
    public $template = 'main';
 
    public function action_index()
    {
        // Биндим глобальную переменную Вида
        View::bind_global('title', $title);
        // Присваиваем значение забинденой переменной
        $title = 'Работаем с Контроллером Шаблонов';
        // Создаем глобальную переменные Вида		
        View::set_global('description', 'Учимся передавать данные в шаблоны');
 
        $content = View::factory('welcome');
 
        // Передаем данные в шаблон welcome.php
        $content->age = 'больше 18';
        $content->name = 'Васька';
 
        // Выводим основной шаблон
        $this->template->content = $content;
    }
 
} // End Welcome

Обновите страницу. Ничего не поменялось. А теперь удалите или закомментируйте строку $title = ‘Работаем с Контроллером Шаблонов’;. Хоть нам и не выведет теперь title сайта, но как и раньше, ошибку мы не получим.

На этом урок с глобальными переменными окончен. До встречи в следующем уроке.

<< Назад | Вперед >> | Обсудить на форуме


К записи оставлено 18 коммент.

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

Если вам непонятно, значит вы не поняли структуру фреймворка. Ведь в самом названии класса скрыт путь к файлу и его название.

Я все больше и больше начинаю уважать и любить Кохану,
Денис, большое вам спасибо. Без данного курса, я бы просто поленился бы гуглить и искать, или читать англ вариант.

Это определенно так! =)

То ли я за эти дни стал умнее, то ли я нашел наконец-то самое понятное объяснение)

Согласен, первый и пока единственный ресурс с внятным разъяснением.
Попытался посмотреть новый модный модный курс «Кохана от А до Я» — учиться по нему невозможно. Морковин вообще бред. А здесь все четко, лаконично и доходчиво.
Спасибо автору за труды, и ждем продолжений!

+1
На всё 10000% согласен что Морковин полное Г. Недопрограммер этот Морковин. Я видеокурс пытался его смотреть — исплевался! Изучил на пальцах Kohana и теперь считает, что он маг и чародей. А программить, судя по урокам, вообще не умеет! Ужас!

P.S. Реально дельный мануал по кохане этот ресурс!

Морковин идиот клинический. А ещё в институте работает …

Как говорил Кот Бегемот : «Все в восхищении!»
Мануал напоминает американские: сжато, информативно изложено. Кстати,желающим рекомендую:
Jason D. Straughan

Kohana 3.0
Beginner’s Guide
несложно найти в сети.
Кстати, хорошо бы знать на будущее, кто же таков «Денис Васильевич» ? Фамилию бы хоть. Если наткнусь, заранее буду знать, что читать стоит.
А Морковина поливают зря. Курс неудачный, но автор потрудился, бескорыстно причем! Не нравится-не ешь. Гораздо хуже «Кохана от А до Я», учитывая то, что они с людей деньги сдирают за него.

Некоторые уроки — вольный перевод Beginner’s Guide с поправкой на версию 3.2 и со своими примерами. На главной я писал про это.
Насчет Морковина, согласен. Автор, по всей видимости, сам по ходу курса учился и пытался научить других, причем бесплатно. Уже это заслуживает уважения.
P.S. Не наткнетесь :) Я больше не веду никаких блогов и не участвую в обсуждении других.

> Kohana 3.0
> Beginner’s Guide

Дельное издание, соглашусь

Предлагаю исправить первую строчку:

«В предыдущем уроке мы с вами рассмотрели передачу данных в шаблоны, а конкретно во внутренний шаблон welcome.php и основной шаблон main.php.»

С 4-го раза понял смысл прочтённого.

Хм. А что непонятного в строчке ? Передаем данные в шаблоны. В основной и во внутренний. Как тут можно перефразировать, чтобы было понятнее, я даже не знаю )

Мб, по другому расставит запятые?

Или например так: «В предыдущем уроке мы с вами рассмотрели передачу данных в шаблоны. В частности, передачу данных во внутренний шаблон welcome.php и в основной шаблон main.php.»

Разбить 1 сложное предложение на 2 простых.

Да, так попроще звучит. Поменял, спасибо.

Область видимости глобальных переменных вида ограничена методом класса? Более глобального объявления нет? Для всех видов всех методов всех классов?

Можно в базовом контроллере объявить.

Прочитал еще пару глав.. вопрос снимается.. :)



Оставить комментарий или два

Пожалуйста, зарегистрируйтесь для комментирования.