В предыдущем уроке мы с вами рассмотрели передачу данных в шаблоны. В частности, передачу данных во внутренний шаблон 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 сайта, но как и раньше, ошибку мы не получим.
На этом урок с глобальными переменными окончен. До встречи в следующем уроке.
<< Назад | Вперед >> |
Пожалуйста, зарегистрируйтесь для комментирования.
В шапках листингов не мешало бы указывать путь файла, а то зачастую непонятно какой файл редактируем…
Если вам непонятно, значит вы не поняли структуру фреймворка. Ведь в самом названии класса скрыт путь к файлу и его название.
Я все больше и больше начинаю уважать и любить Кохану,
Денис, большое вам спасибо. Без данного курса, я бы просто поленился бы гуглить и искать, или читать англ вариант.
Это определенно так! =)
То ли я за эти дни стал умнее, то ли я нашел наконец-то самое понятное объяснение)
Согласен, первый и пока единственный ресурс с внятным разъяснением.
Попытался посмотреть новый модный модный курс «Кохана от А до Я» — учиться по нему невозможно. Морковин вообще бред. А здесь все четко, лаконично и доходчиво.
Спасибо автору за труды, и ждем продолжений!
+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 простых.
Да, так попроще звучит. Поменял, спасибо.
Область видимости глобальных переменных вида ограничена методом класса? Более глобального объявления нет? Для всех видов всех методов всех классов?
Можно в базовом контроллере объявить.
Прочитал еще пару глав.. вопрос снимается..