Помогинте разобраться с экранированием HTML (типа $result .= <<<HTML HTML;)

artnik7

Новичок
Привет!

Не могу понять как работает такое экранирование - <<<HTML HTML;
Мне нужно обратить большой php файл, генерирующий html, в одну переменную. Но когда я в начале кода ставлю $result .= <<<HTML, то повсюду возникают ошибки php. Может этой канителью можно экранировать только html а не весь php файл?
 

artnik7

Новичок
а какой тогда нормальный? Мне посоветовали что-то типо такого
PHP:
$code = "?>".file_get_contents('file.php');
ob_start();
eval($code);
$html = ob_get_contents();
ob_end_clean();
Но этот метод возвращает весь php файл со всеми функиями, скобками. Вобщем все в виде строки. А мне нужно чтобы этот PHP запускался и возвращал то что он сгенерировал. Е еще... в этом примере работает только return $code, если ставить return $html, то ничего не возвращаеться.
 

radioheaded

PHP нуб
Почему бы вам просто не использовать html? Зачем куда-то его засовывать?
 

artnik7

Новичок
Мне нужно получить код панели авторизации через ajax, после нажатия на "выйти". но там не просто html, a php файл
 

radioheaded

PHP нуб
Ну так вынесите логику отображения в отдельный файл, будут куски php с кусками html, но не в перемешку и без всяких кавычек и heredoc.
 

artnik7

Новичок
У меня и так все в одном файле. Вот кусок из него, чтобы было более понятно
PHP:
<?php

	global $user_ID, $user_identity;
	get_currentuserinfo();
	if (!$user_ID) {
		//Signup Links
		$usersCanRegister = get_option('users_can_register');
		if ($canRegister) {
			if (function_exists('bp_get_signup_page')) { //Buddypress
				$register_link = bp_get_signup_page();
			} elseif (file_exists(ABSPATH."/wp-signup.php")) { //MU + WP3
				$register_link = site_url('wp-signup.php', 'login');
			} else {
				$register_link = site_url('wp-login.php?action=register', 'login');
			}
		}
?>
        <?php if (os_get_option('tl_login_is') == 'on') : ?>
        <li><a href="javascript:void(0);" id="loginOrReister"><?php os_option('tl_login'); ?></a>
        
          <!-- LOGIN POPUP -->
          <div id="loginbox">
            <a href="javascript:void(0);" class="close"></a>
            
            <?php if (function_exists('login_with_ajasx')) : login_with_ajax(); // If "Login With Ajax" plugin is active ?>
            <?php else : ?>
            
            <?php // Login form ?>
            <div id="loginbox_login">
              <h3><?php _e('Log In'); ?></h3>
              <form method="post" action="<?php bloginfo('url') ?>/wp-login.php">
                <p>
                  <label for="log"><span><?php _e('Username'); ?>:</span></label>
                  <input class="text" type="text" value="" id="log" name="log" />
                </p>
                <p>
                  <label for="pwd"><span><?php _e('Password'); ?>:</span></label>
                  <input class="text" type="password" value="" id="pwd" name="pwd" />
                </p>
......... и т.д и.т.п
 

artnik7

Новичок
Ну а как... heredoc фигня, кавычки тоже... Каким тогда еще можно способом?
 

artnik7

Новичок
Ок, еще раз. Мне нужно получить HTML логин-панели, сгенерированный этим PHP файлом. Как это сделать? Желательно в одну переменную, чтобы можно было ее потом ретурнить
 

artnik7

Новичок
Ну вот, тут по идее уже все почти готово. Только не срабатывает eval (или еще что-то)
PHP:
$code = "?>".file_get_contents('file.php');
ob_start();
eval($code);
$html = ob_get_contents();
ob_end_clean();
Снизу добавляю return $html но ничего не возвращаеться
 

artnik7

Новичок
include возвратит весь php файл в одну переменную... Тогда в ней получиться не поймешь что, и php код и html... Впринципе я этот способ пробовал. ajax возвращает 0
 

Single

пилот капсулы
Почему бы "HTML логин-панели" не хранить на стороне клиента?
Зачем гонять куски html кода аджакс запросами?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Для того, чтобы отрендерить часть шаблона в переменную, надо соответственно и оформлять код, чтобы он лишнего не выводил, для этого или разносят код по подшаблонам, или используют условия при выводе.
 
Сверху