Разпечатване на html код

dakata__92

Super Moderator
Колеги, как мога на дадена страница да спра разпечатването на html кода до момента да почистя браузъра тоест да не показва кода ако има такъв и да изведа някакъв друг HTML с php? Предполагам ще е нещо свързано с http://php.net/manual/bg/function.ob-start.php

HTML:
<html>
<head>
.
.
.
1
.
.
<body>
Имам някакъв зареждащ се код, който спирам до <body> таг и неискам да се визуализира в браузъра, а да изпише примерно друг html без да рефрешва, като почиства буфера и започва отначало да принтира от php.

PHP:
<?php

//end to body някакво почистване и веднага принт.

echo '<html><head>bla 2</head><body>bla</body></html>';

Предполагам отново че ще се работи с буферите но нещо съм забил тотално как ще стане.
 
Попринкцип си ползвам буферите, горе-долу съм на ясно с тях, ама сега като го прочетох и аз никаква идея няма. Мисля, че има един начин все пак хаха :D

Предлагам ти да рендваш и Използваш Js -> document.write('prezapiswane na wsichko v body') / $('body').html('тест') и дефакто при всяко рендване ще ти замества html-а .

Мисля, че ако дадеш по ясен пример, по -лесно ще те разберем :D :idea: :?:
 
Код:
<?php
ob_start("process");
function process($html) {
$new = explode("<body", $html);
return $new[0];
}
?>
<html>
<head>
...
</head>
<body>
...
</body>
</html>
<?php
ob_end_flush();
echo "Още output";
?>

Това ще върне:
Код:
<html>
<head>
...
</head>
Още output

Не знам дали правилно ти разбрах въпроса, но предполагам, че от кода ще добиеш представа как може да ползваш буферите за манипулация на изхода
 
Мисля, че даката имаше предвид цялостно изтриване на принтнатото до момента.
И мисля, че това описва точно как се прави: http://stackoverflow.com/a/1057997/

PHP:
<?php

ob_start();
echo 'a';
print 'b';

// some statement that removes all printed/echoed items
ob_end_clean();

echo 'c';

// the final output is equal to 'c', not 'abc'
 
anonimen каза:
Мисля, че даката имаше предвид цялостно изтриване на принтнатото до момента.
И мисля, че това описва точно как се прави: http://stackoverflow.com/a/1057997/

PHP:
<?php

ob_start();
echo 'a';
print 'b';

// some statement that removes all printed/echoed items
ob_end_clean();

echo 'c';

// the final output is equal to 'c', not 'abc'
Ти разбра какво имах предвид но все още проблема стои. Няма как да изчистя визуализираното до момента и да тресна грешката. :o
 
https://developer.mozilla.org/en-US/docs/Web/API/Window/stop

Не знам дали това ще успее да ти помогне по някакъв начин.

Аз бих се опитал да направя следното. Говоря чисто теоритично:

Буферирам съдържанието ред по ред, ако трябва и в масив. Буферирам също и флаг за спиране на рендирането. Този масив го пращам последователно, докато не срещне съответния флаг или край на масива(това ще е лошо, поради многото заявки чрез аякс).
При срещане на този флаг, задействаш при клиента window.stop() и пращаш флаг към бекенда, за да нулираш масива или да вземеш новите данни от него, като съответно презареждаш страницата или пренасочваш към същата страница, за да е по-неусетно.

Въпроса е вече какво искаш да постигнеш с това. Какво съдържание ще имаш и т.н.

ЕДИТ: Всъщност ти правиш обработките като бекенд, попълваш масива и го пращаш целия по AJAX. При клиента почваш да го рендираш постепенно със setInterval и така. Г/д така си представям нещата аз.
 
dakata__92 каза:
... Няма как да изчистя визуализираното до момента и да тресна грешката. Surprised
Предполагам това е защото нямаш контрол върху по-рано изпълнен код, в който да сложиш ob_start() ли? Иначе не виждам защо да не можеш (предвид кода. за който в stack казват че прави това).
 
anonimen каза:
dakata__92 каза:
... Няма как да изчистя визуализираното до момента и да тресна грешката. Surprised
Предполагам това е защото нямаш контрол върху по-рано изпълнен код, в който да сложиш ob_start() ли? Иначе не виждам защо да не можеш (предвид кода. за който в stack казват че прави това).
Точно заради това.
 
Бърз преглед в gogle не дава директно решение, така че предполагам най-сигурно ще е да изпълняваш въпросния скрипт без да имаш връзка с клиент (примерно cron?) и да записваш във файл, който да прочиташ по-късно.
Практически няма как да стане - все едно да накараш принтер да изтрие това, което е отпечатал.
Щях да ти предложа да извикаш въпросния скрипт от външна програма, в която да игнорираш досегашния оутпут и да принтнеш каквото ти трябва; предполагам че това не върши работа, щом нямаш контрол над "горния" скрипт?

Примерно:

PHP:
<?php

ob_start();
include 'bad_script.php';
ob_flush....
echo "It's ok now";
 
anonimen каза:
Бърз преглед в gogle не дава директно решение, така че предполагам най-сигурно ще е да изпълняваш въпросния скрипт без да имаш връзка с клиент (примерно cron?) и да записваш във файл, който да прочиташ по-късно.
Практически няма как да стане - все едно да накараш принтер да изтрие това, което е отпечатал.
Щях да ти предложа да извикаш въпросния скрипт от външна програма, в която да игнорираш досегашния оутпут и да принтнеш каквото ти трябва; предполагам че това не върши работа, щом нямаш контрол над "горния" скрипт?

Примерно:

PHP:
<?php

ob_start();
include 'bad_script.php';
ob_flush....
echo "It's ok now";
То е за ерор репортинг и направо драснах една страница в която да трещи грешките от класовете и това е. :)
 
Сега ми стана по-ясно, тук решението може би е манипулация на DOM с javascript.
Принтваш си всичко както му е реда, накрая ако имаш грешки принтваш 1 елемент (div, section) с грешките и му слагаш id="error", след него принтваш 1 javascript, който да провери дали има елемент с id=error, ако има да взима съдържанието му в променлива, изчиства страницата и принтва грешките
 
Това което искаш да направиш няма как да се получи.

Виж тук защо: https://gregorybeamer.wordpress.com/2009/12/08/asp-net-tutorial-request-and-response-and-cookies-for-santa/

Време е да мигрираш към MVC, така логиката ти ще е в controller-ите и в зависимост от резултата, ще заредиш каквото си view пожелаеш.
 
eLite каза:
Това което искаш да направиш няма как да се получи.

Виж тук защо: https://gregorybeamer.wordpress.com/2009/12/08/asp-net-tutorial-request-and-response-and-cookies-for-santa/

Време е да мигрираш към MVC, така логиката ти ще е в controller-ите и в зависимост от резултата, ще заредиш каквото си view пожелаеш.
На мен ми е ясно, че проблема е точно, че липсва МVC модела, понеже системата не е моя, но горе долу се опитвам да въведа точно този модел във вече съществуващата система. Справих се с проблема. От ерор хендлъра пращам гет заявка към визуализираща страница и това е :)
 

Back
Горе