Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: проблема с ob_start()

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
etoYA
Отправлено: 29 Января, 2013 - 20:20:24
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




В шаблоне сайта главный файл html, в него подключаются блоки в переменную $content
Все переменные, которые я передаю в файл index отображаются нормально, если я в индексном файле подключаю файлы блоков через include, то в тогда и в блоках переменные отображаются нормально.
А вот если я подключаю блок через


то в индексном файле все выводится, а вот переменные в подключаемых блоках уже нет.. Как быть?

потом из контроллера передаю результат метода в переменную
PHP:
скопировать код в буфер обмена
  1.  
  2.         public static function loadTplFile($file){
  3.                 $tpl = Config::getInstance()->get('site','template');
  4.                 if (file_exists(ROOT."/templates/$tpl/$file.phtml")){
  5.                         ob_start();
  6.                                 include(ROOT."/templates/$tpl/$file.phtml");
  7.                         return ob_get_clean();
  8.                 }
  9.                 else return "/templates/$tpl/$file.phtml - does not exists";
  10.         }
  11.  
 
 Top
esterio
Отправлено: 29 Января, 2013 - 20:26:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Опишите небольшой пример 2-х файлов(главного и подключаемого чтобы увидеть), а так пока не ясно что у вас не так. так просмотрев код он должен работать.

Вы что там свою CMS пишете?
 
 Top
etoYA
Отправлено: 29 Января, 2013 - 20:33:23
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




esterio пишет:
Вы что там свою CMS пишете?

Что-то типа этого (играюсь) Улыбка

index.phtml // главный шаблонный файл


Метод класса Loader (им и подключаю файл)
PHP:
скопировать код в буфер обмена
  1.  
  2.         public static function loadTplFile($file){
  3.                 $tpl = Config::getInstance()->get('site','template');
  4.                 if (file_exists(ROOT."/templates/$tpl/$file.phtml")){
  5.                         ob_start();
  6.                                 include(ROOT."/templates/$tpl/$file.phtml");
  7.                         return ob_get_clean();
  8.                 }
  9.                 else return "/templates/$tpl/$file.phtml - does not exists";
  10.         }
  11.  

Любой подключаемый файл (page.phtml)

Контроллер, отсюда отправляю данные во вьюху
PHP:
скопировать код в буфер обмена
  1.  
  2. $view->set(array(
  3.                                         'title'                 => $pageInfo['title'],
  4.                                         'keywords'              => $pageInfo['keywords'],
  5.                                         'description'   => $pageInfo['description'],
  6.                                         'content'               => Loader::loadTplFile('full_film')
  7. ));
  8. FrontController::setLayout($view->render('index'));
  9.  

А это модель (View)
PHP:
скопировать код в буфер обмена
  1.  
  2. class View{
  3.         private $vars = array();
  4.         public $tpl = 'default';
  5.        
  6.         public function render($name){
  7.                 foreach($this->vars as $k=>$v){
  8.                         $$k = $v;
  9.                 }
  10.                 ob_start();
  11.                         require_once(ROOT. "/templates/$this->tpl/$name.phtml");
  12.                 return ob_get_clean();
  13.         }
  14.         public function set($vars){
  15.                 $this->vars = array_merge($this->vars, $vars);
  16.                 return $this->vars;
  17.         }
  18.         public function __set($k, $v){
  19.                 $this->vars[$k] = $v;
  20.         }
  21.         public function __get($k){
  22.                 return $this->vars[$k];
  23.         }
  24. }
  25.  
 
 Top
esterio
Отправлено: 29 Января, 2013 - 20:39:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




1. проще сделать extract
2. include имеет хорошую особенность, область видимости та где подключается файл, тоесть доступно свойство $this
(Добавление)
2-е я думаю что у Вас не работает, так не назначен обработчик для phtml, переменуйте в php или в htaccess добавте handler php для phtml
 
 Top
etoYA
Отправлено: 29 Января, 2013 - 20:49:42
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




esterio, если я в индексном файле пропишу
тогда выводится
 
 Top
esterio
Отправлено: 29 Января, 2013 - 20:51:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Я уже написал, разширения файлов phtml
спробуйте в htaccess
CODE (htaccess):
скопировать код в буфер обмена
  1. AddType application/x-httpd-php .phtml
 
 Top
etoYA
Отправлено: 29 Января, 2013 - 20:52:35
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




esterio, ничего не изменилось, да и пост выше.. Улыбка
 
 Top
esterio
Отправлено: 29 Января, 2013 - 20:55:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Интересует следующий момент. Что выводит. Если код, то причину я описал.
Попробуйте

далее уберите ob_* что будет?
даллее что будет если
 
 Top
etoYA
Отправлено: 29 Января, 2013 - 21:02:29
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




В индексном файле - выводит все переменные и массивы.
В подключаемом файле
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. Fatal error: Using $this when not in object context in Z:\home\test1.ru\www\templates\default\full_film.phtml on line 2
  3.  


Как я понял убрать ob_ в модели (View).
Тоже самое, если убрать ob_ в Loader'е, то все тоже самоеУлыбка
А именно
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. Undefined variable: title
  3.  


2й вариант - в индексе выводит все обьявленные переменные + обьекты, а в подключаемом

PHP:
скопировать код в буфер обмена
  1.  
  2. rray(3) { ["file"]=> string(9) "full_film" ["tpl"]=> string(7) "default" ["php_errormsg"]=> string(25) "Undefined variable: title" }
  3.  

(Отредактировано автором: 29 Января, 2013 - 21:04:57)

 
 Top
esterio
Отправлено: 29 Января, 2013 - 21:09:45
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




сегодня нету уже времени, нужно идти. завтра взгяну в код
 
 Top
etoYA
Отправлено: 29 Января, 2013 - 21:10:49
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




esterio, да я думаю не стоит, добавлю просто переменную inc, и в нее буду покдлючать файл через Include, тогда будет все ок, большое спасибо за помощь Улыбка
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB