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

Reply via email to