PHP in Templates / Complex Templates
Author Message
This is a relatively small plugin, but seems that a number of people wanted such a thing, so... here it is.

This plugin will allow you to use:
  • PHP in templates, using <?php ... ?> tags
  • Shortcut template conditionals, using <if ... then>...<elseif ... then>...<else>...</if>
  • Some shortcut string functions (see below), eg <func htmlspecialchars>...</func>
  • Call another template, using <template ...>, eg <template header>

For those that do not wish to allow arbitrary PHP code execution that this plugin offers, take a look at the Template Conditionals plugin.

Here's an example of some of the functions that this can be used for - for example, you may use this code in your postbit:

HTML Code
1
2
3
4
5
6
7
8
9
{$post['user_details']}

<if $post['fid5'] then>
Your game tag is <func htmlspecialchars_uni>{$post['fid5']}</func>
<elseif $post['fid6'] and $mybb->user['cancp'] then>
This user's lucky number is <func intval>{$post['fid6']}</func>
<else />Some other profile field: {$post['fid7']}</if>

<?php echo "Hi from PHP"; ?>


Some notes:

  • PHP tags must be closed with ?>
  • PHP runs slower than conditionals, so unless you need to use PHP, I recommend the conditionals
  • PHP inside the <?php ... ?> tags must be well formed, ie the following will not work:

    PHP Code:
    <?php if(true) { ?> some stuff <?php } ?>

    I'm thinking about whether to add support for the above, but there are performance reasons for me choosing not to.

  • The template insertion function is really basic - it performs no caching, so you should not call a lot of templates this way (there really isn't any nice way to get around this) however should be fine for small things.  Also, as it is basic, ensure that you don't stuff it up with recursive calls, that is, it's possible to try to get a template to call itself, but that will obviously cause MyBB to stuff up
  • As of v1.5, I've included the ability to perform additional cache checks, and enabled this option by default.  If you wish to disable this feature, it can be done by modifying a define in the .php file, but this is not necessary for most people (see post below this one for more info).
  • As of v2.1, PHP 5.3 or later is required

The functions available, with the shortcut, are:
htmlspecialchars, htmlspecialchars_uni, intval, file_get_contents, floatval, urlencode, rawurlencode, addslashes, stripslashes, trim, crc32, ltrim, rtrim, chop, md5, nl2br, strrev, strtoupper, strtolower, my_strtoupper, my_strtolower, alt_trow, get_friendly_size, filesize, strlen, my_strlen, my_wordwrap, random_str, unicode_chr, bin2hex, str_rot13, str_shuffle, strip_tags, ucfirst, ucwords, basename, dirname, unhtmlentities
(This post was last modified: 06-26-2023 10:42 PM by ZiNgA BuRgA.)
Find all posts by this user
Quote this message in a reply
Download: phptpl-2.3.7z (2.62 KB)
Plugin Version: 2.3
Last Updated: 06-26-2023, 10:42 PM

Downloads: 14,816
MyBB Compatibility: 1.2.x, 1.4.x, 1.6.x, 1.8.x
Plugin License: GPLv3
Uploader: ZiNgA BuRgA
MrBrechreiz Offline
Member
***
Posts: 69
Joined: May 2012
Post: #191
RE: PHP in Templates / Complex Templates
(05-13-2016 07:02 AM)Salakiss Wrote:  Hello !

I'm trying to hide a custom profile field of the user profile, so i just look for help.

fid7 = is a select box required on registration but i don't want to be changed on user profile

Can anyone help me please ?



Sorry for my english, i'm french.

Try this.

Open usercp_profile_customfield template and replacing everything with

PHP Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<if $profilefield['fid'] == 7 then>
<else>
<tr>
<td>
<span>{$profilefield['name']}</span>:
<br />
<span class="smalltext">{$profilefield['description']}</span>
</td>
</tr>
<tr>
<td>{$code}</td>
</tr>
</if>

05-15-2016 11:21 PM
Visit this user's website Find all posts by this user Quote this message in a reply
ZiNgA BuRgA Offline
Fag
*******
Posts: 3,357
Joined: Jan 2008
Post: #192
RE: PHP in Templates / Complex Templates
(03-28-2016 01:22 AM)DrXotick Wrote:  So we are now using this:

Code:
1
2
3
4
5
6
<if ($postcounter == 1) && in_array($fid, array(68)) && ($post['pid'] > 53109) then>
<hr class="style-four">
<strong>Budget: </strong>{$GLOBALS['threadfields']['budget']}<br />
<strong>Countries: </strong>{$GLOBALS['threadfields']['country']}<br />
<hr class="style-four">
</if>


And it works... Is this okay?? Or will cause some problem?

Well, it works, so there's no problem?

(05-12-2016 12:04 PM)Marisa Wrote:  Having an issue with the following code, IP simply doesn't display and code itself appears greyed out in the editor.

PHP Code:
<span>Connected via:</span> <?php echo $_SERVER['HTTP_X_FORWARDED_FOR']; ?>


Nginx and PHP7.0 aren't throwing any errors whatsoever in the logs either... Erf

Use echo get_ip(); instead?

(05-13-2016 07:02 AM)Salakiss Wrote:  I'm trying to hide a custom profile field of the user profile, so i just look for help.

fid7 = is a select box required on registration but i don't want to be changed on user profile
This plugin won't help you with that.  You could theoretically hide the field, but it won't stop users changing it.

My Blog
06-23-2016 10:09 AM
Find all posts by this user Quote this message in a reply
Castiel Offline
Junior Member
**
Posts: 1
Joined: Sep 2016
Post: #193
RE: PHP in Templates / Complex Templates
Im trying to do this but does not work:

PHP Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
				
<setvar years>floor((TIME_NOW-$post['regdate'])/(60*60*24*365))</setvar>
  <if $post['tplvars']['years'] == 0 then>
	<div></div>
     <else>
	<div class="postbit-time postbit-time-halfyear" style="margin-top: 3px;">
		<span style="color:gold" class="service-{$GLOBALS['tplvars']['years']}">{$GLOBALS['tplvars']['years']} ANOS DE SERVIÇO</span>
	</div>
  </if>
<setvar moths>floor((TIME_NOW-$post['regdate'])/(60*60*24*30))</setvar>
   <if ($post['tplvars']['moths'] > 0) then>
	<div class="postbit-time postbit-time-halfyear" style="margin-top: 3px;">
	        <span style="color:purple" class="service-{$GLOBALS['tplvars']['moths']}">{$GLOBALS['tplvars']['moths']} MESES DE SERVIÇO</span>
        </div>
  </if>

Only equal (=) and not equal (!=) works, less than or equal to (<=) and greater than or equal to (>=) doesn't.
how to make this work? Thanks!

(This post was last modified: 09-21-2016 12:31 AM by Castiel.)
09-21-2016 12:20 AM
Find all posts by this user Quote this message in a reply
Blacnova Offline
Junior Member
**
Posts: 1
Joined: Oct 2016
Post: #194
RE: PHP in Templates / Complex Templates
I'm trying to give the owner of my forums a tag, however, it doesn't seem to be working and is giving the tag to everyone.
plugin: http://mybbhacks.zingaburga.com/showthread.php?tid=260

Code:
<if $user['uid'] = 25 then><span style="color: red;">OWNER OF Forumsname</span></if>


Is $user['uid'] not the correct tag?
I've also tried $post['uid']

10-28-2016 04:46 PM
Find all posts by this user Quote this message in a reply
warmongerx Offline
Junior Member
**
Posts: 1
Joined: Dec 2016
Post: #195
RE: PHP in Templates / Complex Templates
hi , i am having this error:



Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /inc/plugins/phptpl.php on line 136
12-14-2016 07:04 PM
Find all posts by this user Quote this message in a reply
foxxie Offline
Junior Member
**
Posts: 9
Joined: Feb 2017
Post: #196
RE: PHP in Templates / Complex Templates
Hello!

For my forum I'm testing some plugins. This one is on our list. The users are able to say thank you to the first posts of threads in a certain forum. If they do so I'd like to put a specific note into the header_welcomeblock_member template.
Does someone know which variables I'd have to use with the following code?

PHP Code:
<if "thank you in thread with the ID x" then>some text
<else />another text</if>


Thinking about the first question another one pops up. In general: what variables can I use for stuff like the above? Is there a way to "find" the ones from plugins or the original MyBB codes in the files?

02-14-2017 05:34 AM
Find all posts by this user Quote this message in a reply
RateU Offline
Administrator
*******
Posts: 2,350
Joined: Mar 2010
Post: #197
RE: PHP in Templates / Complex Templates
TBH, I don't know the plugin. My guess is it doesn't provide the variable (I may be wrong). I think it is better for you to ask the plugin author?

02-15-2017 02:47 AM
Find all posts by this user Quote this message in a reply
foxxie Offline
Junior Member
**
Posts: 9
Joined: Feb 2017
Post: #198
RE: PHP in Templates / Complex Templates
I followed your advice and am waiting now for a response.
But my other question is still the same: in general how to I find variables that I can use for this?
02-15-2017 05:54 AM
Find all posts by this user Quote this message in a reply
RateU Offline
Administrator
*******
Posts: 2,350
Joined: Mar 2010
Post: #199
RE: PHP in Templates / Complex Templates
What do you mean by "in general"? If you still refer to the plugin,

(02-15-2017 02:47 AM)RateU Wrote:  My guess is it doesn't provide the variable (I may be wrong).

If later you have the variable, just use it inside your if condition.

02-16-2017 02:49 AM
Find all posts by this user Quote this message in a reply
foxxie Offline
Junior Member
**
Posts: 9
Joined: Feb 2017
Post: #200
RE: PHP in Templates / Complex Templates
Maybe I wasn't clear enough with the second question. ^^ That one has nothing to do with the plugin, just for the general use of the possible variables and how to find them. Do I have to use the column-names of the ones in the database (hope it's the right word, English is not my mother tongue) or something like that? For usergroups it seems to work like that. So I just wanted to know how to "get" them. ^^
02-16-2017 05:08 AM
Find all posts by this user Quote this message in a reply


Forum Jump: