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,871
MyBB Compatibility: 1.2.x, 1.4.x, 1.6.x, 1.8.x
Plugin License: GPLv3
Uploader: ZiNgA BuRgA
leefish Offline
Hamster
*****
Posts: 1,009
Joined: Apr 2010
Post: #21
RE: PHP in Templates / Complex Templates
Hmm, noob question I know, but I was wondering if there was a direct link to the board url that should be used in templates rather than me putting the "real" url in? Something like

Code:
<img src={mybburl/images/default.avatar.jpg}



[Image: leelink.gif]
MYBB1.6 & XThreads
06-12-2010 05:49 AM
Visit this user's website Find all posts by this user Quote this message in a reply
RateU Offline
Administrator
*******
Posts: 2,350
Joined: Mar 2010
Post: #22
RE: PHP in Templates / Complex Templates

Code:
{$mybb->settings['bburl']}


06-12-2010 06:02 AM
Find all posts by this user Quote this message in a reply
Walkman 5.0 Offline
Junior Member
**
Posts: 11
Joined: Mar 2010
Post: #23
RE: PHP in Templates / Complex Templates
:/ i need recice the avatar only for the gid 4 in postbit

any idea???

i try this but dont work
<if $post['gid'] == 4 then>
<img src blah blah with="">
<elseif $post['fid6'] and $mybb->user['cancp'] then>
<img src blah blah> (the casual code)
<else /></if>
06-25-2010 03:26 AM
Find all posts by this user Quote this message in a reply
RateU Offline
Administrator
*******
Posts: 2,350
Joined: Mar 2010
Post: #24
RE: PHP in Templates / Complex Templates
You need $post['usergroup'] to get the user group id.

06-25-2010 03:48 AM
Find all posts by this user Quote this message in a reply
Walkman 5.0 Offline
Junior Member
**
Posts: 11
Joined: Mar 2010
Post: #25
RE: PHP in Templates / Complex Templates
i try this but dont work Frown
<if in_array($GLOBALS['mybb']->user['usergroup'], array(4)) then>
<a href="{$post['profilelink_plain']}"><img class="post_avatar" src="{$post['avatar']}" alt="" width="80px" height="80px" /></a>
<else>
<a href="{$post['profilelink_plain']}"><img class="post_avatar" src="{$post['avatar']}" alt="" {$avatar_width_height} /></a>
</if>

this recice the avatar of all users
06-25-2010 04:04 AM
Find all posts by this user Quote this message in a reply
RateU Offline
Administrator
*******
Posts: 2,350
Joined: Mar 2010
Post: #26
RE: PHP in Templates / Complex Templates
(06-25-2010 04:04 AM)Walkman 5.0 Wrote:  <if in_array($GLOBALS['mybb']->user['usergroup'], array(4)) then>

(06-25-2010 03:48 AM)RateU Wrote:  You need $post['usergroup'] to get the user group id.

06-25-2010 04:17 AM
Find all posts by this user Quote this message in a reply
Walkman 5.0 Offline
Junior Member
**
Posts: 11
Joined: Mar 2010
Post: #27
RE: PHP in Templates / Complex Templates
<if in_array($GLOBALS['mybb']->post['usergroup'], array(4)) then>
<a href="{$post['profilelink_plain']}"><img class="post_avatar" src="{$post['avatar']}" alt="" width="80px" height="80px" /></a>
<else>
<a href="{$post['profilelink_plain']}"><img class="post_avatar" src="{$post['avatar']}" alt="" {$avatar_width_height} /></a>
</if>

this dont recice nothing Frown
06-25-2010 04:27 AM
Find all posts by this user Quote this message in a reply
RateU Offline
Administrator
*******
Posts: 2,350
Joined: Mar 2010
Post: #28
RE: PHP in Templates / Complex Templates

Code:
<if in_array($post['usergroup'], array(4)) then>
<a href="{$post['profilelink_plain']}"><img src="{$post['avatar']}" alt="" width="80px" height="80px" /></a>
<else>
<a href="{$post['profilelink_plain']}"><img src="{$post['avatar']}" alt="" {$avatar_width_height} /></a>
</if>


06-25-2010 04:31 AM
Find all posts by this user Quote this message in a reply
Walkman 5.0 Offline
Junior Member
**
Posts: 11
Joined: Mar 2010
Post: #29
RE: PHP in Templates / Complex Templates
=D this is perfect man thanks
06-25-2010 04:40 AM
Find all posts by this user Quote this message in a reply
ZiNgA BuRgA Offline
Fag
*******
Posts: 3,357
Joined: Jan 2008
Post: #30
RE: PHP in Templates / Complex Templates
Updated to v1.6 to fix issues with MyNetwork: http://resources.xekko.co.uk/thread-66.html

My Blog
08-14-2010 07:35 PM
Find all posts by this user Quote this message in a reply


Forum Jump: