views:

448

answers:

5

Hi,

I am new to php and wondering if I can have something like this:

<?php
 ...
 magicFunctionStart();
?>

<html>
   <head>...</head>
   <body>...</body>
</html>

<?php
 $variable = magicFunctionEnd();
 ...
?>

What I have to use right now is

<?php
 ...
 $variable = "<html><head>...</head><body>...</body></html>"
?>

Which is annoying and not readable.

Thanks.

+1  A: 

Please take a look at a templating engine such as smarty it may help you do what you want.

Toby Allen
+9  A: 

Have you tried "output buffering"?

<?php
 ...
 ob_start();
?>

<html>
   <head>...</head>
   <body>...<?php echo $another_variable ?></body>
</html>

<?php
 $variable = ob_get_clean();
 ...
?>
Wabbitseason
Thanks. It is what I was looking for!
negative
One more question =) Is it possible to put other php variable inside of it? <html> <head>...</head> <body>$content</body> </html>
negative
Sure. I have modified to code so you can see how to do that.
Wabbitseason
Great! Thank you again.
negative
+1  A: 

I'm not really sure about what you are trying to accomplish, but I think something like the heredoc syntax might be useful for you:

<?
$variable = <<< MYSTRING

<html>
   <head>...</head>
   <body>...</body>
</html>

MYSTRING;

However if you are trying to make HTML templates I would highly recommend you to get a real templating engine, like Smarty, Dwoo or Savant.

CMS
+2  A: 

I think you want heredoc syntax.

For example:

$var = <<<HTML
<html>
   <head>
random crap here
</html>
HTML;
eplawless
+1  A: 

Hi

Ok what you want to do is possible in a fashion. You cannot simply assign a block of HTML to a php variable or do so with a function. However there is a number of ways to get the result you wish. 1 as I've mentioned above is to investigate the use of a templating engine (I suggest you do this its worth while anyway). The second is to use an output buffer.

One of the problems you have is that any HTML you have in your page is immediately sent to the client which means it cant be used as a variable in php. However if you use the functions ob_start and ob_end_fush you can achive what you want.

eg

<?php 
  somesetupcode();
  ob_start();  ?>
<html>
<body>
html text
</body>
</html>
<?php
  //This will assign everything that has been output since call to ob_start to your    variable.
  $myHTML = ob_get_contents() ;
  ob_end_flush();

?>

Hope this helps you can read up on output buffers in php docs.

Update:Fixed a bug in my code :)

Toby Allen
ob_end_flush() will not return the buffer, you're after ob_get_clean(): http://php.net/manual/en/function.ob-get-clean.php
Rob Howard