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
Форумы портала PHP.SU :: Версия для печати :: проблема с ob_start()
Форумы портала PHP.SU » » Вопросы новичков » проблема с ob_start()

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

1. etoYA - 29 Января, 2013 - 20:20:24 - перейти к сообщению
В шаблоне сайта главный файл 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.  
2. esterio - 29 Января, 2013 - 20:26:25 - перейти к сообщению
Опишите небольшой пример 2-х файлов(главного и подключаемого чтобы увидеть), а так пока не ясно что у вас не так. так просмотрев код он должен работать.

Вы что там свою CMS пишете?
3. etoYA - 29 Января, 2013 - 20:33:23 - перейти к сообщению
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. <?=$title;?>
  3.  

Контроллер, отсюда отправляю данные во вьюху
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.  
4. esterio - 29 Января, 2013 - 20:39:19 - перейти к сообщению
1. проще сделать extract
2. include имеет хорошую особенность, область видимости та где подключается файл, тоесть доступно свойство $this
(Добавление)
2-е я думаю что у Вас не работает, так не назначен обработчик для phtml, переменуйте в php или в htaccess добавте handler php для phtml
5. etoYA - 29 Января, 2013 - 20:49:42 - перейти к сообщению
esterio, если я в индексном файле пропишу
тогда выводится
6. esterio - 29 Января, 2013 - 20:51:15 - перейти к сообщению
Я уже написал, разширения файлов phtml
спробуйте в htaccess
CODE (htaccess):
скопировать код в буфер обмена
  1. AddType application/x-httpd-php .phtml
7. etoYA - 29 Января, 2013 - 20:52:35 - перейти к сообщению
esterio, ничего не изменилось, да и пост выше.. Улыбка
8. esterio - 29 Января, 2013 - 20:55:47 - перейти к сообщению
Интересует следующий момент. Что выводит. Если код, то причину я описал.
Попробуйте

далее уберите ob_* что будет?
даллее что будет если
PHP:
скопировать код в буфер обмена
9. etoYA - 29 Января, 2013 - 21:02:29 - перейти к сообщению
В индексном файле - выводит все переменные и массивы.
В подключаемом файле
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.  
10. esterio - 29 Января, 2013 - 21:09:45 - перейти к сообщению
сегодня нету уже времени, нужно идти. завтра взгяну в код
11. etoYA - 29 Января, 2013 - 21:10:49 - перейти к сообщению
esterio, да я думаю не стоит, добавлю просто переменную inc, и в нее буду покдлючать файл через Include, тогда будет все ок, большое спасибо за помощь Улыбка

 

Powered by ExBB FM 1.0 RC1