Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/22: Рейтинг темы: голосов - 22, средняя оценка - 4.68
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707

Ob_start(), include, и передача переменных

29.09.2015, 13:17. Показов 4592. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Есть объект, в который записывается содержимое файла header и текст, который будет выводится в файле header.
PHP
1
2
3
4
5
6
7
8
9
$Display = new object;
$Display->Content = 'asdasdsad';
 
ob_start();
include(DIR_VIEW.'/header.php');
$Display->Header = ob_get_contents(); 
ob_end_clean();
       
echo $Display->Header;
Содержимое файла header.php:

PHP
1
<?=$Display->Content?>
Проблема в том, что в файле header ничего не отображается, в том числе и ошибки. Пустота.

Подскажите, как реализовать то что я описал?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.09.2015, 13:17
Ответы с готовыми решениями:

Ob_start и include
Привет! Подскажите, как сделать так: ob_start(); include $File; //содержимое этого файла нам выводить на экран не надо, например...

Работа с файлами в C# с исп. библиотек #include <stdio.h> #include <stdlib.h> #include <math.h> #include <io.h>
В типизированном файле записаны названия городов и их численность. Увеличить численность каждого города на 5% (Количество жителей всегда...

Передача значений переменных или ссылок, неконтролируемое изменение переменных
// заголовок класса ObservableCollection&lt;LineDom&gt; Method1; Method1 = new ObservableCollection&lt;LineDom&gt;(); ...

11
Заблокирован
29.09.2015, 13:44
Цитата Сообщение от Randen Посмотреть сообщение
include(DIR_VIEW.'/header.php');
я бы убрал здесь скобки

Добавлено через 6 минут
и функцию include заменил бы на require - она хоть ошибку выдает
1
Заблокирован
29.09.2015, 13:44
Цитата Сообщение от a-fw Посмотреть сообщение
я бы убрал здесь скобки
Дело не в скобках, но и не в логике.

Randen, включите вывод ошибок.
1
Заблокирован
29.09.2015, 13:45
require используйте, даже с выключеными ошибками получите фаталерор
1
88 / 88 / 34
Регистрация: 22.05.2012
Сообщений: 404
29.09.2015, 14:13
Вот рабочий метод
PHP
1
2
3
4
5
6
7
8
public function renderPartial($template , $data){
        extract($data);
        ob_start();
        include( $this->tplPath.$template.'.php'  );
        $content = ob_get_contents();
        ob_end_clean();
        return $content;
    }
1
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
29.09.2015, 14:40  [ТС]
Всем спасибо. Extract работает

Добавлено через 9 минут
Эх. Поторопился. По памяти ответил. Раньше пользовался extract. Но теперь задача немного другая.

В общем ничего не изменилось.
Require не выдает ошибки.
Включение вывода ошибок также не выдает ошибки в данном случае.

Как же быть?

Добавлено через 3 минуты
Подробнее:

Я подключаю файл:
PHP
1
include('file.php');
,
в котором печатается переменная, наполненная другим файлом(file2).

А уже в файле 2(file2) используется переменная, которая была объявлена до include('file');
0
88 / 88 / 34
Регистрация: 22.05.2012
Сообщений: 404
29.09.2015, 15:07
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function renderPartial($template , $data){
        extract($data);
        try {
            if(file_exists($template.".php") && is_readable($template.".php")){    
                ob_start();
                include( $template.'.php'  );
                $content = ob_get_contents();
                ob_end_clean();
                return $content;
            }else{
                throw new Exception("Template file not found!", 1);
            }
 
        } catch (Exception $e) {
            echo "Error!".$e->getMessage().PHP_EOL;
        }
    }
 
echo renderPartial( $_SERVER['DOCUMENT_ROOT']."/s" , ['pps' => '123123123'] );
1
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
29.09.2015, 16:12  [ТС]
Programmer_, спасибо. Работает.

У меня extract стоит после этого кода:
PHP
1
2
3
4
ob_start();
                include( $template.'.php'  );
                $content = ob_get_contents();
                ob_end_clean();
Придется как-то выкручиваться.

Добавлено через 24 минуты
Но это еще не всё.

В классе такая функция есть
PHP
1
2
3
4
5
6
7
private function content() {
        ob_start();
        include(DIR_VIEW.$this->file_view);
        $result = ob_get_contents(); 
        ob_end_clean();
        return $result;
    }
Она присваивается переменной $Content.
PHP
1
$Content = $this->content();
Таким образом не получается то что мне надо.
Но если взять код этой функции, и вставить на место её вызова и заменить строку
PHP
1
return $result;
на
PHP
1
$Content = $result;
,
то тогда всё работает как надо.

Как так-то?

Добавлено через 2 минуты
По сути ведь одно и тоже. Странно
0
88 / 88 / 34
Регистрация: 22.05.2012
Сообщений: 404
29.09.2015, 20:37
Где-то бяда...Весь код класса в студию
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
29.09.2015, 20:58  [ТС]
Programmer_,
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<?php
 
abstract class controller {
    public $Object;
    public $header,$body,$footer;
    public $view = '/main.php';
    
    private $file_view;
    
    function __construct($name_page, $file_view, $css) {
        $this->file_view = $file_view;
        
        $Display = Array();
        $this->Object = new object();
        $this->Object->Add_CSS('/index.css');
        $Display['Header'] = $this->Render_Header($this->Object);
        //$Display->Right = $this->Render_Right($this->Object);
        $Display['Center'] = $this->Render_Center($this->Object);
        $Display['Footer'] = $this->Render_Footer($this->Object);
        
        foreach ($css as &$css_item) {
            $this->Object->Add_CSS($css_item);
        }
        unset($css_item);
        
        $name_model = $name_page . '_model';
        $file_model = 'model/' . $name_model . '.php';
        if (file_exists($_SERVER['DOCUMENT_ROOT'].'/'.$file_model)) {
            include($file_model);
            $model = new $name_model;
            $Display['Data'] = $model->data;
            
        };
        
        $this->Display = $Display;//Присвоение переменной для удобства чтения в main.php(view)
    }
    
    /*
    private function content() {
        ob_start();
        include(DIR_VIEW.$this->file_view);
        $result = ob_get_contents(); 
        ob_end_clean();
        return $result;
    }
     */
    
    private function Render_Header($obj) {
        $obj->Add_CSS('/header.css');
        ob_start();
        include(DIR_VIEW.'/header.php');
        $this->result = ob_get_contents(); 
        ob_end_clean();
        return $this->result;
    }
    private function Render_Right($obj) {
        $obj->Add_CSS('/right.css');
        ob_start();
        include(DIR_VIEW.'/right.php');
        $this->result = ob_get_contents(); 
        ob_end_clean();
        return $this->result;
    }
    private function Render_Center($obj) {
        $obj->Add_CSS('/center.css');
        $obj->Add_JS('/exchange.js');
        ob_start();
        include(DIR_VIEW.'/center.php');
        $this->result = ob_get_contents(); 
        ob_end_clean();
        return $this->result;
    }
    private function Render_Footer($obj) {
        $obj->Add_CSS('/footer.css');
        ob_start();
        include(DIR_VIEW.'/footer.php');
        $this->result = ob_get_contents();
        ob_end_clean();
        return $this->result;
    }
    
    
    //=====
    
    public function Get_Object() {
        return $this->Object;
    }
    
    //=====
    
    public function view() {
        $Display = $this->Display;//Присвоение переменной для удобства чтения в main.php(view)
        foreach(self::Get_Object()->css as &$value) {
            $Display['Style'] = $Display['Style'] . $value;
        }
        foreach(self::Get_Object()->js as &$value) {
            $Display['Script'] = $Display['Script'] . $value;
        }
        
        
        
        extract($Display);
        
        //=====Участок кода=====
        ob_start();
        include(DIR_VIEW.$this->file_view);
        $Content = ob_get_contents(); 
        ob_end_clean();
        //=====Участок кода=====
        
        include(DIR_VIEW.$this->view);
    }
    
}
 
?>
Добавлено через 46 секунд
Нужная нам часть кода обведена комментами "Участок кода" и находится в самом низу

Добавлено через 2 минуты
Не рабочий "Участок кода" выглядел таким образом:
PHP
1
2
3
//=====Участок кода=====
$Content = $this->content(); 
//=====Участок кода=====
Функция content() закоменчена вверху
0
88 / 88 / 34
Регистрация: 22.05.2012
Сообщений: 404
29.09.2015, 21:47
А зачем столько рендеров ?
Вот пример из моего старого-старого фреймика
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php
 
abstract class Controller extends App{
           
    public function __construct() {
        parent::__construct();
        $this->tplPath = DR.DS.'views'.DS;
    }
 
    public function getRequestParam($key = ''){
        //TODO: add request filter
        if(!empty($_GET)){
            if($key && !empty($_GET[$key])){
                return $_GET[$key];
            }  else {
                return $_GET;
            }
        }
    }
    
    public function getPostParam($key = ''){
        //TODO: add request filter
        if(!empty($_POST)){
            if($key && !empty($_POST[$key])){
                return $_POST[$key];
            }else{
                return $_POST;
            }
        }
    }
    
    
    public function render($template , $data){
        $layot = \Registry::get('config')['layot'];
            $content = $this->renderPartial($template, $data);
        ob_clean();
        ob_start();  
             include $this->tplPath.$layot.'.php';
               $cn = ob_get_contents();
        ob_end_clean();
        return $cn;
    }
    
    public function renderPartial($template , $data){
        extract($data);
        ob_start();
        include( $this->tplPath.$template.'.php'  );
        $content = ob_get_contents();
        ob_end_clean();
        return $content;
    }
    
    public function is_ajax(){
        if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
            return TRUE;          
        }else{
            return FALSE;
        }
    }
 
        
}
Тут просто в конфиге указывается общий шаблон в котором есть основная разметка (хедер, футер, меню ... т.п.) и просто переменная <?= $content; ?> в которую будут загружены куски шаблона страниц вьюх контроллера. Подключение скриптов динамичесски выполняется отдельным классом паттерн "Реестр" и так же выводится в основной шаблон, что подгружать указывается в шаблоне контроллера
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
30.09.2015, 12:54  [ТС]
Programmer_, рендеров столько для разделения кода на файлы: хедер, лево, право и футер.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.09.2015, 12:54
Помогаю со студенческими работами здесь

Загрузка переменных через #include
Всем честных выборов!) В общем есть программа, в которой больше места занимают переменные (массивы), чем код, что мне не очень...

#include<iostream>// подключение библиотек #include <conio.h> #include <climits>
помогите для этой программы сделать блок-схему. Пожалуйста #include&lt;iostream&gt;// подключение библиотек #include &lt;conio.h&gt; ...

Include (передача переменной)
Доброго всем времени суток! На хостинге Holm.ru не могу поймать переменную :( На основном файле (index.php) имеется меню - ...

Передача перменной в/из include
В общем-то тут недавно топик подымал про загрузку файлов, начитался тут про всякую безопасность... Так вот хотел спросить, если есть...

Передача параметров в include
Добрый день, коллеги. Что-то туплю. Помогите пожалуйста. в файле 1.htm имеется конструкция &lt;!--#include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru