Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Переменная не видна во включаемом файле
 
 автор: alexander95   (19.09.2012 в 19:30)   письмо автору
 
 

index.tpl

<html>
    <?php 
        $this
->show('head');
    
?>
    <body>
        <div class="layer">
        <?php
            $this
->show('ibody')->show('footer');
        
?>
    </div>
    </body>
</html>


ibody.tpl
<?php
    $userModel 
Mapper_User::getCurrentUser();
    
$this->printMessage();
    if(
$userModel->getUserData() == false){
        
$this->show('form_auth');
    } else {
        
$this->show('wall');
    }
?>


wall.tpl
<?php
    $this
->show('form_search');
    
$userModels Mapper_User::getUserList();
    for(
$j=0$j<count($userModels)/5$j++){
        for(
$i=0$i<5$i++){
            
$model $userModels[$j];
            global 
$model;
            
$this->show('block_user');
        }
    }
?>


user.tpl

<div class="wallUser">
    <?php var_dump($model);?>
    <a href="profile/?id=<?php echo $model->getId();?>"><img src="<?php echo $model->getImage();?>"/></a>
    <?php echo $model->getName();?>
</div>


Функция показа шаблона во вьюшке.
public function show($template){
        $prefix = 'source';
        $filename = self::tpl_exists($template, $prefix);
        require $filename;
        return $this;
    }


Собственно, в user.tpl совсем не видно переменную $model - она вардампится как NULL. Почему так?

  Ответить  
 
 автор: Sfinks   (19.09.2012 в 19:54)   письмо автору
 
   для: alexander95   (19.09.2012 в 19:30)
 

1. global $model; -означает что эта переменная является глобальной в этом конкретном месте (функции), а не во всем коде. То что 1 раз написано global $model; не означает что теперь эта переменная будет видна везде и всегда.

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

3. напишите в user.tpl:
<?php global $modelvar_dump($model);?>

  Ответить  
 
 автор: alexander95   (19.09.2012 в 19:57)   письмо автору
 
   для: Sfinks   (19.09.2012 в 19:54)
 

Часть тела функции! Вот в чем ошибка. Понял. Я как раз читал про пространства имен, но, почему-то, подумал, что она будет одинаковая. Огромное спасибо. Что-то я сегодня усталый, простых вещей не замечаю :)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования