Проблема с ob_get_contents

Духовность™

Продвинутый новичок
Проблема с ob_get_contents

Есть код:

PHP:
<?php
$var1 = 111;
$var2 = 222;
$var3 = 333;

ob_start();
include('mail.tpl');
$buffer = ob_get_contents();
ob_end_clean();
echo $buffer;
?>
mail.tpl:

PHP:
Здравствуйте <?=$var1?>!

Ваш логин: <?=$var2?>
Ваш пароль: <? echo $var3?>
на выходе:

Код:
Здравствуйте 111!

Ваш логин: 222Ваш пароль: 333
Вопрос - куда деваются символы newline после <?=$var2?> и <? echo $var3?>
 

Вурдалак

Продвинутый новичок
Тут ob не причём. PHP-теги так устроены, что если после «?>» есть перевод строки, то он игнорируется.

-~{}~ 26.07.10 16:46:

Ещё один плевок в сторону native, если хочется видеть красиво отформатированный исходный HTML-код. ;)
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ну натив тут не при делах, у смарти, к примеру, тоже куча траблов с выравниванием)
 

Вурдалак

Продвинутый новичок
Ну у Smarty эти проблемы, потому что разработчики над этим, видимо, не задумывались. Но исправить это в дальнейшем можно всегда.
 

Духовность™

Продвинутый новичок
если после «?>» есть перевод строки, то он игнорируется.
ох, ну да..

Ещё один плевок в сторону native, если хочется видеть красиво отформатированный исходный HTML-код.
Это не плевок, так, мелкая неприятность. Написать для единственного шаблона письма
PHP:
Ваш логин: <?=$user->getLogin()?><?="\n"?> // (или просто поставить пробел после ?>)
мне куда легче, чем терять возможность пользоваться управляющими конструкциями в шаблоне.
 

Вурдалак

Продвинутый новичок
triumvirat, я, кстати, жду твою статью про то, какое же говно эти шаблонизаторы :)

На Smarty только что проверил:
Код:
Здравствуйте, {$username}!

Ваш логин: {$login}
Ваш пароль: {$password}
Output:
Код:
Здравствуйте, Ghoul!

Ваш логин: Ghoul
Ваш пароль: 123
-~{}~ 26.07.10 17:01:

В твоём случае можно поставить по два перевода строки:
Код:
Здравствуйте <?=$var1?>!

Ваш логин: <?=$var2?>

Ваш пароль: <? echo $var3?>
Результат будет тот же.
 

Духовность™

Продвинутый новичок
я, кстати, жду твою статью про то, какое же говно эти шаблонизаторы
у меня нет времени писать, да и лень честно говоря. Ты вроде говорил, что не хочешь нервы трепать? Так вот я так же не хочу в холивары ввязываться и доказывать что native лучше. В конце-концов мне лень на подобную бредятину отвечать:
PHP многословен. Только для того чтобы просто вывести переменную необходимо не менее 14 символов (нет, использование более компактного <?= непреемлемо):

<?php echo $var ?>

Если вы сравните запись <?= $var ?> с записью <?php echo $var ?>, то увидите разницу в 7 символов, а не 2. Но это не главная проблема.

Кроме проблем с поддержкой XML и тем что параметр конфигурации short_open_tag различается у хостинг-провайдеров, это также вопрос стандартизации кода
 

Вурдалак

Продвинутый новичок
Автор оригинала: triumvirat
мне куда легче, чем терять возможность пользоваться управляющими конструкциями в шаблоне.
— т.е.? В том же Smarty ты можешь спокойно написать:
Код:
{$user->getLogin()}
Или что ты называешь «управляющими конструкциями»?
 

Духовность™

Продвинутый новичок
В твоём случае можно поставить по два перевода строки:
ну вот, видишь, какая хорошая идея! А ты говоришь плевок.

-~{}~ 26.07.10 17:08:

Или что ты называешь «управляющими конструкциями»?
Управляющие конструкции PHP:

PHP:
Здравствуйте<?=($this->user->getFullName() ? ', '.$this->user->getFullName() : '')?>!
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Мне вот кажется, что лучше слать все в HTML, где явно указывать <br/>. или уж если пишем с переводами строк, то писать явно \n не?
 

Вурдалак

Продвинутый новичок
triumvirat, зачем тебе PHP, если есть Си? Звучит не менее «аргументированно». Потому что удобнее.
Код:
Здравствуйте<?=($this->user->getFullName() ? ', '.$this->user->getFullName() : '')?>!
— жесть.
Код:
Здравствуйте{if $user->getFullName()}, {$user->getFullName()}{/if}!
Ты же хотел написать статью, вот и просим. Наверняка помимо эмоций у тебя есть что-то аргументированное, ведь так?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ну, вообще каждый дро"ит как он хочет. Я сам использую native шаблонизацию, не смотря на то, что в движке своем сделал out-of-the-box поддержку для smarty 3 и quicky.

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

Вурдалак

Продвинутый новичок
Настанет день, когда в PHP будет расширение типа Smarty, IMHO. Просто стандартные PHP-теги не очень хорошо подходят для этих целей.
 

Духовность™

Продвинутый новичок
triumvirat, зачем тебе PHP, если есть Си?
Отвечаю. Специально для тебя.

На С писать веб-сайты не удобно. А на PHP - очень удобно. Отчасти потому, что язык помимо всего прочего является идеальным шаблонизатором благодаря способности выходить из html. Это УДОБНО.

Я не использую иные шаблонизаторы по всего лишь одной причине: меня устраивает PHP в качестве шаблонизатора. Я не вижу смысла подключать какой-то другой шаблнизатор и писать на нем то
Код:
Здравствуйте{if $user->getFullName()}, {$user->getFullName()}{/if}!
что идентично пишется на чистом PHP:

PHP:
Здравствуйте <? if ($user->getFullName()):?>, <?=$user->getFullName()?><? endif ?>!
и прекрасно воспринимается любым разработчиком.

Какие ещё вопросы? Ты хочешь, что бы я прокомментировал Фабеньена и его бред о том, что "PHP многословен"? Я не вижу большой разницы между

Код:
<var>
и
PHP:
<?=$var?>
Короткие теги могут быть отключены у хостера? Не пользуйтесь бесплатными хостингами.

Что там ещё у него было? Режим песочницы? Извините, я не каждый день пишу порталы такого уровня.

Есть ещё вопросы из разряда "голый в тайге укололся о кактус и умираю от жады"?
 

c0dex

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