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 и global

 PHP.SU

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


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

> Без описания
glutaminefree
Отправлено: 18 Ноября, 2013 - 13:23:09
Post Id



Новичок


Покинул форум
Сообщений всего: 39
Дата рег-ции: Апр. 2011  


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




Приветствую!

В гугле ничего найти не смог по этой теме. Вобщем внутри конструкции ob_start/ob_end_clean есть подключаемый файл, и в нём не работает конструкция global.

Вот примерно так:

PHP:
скопировать код в буфер обмена
  1.  
  2. $data = 'some data';
  3.  
  4. require('some_file.php');
  5. $html = ob_get_contents();
  6.  


Внутри подключаемого файла примерно такое:



Соответственно в $html ничего нет. $data внутри конструкции ob_start/ob_end_clean нормально дебажится, но вот в подключаемом файле почему-то даже после global не хочет отдавать данные.

Версия php - 5.4.17
ОС - Fedora 17 x86_64
 
 Top
Deonis
Отправлено: 18 Ноября, 2013 - 13:39:55
Post Id



Посетитель


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009  


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




Работать обязанно. Ошибок нет, global не нужен. Проверьте - правильный ли путь до файла.
P.S. Надеюсь, что переменную вы прверяете после отключения буферизации?
 
 Top
IllusionMH
Отправлено: 18 Ноября, 2013 - 14:18:43
Post Id



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


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


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




glutaminefree, для данной переменной уберите global. Пространство переменных для include и requrie наследуется от места подключения. Так что global не нужна и, наоборот, мешает.
Для данной строки кода это локальная переменная.
 
 Top
glutaminefree
Отправлено: 18 Ноября, 2013 - 14:19:10
Post Id



Новичок


Покинул форум
Сообщений всего: 39
Дата рег-ции: Апр. 2011  


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




Да, я уже проверил именно такой код. Работает как надо. У меня несколько иная ситуация. Там AJAX запрос и функция подлюкчения файла Wordpress'овская.

Пробовал не через AJAX тот же самый кусок кода использовать - работает отлично. Именно в AJAX обработчике почему-то переменная теряется.

get_defined_vars говорит, что переменная появляется, но пустая.

А global всё же нужен, ибо подключается файл на самом деле через функцию. Я просто подумал, что не в Wordpress дело, и накатал упрощенную версию кода.

(Отредактировано автором: 18 Ноября, 2013 - 14:20:46)

 
 Top
IllusionMH
Отправлено: 18 Ноября, 2013 - 14:20:23
Post Id



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


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


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




glutaminefree, подключение через get_template_part?
 
 Top
glutaminefree
Отправлено: 18 Ноября, 2013 - 14:22:49
Post Id



Новичок


Покинул форум
Сообщений всего: 39
Дата рег-ции: Апр. 2011  


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




IllusionMH пишет:
glutaminefree, подключение через get_template_part?


Через неё самую. Причём в файлах шаблонов используется абсолютно точно такой же код, и там переменная внутри подключаемого файла нормально видится.

А внутри AJAX срипта почему-то беда такая. AJAX работает у меня через хук WP

PHP:
скопировать код в буфер обмена
  1. add_action('wp_ajax_my_func', 'my_func');

(Отредактировано автором: 18 Ноября, 2013 - 14:24:23)

 
 Top
IllusionMH
Отправлено: 18 Ноября, 2013 - 14:28:13
Post Id



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


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


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




glutaminefree, если есть возможность тогда делайте сразу через require без функции wp.
либо
PHP:
скопировать код в буфер обмена
  1. global $data;
  2. $data = 'data';
  3.  
  4. get_template_part(); //global $data внутри шаблона
 
 Top
glutaminefree
Отправлено: 18 Ноября, 2013 - 14:39:21
Post Id



Новичок


Покинул форум
Сообщений всего: 39
Дата рег-ции: Апр. 2011  


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




Ну у меня так и происходит.

PHP:
скопировать код в буфер обмена
  1.  
  2. $comments_list = /*запрос с WP_Comment_Query*/
  3.  
  4.  
  5. /*
  6. из этого места переменная дебажится нормально,
  7. в ней то, что и должно быть
  8. */
  9.  
  10. get_template_part('parts/comments', 'loop');
  11. $html = ob_get_contents();
  12.  


Внутри comments-loop.php:

PHP:
скопировать код в буфер обмена
  1.  
  2. global $comments_list;
  3.  
  4. /*далее цикл с выводом данных*/
  5.  


Всё это прекрасно работает, если использовать из шаблонов (например search.php, или на любой странице). И даже если обвернуть в ob_start/ob_end_clean, а потом вывести буфер.

Но если я использую этот код внтури функции:

PHP:
скопировать код в буфер обмена
  1.  
  2. function more_search() {
  3.         /*Тут тот самый код*/
  4. }
  5. add_action('wp_ajax_more_search', 'more_search');
  6. add_action('wp_ajax_nopriv_more_search', 'more_search');
  7.  


То внутри подключаемого шаблона переменная оказывается пустой. Что очень очень странно. Посмотрел исходники всех функций, которые учавствуют в get_template_part и не нашёл ничего, из-за чего такое бы могло происходить. Может искал плохо.

(Отредактировано автором: 18 Ноября, 2013 - 14:42:00)

 
 Top
IllusionMH
Отправлено: 18 Ноября, 2013 - 14:43:15
Post Id



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


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


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




glutaminefree, пробуйте
PHP:
скопировать код в буфер обмена
  1. global $comments_list;
  2. $comments_list = /*запрос с WP_Comment_Query*/


а при AJAX запросе вы точно проходите шаги присвоения переменной?

(Отредактировано автором: 18 Ноября, 2013 - 14:44:51)

 
 Top
glutaminefree
Отправлено: 18 Ноября, 2013 - 14:48:27
Post Id



Новичок


Покинул форум
Сообщений всего: 39
Дата рег-ции: Апр. 2011  


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




IllusionMH пишет:
а при AJAX запросе вы точно проходите шаги присвоения переменной


Да. Прокомментировал выше, что она дебажится нормально даже внутри блока ob_start/ob_end_clean в месте прямо перед подключением шаблона.
 
 Top
IllusionMH
Отправлено: 18 Ноября, 2013 - 14:57:10
Post Id



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


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


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




glutaminefree, global $comments_list; пробовали добавить перед присвоением (внутри вашей функции)?

(Отредактировано автором: 18 Ноября, 2013 - 15:00:16)

 
 Top
glutaminefree
Отправлено: 18 Ноября, 2013 - 14:58:46
Post Id



Новичок


Покинул форум
Сообщений всего: 39
Дата рег-ции: Апр. 2011  


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




Нет. Не думаю, что это поможет. Но всё таки проверю, но уже завтра. Сейчас работать закончил. Спасибо за советы!
 
 Top
IllusionMH
Отправлено: 18 Ноября, 2013 - 15:11:14
Post Id



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


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


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




glutaminefree, поможет - факт.
пробелма с get_template_part в том, что до require('нужный файл') пройдет еще несколько вызовов других функций и локальные переменные для функции more_search перестанут быть таковыми в точке вызова require.
Если она будет глобальной - тогда она будет видима, но может появиться проблема с коллизией имен
 
 Top
glutaminefree
Отправлено: 19 Ноября, 2013 - 08:39:52
Post Id



Новичок


Покинул форум
Сообщений всего: 39
Дата рег-ции: Апр. 2011  


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




Действительно помогло. Спасибо за помощь.
 
 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