On Tuesday, July 2, 2002, at 01:52 PM, Henry wrote:
> Imagine I have a piece of text
>
> "Dear [firstname]
>
> Thankyou for purchasing [product] on [date].
>
> We're sure you'll be very [expectation].
>
> Ta Very much."
>
> Whats the easiest way to replace all the things in square brackets with
> variables of the same name.
>
> i.e. $firstname, $product, $date, $expectation
>
> Whilst ensuring that if the variable doesn't exist then it will be
> replaced
> with "" (absolutely nothing).
Here, I modified the template class I use for my site (very simple) to
do what you want. You need to have a template file that looks exactly
like what you wrote above (EXACTLY), nothing more. Here is a usage
example:
<?php
// the following vars have already been defined in your application,
// or are set to empty strings as appropriate:
// $firstname, $product, $date, $expectation
// create a new Template object
$template = new Template();
// specify where our template file is
$template->identifyTemplate('/path/to/file/above');
// set the parameters
$template->setParameter('firstname', $firstname);
$template->setParameter('product', $product);
$template->setParameter('date', $date);
$template->setParameter('expectation', $expectation);
// generate the output string and store in $outputStr
$outputStr = $template->createOutput();
// free memory occupied by the Template object instance
unset($template);
// print our data
print($outputStr);
Here is the class definition:
class Template
{
/**
* @var template
*/
var $template;
/**
* @var finalOutput
*/
var $finalOutput;
/**
* @var parameters
*/
var $parameters = array();
/**
* identifyTemplate
*
* determine which file to use for a template
*
* @access public
* @param string $template path to a template file
*/
function identifyTemplate($template)
{
$this->template = $template;
}
/**
* setParameter
*
* specify a name and a value to swap with that name
*
* this method can be called as many times as you have
* parameters.
*
* @access public
* @param string $name a parameter name
* @param string $value value of the parameter
*/
function setParameter($variable, $value)
{
$this->parameters[$variable] = $value;
}
/**
* createPage
*
* substitute parameter values where parameter names are found
*
* @access public
* @return string template combined with values (transformed)
*/
function createOutput()
{
// read the template into an array, then
// generate a string from that array
$this->finalOutput = implode("", (file($this->template)));
// loop though all the parameters, and
// set the variables from the file to
// their corresponding values
foreach ($this->parameters as $key => $value) {
$template_name = '[' . $key . ']';
$this->finalOutput = str_replace($template_name, $value,
$this->finalOutput);
}
return $this->finalOutput;
}
}
----
Erik Price
Web Developer Temp
Media Lab, H.H. Brown
[EMAIL PROTECTED]
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php