Echo variable inside of textbox

14 posts by 4 authors in: Forums > CMS Builder
Last Post: November 18, 2011   (RSS)

I have a block of text that appears on several pages of my site that has a variable in the middle of it that changes based on the current page, ie..

Welcome to the Online Student Log-in for the INSERTSCHOOLNAMEHERE. This section of our website provides links to all the information online students and families need. Remember to review the important announcements noted below to stay up-to-date on course requirements.

The paragraph itself needs to manageable at a global level, via a textbox field in one section editor. But the variable needs to change on each page.

Right now I just have this:

<p>Welcome to the Online Student Log-in for the <?php echo $schoolRecord['title'] ?>. This section of our website provides links to all the information online students and families need. Remember to review the important announcements noted below to stay up-to-date on course requirements.</p>

But this doesn't allow me to manage the paragraph itself through the CMS.

I was thinking this would be done with a echo that looks for a specific string of characters and replaces it with a variable. But I don't know how to do this.

I tried including the php echo in the textbox but that didn't work - not surprisingly.

Re: [zip222] Echo variable inside of textbox

By Jason - September 16, 2010

Hi,

The best way to go about this, I think, would be to put a placeholder in your text that you can then replace with your variable. It's important that it be a string that you won't find anywhere else in the text. So, for example, your content in the text box could look like this:
Welcome to the Online Student Log-in for the *school_name* This section of our website provides links

You can then replace *school_name* when you are outputting your content.
(Note: In this example, we're assuming the string is stored in a field called content.)

<?php echo str_replace('*school_name*',$schoolRecord['title'],$record['content']);?>

In this code, the sub string *school_name* is replaced in the string $record['content'] with the variable $schoolRecord['title']

Hope this helps.
---------------------------------------------------
Jason Sauchuk - Project Manager
interactivetools.com

Hire me! Save time by getting our experts to help with your project.
http://www.interactivetools.com/consulting/

Re: [zip222] Echo variable inside of textbox

By Chris - September 16, 2010

Hi zip222,

I think the simplest and safest way to do this would be to use a custom placeholder and have a little PHP on your page to replace the placeholder.

For example, let's say this text is in your Global section, in a field called Welcome:

Welcome to the Online Student Log-in for the INSERTSCHOOLNAMEHERE. This section of our website provides links to all the information online students and families need. Remember to review the important announcements noted below to stay up-to-date on course requirements.

On your viewer pages, you'd load both your $globalRecord and your $schoolRecord, then when you're ready to output the welcome paragraph:

<?php
$welcome = $globalRecord['welcome'];
$welcome = str_replace('INSERTSCHOOLNAMEHERE', $schoolRecord['title'], $welcome);
echo $welcome;
?>


You can, of course, use a different placeholder. You'll probably want to include a note about the placeholder in your Field Description, so that if your users ever accidently delete it, they'll know how to get it back!

I hope this helps! Please let me know if you have any questions.
All the best,
Chris

Re: [chris] Echo variable inside of textbox

Just curious, what is it about Jason's approach that makes it either complicated or not safe?

Re: [zip222] Echo variable inside of textbox

By Chris - September 16, 2010 - edited: September 16, 2010

Hi zip222,

Our approaches are identical — I just forgot to refresh to make sure he hadn't already posted!

The alternative approach I was thinking of which was unsafe was evalling your content so that <?php ?> tags would execute. The problem there is that any user you allow to modify that field would be able to hack your site.
All the best,
Chris

Re: [chris] Echo variable inside of textbox

Thanks. Both approaches worked for me. And now I know a little more php than I knew before... and knowing is half the battle!

Re: [Jason] Echo variable inside of textbox

Hi Jason and everyone,

I've modified the code slightly to insert an image in a link that is inserted into the text field as follows:

In the text box field:
<a href="target_page.php"><img src="*variable*"></a>
And in the viewer:
<?php $subscribeImage = $common_informationRecords[0]['subscribe_now_button'][0]; ?>
<?php echo str_replace('*variable*',$subscribeImage['thumbUrlPath'],$pricingRecord['features_benefits']);?>


I've added another variable to the viewer with:
<?php $upgradeImage = $common_informationRecords[0]['upgrade_now_button'][0]; ?>

And added <a href="target_page2.php"><img src="*variable2*"></a> to the text box field.

Any thoughts on how I can modify the str_replace viewer code to insert the second link and image, and/or another text variable?

Anything that I've tried made a bit of a mess of things.

Thanks,

Jerry Kornbluth
The first CMS Builder reference book is now available on-line!







Take advantage of a free 3 month trial subscription, only for CMSB users, at: http://www.thecmsbcookbook.com/trial.php

Re: [gkornbluth] Echo variable inside of textbox

By Jason - October 13, 2011

Hi Jerry,

str_replace is a php function (http://ca3.php.net/str_replace) that searches for one string inside another and replaces all instances of that string.

So, if you want to be able to insert more than 1 piece of text into a string, you'll need more placeholders (*var*, *var1*, *var2*, etc). The actual name of the placeholder is irrelevant, but you should choose something that is unlikely to appear naturally in the text.

You can also use arrays with str_replace. For example:

<?php

$placeHolders = array("*var*", "*var1*", "*var2*");
$replaceWith = array($link1, $image1, $link2);

echo str_replace($placeHolders, $replaceWith, $record['content']);
?>


In this example, str_replace will look int $record['content'] and replace all instances of *var* with $link1, all instances of *var1* with $image1, and all instances of *var2* with $link2.

Hope this helps clarify
---------------------------------------------------
Jason Sauchuk - Project Manager
interactivetools.com

Hire me! Save time by getting our experts to help with your project.
http://www.interactivetools.com/consulting/

Re: [Jason] Echo variable inside of textbox

By gkornbluth - October 13, 2011 - edited: October 13, 2011

Thanks Jason!!!


It certainly does clarify my understanding a bit more

Jerry
The first CMS Builder reference book is now available on-line!







Take advantage of a free 3 month trial subscription, only for CMSB users, at: http://www.thecmsbcookbook.com/trial.php