Re: variable placeholders in a text file
| From: | Stephen | Date: | Mon, 31 Dec 2012 23:47:30 +0000 |
| Subject: | Re: variable placeholders in a text file | ||
| References: | 1 2 3 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-319988@lists.php.net to get a copy of this message | ||
On 12-12-31 03:37 PM, Nelson Green wrote:
On Mon, 31 Dec 2012 14:47:20 Stephen D wrote:Here is a sample from one of my sites. It is a simple one for the contact page. =====contact.php==== <?php $thispage = "Contact"; $contenttop = "<p>$thispage</p>"; $contentbody = <<<HEREDOC <p>stephen@roissy.ca</p> HEREDOC; require_once "include.php"; require_once "utilities.php"; echo $header . $markup; ================= The common stuff for every page is defined in the file "include.php". I define the variable $markup in that file. Here is the definition for $markup $markup=<<<HEREDOC <body> <div id="all">Yes! Easy standard stuff. $title = 'Mr."; $user_name = 'John Doe'; $message = "Hello $title $user_name ...." Just define the value for the variables before defining the value for the message. Note that $message has to use double quotes for the expansion. Also consider using HEREDOC instead of the double quotes. You may want to put your message in a text file and using the include function.Hi Stephen, My message is in a text file, but I'm using fopen and fread in a self-defined function, so message is actually defined as (GREETER_FILE is a defined constant): function print_greeting($user_name) {$handle = fopen(GREETER_FILE, "r"); $message = fread($file_handle, filesize(GREETER_FILE)); $msg_text = str_replace("USER", $user_name, $message); print($msg_txt);} And my text file is simply: $cat greet.txt Hello USER. How are you today? If I change USER to $user_name in the text file and change the print function parameter to $message, $user_name gets printed verbatim. In other words the greeting on my page becomes: Hello $user_name. How are you today? I want to pass the name Nelson to the function, and have it output: Hello Nelson. How are you today? after the function reads in text file input that contains a variable placeholder for the user name. I actually had a HEREDOC in the function, and that worked. But by reading a file instead, I can make things more flexible. I'd rather be changing a text file instead of a code file. The reason you get $user_name printed is because of the way you are populating the variable $message. You need to have $user_name embedded in double quotes or a HEREDOC when PHP parses $messsage. And $user_name has to have already been defined.
<div id="top">
<img src=$titlepng alt=$title />
</div>
<div id="main">
<div id="mainrow">
<div id="left">
$leftimage
<div id="mainnav">
<ul>
$menu
</ul>
</div>
</div>
<div id="content">
<div id="content-top">
$contenttop
</div>
<div id="content-body">
$contentbody
</div>
<div id="content-bottom">
</div>
</div>
</div>
</div>
<div id="footer">
$copyright
</div>
</div>
</body>
</html>
HEREDOC;
There is lots more code, but this is the important stuff.
By using require_once instead of fopen and fread, I have simpler code and PHP evaluates the embedded variables in $markup without any need to use string functions.
In your case, I would make the file greeter.php
=====greeter.php===
$message = "Hello $user_name. How are you today?"
===============
You replace the fopen and fread stuff with a require_once function and $message gets included and the user name resolved all in one line of code.
Hope this helps
--
Stephen