SMF Ads Support Forum

Themes/Language => Theme Support => Topic started by: ccbtimewiz on October 24, 2008, 07:19:00 PM

Title: Ad Management on Custom Themes (SMF 1.1.x)
Post by: ccbtimewiz on October 24, 2008, 07:19:00 PM
Ad Management on Custom Themes for SMF 1.1.x
Created by ccbtimewiz

Guide Index
Section I: What is a custom theme?  (#post_ref1)
Section II: How do I edit a theme? What is FTP? (#post_ref2)
Section III: What should I know before editing the theme? (#post_ref3)
Section IV: Overview of editing the template (#post_ref4)
* ./Themes/{your_theme}/index.template.php [parse] (#post_ref5)
* ./Themes/{your_theme}/BoardIndex.template.php [parse] (#post_ref6)
* ./Themes/{your_theme}/MessageIndex.template.php [parse] (#post_ref7)
* ./Themes/{your_theme}/Display.template.php [parse] (#post_ref8)





What is a custom theme?

Firstly, a theme in general is the look and feel of the forum. Themes can be switched between by users, and usually have their own HTML, CSS, Javascript, and images. Themes control virtually every visual aspect of SMF, allowing for easier customization.

A custom theme is any theme you use in replacement of the default theme. Modifications through the Package Manager are installed on the default theme's template files. It is quite difficult for a modification's author as well as a theme creator to make their modifications work with other themes especially if they have several of their own template files. When a template file is not found in a custom non-default theme, the theme will rollback and use the default theme's template. However for the template files that the custom theme does use, you will need to manually install the modification on to template files.

The "default" theme is, actually, not the "default theme." while SMF starts out with it as the theme, the "Default" theme is only a collection of the default templates.  That is, these templates are "fallbacks" incase the current theme does not have the template.

This is similar to URLs - if you don't specify a domain name, (ie. /style.css) it uses the default. (making it www.simplemachines.org/style.css)  In this case, it's a bit different, but the concept is the same.

Almost 90% of the time, every theme has their own index.template.php and Display.template.php files. This meaning, in order to use the Ad Management mod, you'll be needing to edit those template files in your theme folder. This guide was made to ease the process of editing those template files.


How do I edit a theme? What is FTP?

In order to actually edit the template files, you'll be needing to actually download the said files from your server and then open them in a programming notepad. This may seem like a daunting task, but this guide is what makes it simple.

Firstly you'll be needing a good FTP client. Likewise you'll need to understand what FTP is and how to operate it.

Refer to the documents on the SMF website as it would take a large amount of time to explain this.

What is FTP? / How do I use FTP? / What are good FTP clients? (http://docs.simplemachines.org/index.php?topic=480.msg689#msg689)

For a programming notepad, I highly suggest Notepad++ (http://notepad-plus.sourceforge.net/uk/download.php). It's a tool that will make it far easier to program in PHP and it will assist you greatly in making the edits for this mod.

What should I know before editing the theme?

The basic concept of PHP in SMF terms. I'll try my best to explain it and hopefully it will assist you in making the template edits for the mod.

Firstly, SMF is made up of PHP and MySQL. You don't need to worry about MySQL right now, though.

What you need to understand is that whenever you make an edit with solely HTML, you need to be sure it's within an echo() string. The markup for an echo string and most of PHP contain ' and ;.

You'd for example, write a string such as:

echo '<div align="center">Hello!</div>';

See? The HTML is inside the echo string and is concatenated between the ' and ' and then it's ended with a ;

However if you're writing something that doesn't have any HTML code, then you need to make sure you echo() out anything that goes after. Such as for example, if the parser said to:

Find:
<body>';

But in your template, you had something along the lines of:
<body>
<div id="sag1">
  <div id="sol1">
<div id="alt1">
<div id="altsag1">
  <div id="altsol1">


You cannot simply add the code after. You need to first close the body tag from the echo string so you can write another string or use variables.

So, you'd do:
<body>';

{ the ad code }

<div id="sag1">
  <div id="sol1">
<div id="alt1">
<div id="altsag1">
  <div id="altsol1">


Ah, but can you see now? The rest of the HTML is no longer in an echo() string! It's being treated as variables and that will cause a parse error. You'll be needing to add another echo statement there, like so:

<body>';

{ the ad code }

echo '
<div id="sag1">
  <div id="sol1">
<div id="alt1">
<div id="altsag1">
  <div id="altsol1">


Hopefully you're with me at this point. If you didn't understand feel free to ask questions. I'm more then willing to update this guide to be simpler.

This is about as much as you'd need to know on making edits. If you're interested in learning more about SMF or how PHP works, feel free to look at www.simplemachines.org or go to www.php.net to learn more.


Overview of editing the templates

This is the last part of the guide. Hopefully you've understood what I've been saying so far and that you'll be able to tackle down this editing.

If it doesn't work the first time, your best bet is to keep trying. Ask for help around-- ask people for help and show them what you've coded so far. Don't just ask for someone to do it all for you as then they'd be unwilling to help.

./Themes/{your_theme}/index.template.php

Find:
<body>';

Replace with:
<body>';

//Display ads on the top of the page
if (function_exists("show_topofpageAds"))
{
$ads = show_topofpageAds();
if(!empty($ads))
if($ads['type']==0)
echo $ads['content'];
else
eval($ads['content']);
unset($ads);
}


Find:
</td>

Replace with:
</td>';
//Welcome Ads
if (function_exists("show_welcomeAds"))
{
$ads = show_welcomeAds();
if(!empty($ads))
{
echo '<td class="windowbg2">';
if($ads['type']==0)
echo $ads['content'];
else
eval($ads['content']);
echo '</td>';
}
unset($ads);
}
echo '


Find:
template_menu();

Replace with:
template_menu();

//Below the menu ads
if (function_exists("show_indexAds") && function_exists("show_towerleftAds") && function_exists("show_towerrightAds"))
{
$ads = show_indexAds();
if(!empty($ads))
if($ads['type']==0)
echo $ads['content'];
else
eval($ads['content']);
unset($ads);

//Tower left Ads
$ads = show_towerleftAds();
if(!empty($ads))
echo '<table><tr><td valign="top">', $ads['type']==0 ? $ads['content'] : eval($ads['content']) ,'</td><td width="100%" valign="top">';

unset($ads);
//Tower Right Ads
$ads = show_towerrightAds();
if(!empty($ads))
echo '<table><tr><td width="100%" valign="top">';
unset($ads);
}


Find:
// Show the "Powered by" and "Valid" logos, as well as the copyright. Remember, the copyright must be somewhere!


Replace with:

//Close table for towerright ads
if (function_exists("show_towerrightAds") && function_exists("show_towerleftAds") && function_exists("show_bottomAds"))
{
$ads = show_towerrightAds();
if(!empty($ads))
echo '</td><td valign="top">', $ads['type']==0 ? $ads['content'] : eval($ads['content']) ,'</td></tr></table>';

unset($ads);
//Close table for towerleft ads
$ads = show_towerleftAds();
if(!empty($ads))
echo '</td></tr></table>';
unset($ads);

//Show ads on the bottom of the page
$ads = show_bottomAds();
if(!empty($ads))
if($ads['type']==0)
echo $ads['content'];
else
eval($ads['content']);
unset($ads);
}

     // Show the "Powered by" and "Valid" logos, as well as the copyright. Remember, the copyright must be somewhere!



./Themes/{your_theme}/BoardIndex.template.php

Find:
// Show some statistics next to the link tree if SP1 info is off.

Add Before

//Display ads on the board index
if (function_exists("show_boardAds"))
{
$ads = show_boardAds();
if(!empty($ads))
if($ads['type']==0)
echo $ads['content'];
else
eval($ads['content']);
unset($ads);
}


Find:
echo '
</div>';


Replace with:
echo '
</div>';

//Display ads Between cats
if (function_exists("show_category"))
{
$ads = show_category($category['id']);
if(!empty($ads))
if($ads['type']==0)
echo $ads['content'];
else
eval($ads['content']);
unset($ads);
}



./Themes/{your_theme}/MessageIndex.template.php

Find:
global $context, $settings, $options, $scripturl, $modSettings, $txt;

Replace with:
global $context, $settings, $options, $scripturl, $modSettings, $txt;

//Display Ads on the Message index
if (function_exists("show_threadindexAds"))
{
$ads = show_threadindexAds();
if(!empty($ads))
if($ads['type']==0)
echo $ads['content'];
else
eval($ads['content']);
unset($ads);
}


Find:
echo '
</table>
</div>';


Replace with:
echo '
</table>
</div>';

//Display Ads on the Message index
if (function_exists("show_underchildren"))
{
$ads = show_underchildren();
if(!empty($ads))
if($ads['type']==0)
echo $ads['content'];
else
eval($ads['content']);
unset($ads);
}



./Themes/{your_theme}/Display.template.php

Find:
global $context, $settings, $options, $txt, $scripturl, $modSettings;

Replace with:
global $context, $settings, $options, $txt, $scripturl, $modSettings;

//Display ads on the thread page
if (function_exists("show_threadAds"))
{
$ads = show_threadAds();
if(!empty($ads))
if($ads['type']==0)
echo $ads['content'];
else
eval($ads['content']);
unset($ads);
}


Find:
// Get all the messages...
while ($message = $context['get_message']())
{


Replace with:
//Ad Counter
$adcounter =0;
// Get all the messages...
while ($message = $context['get_message']())
{
$adcounter++;


Find:
</td></tr>';
}


Replace with:
</td></tr>';

if (function_exists("show_posts"))
{
if ($adpost = show_posts($adcounter))
{
if($modSettings['ads_lookLikePosts'])
{
echo '

<tr><td style="padding: 1px 1px 0 1px;">
<table width="100%" cellpadding="3" cellspacing="0" border="0">
<tr><td class="windowbg3">
<table width="100%" cellpadding="5" cellspacing="0" style="table-layout: fixed;">
<tr>
<td valign="top" width="16%" rowspan="2" style="overflow: hidden;">
<b>', $context['forum_name'], '</b>
<div class="smalltext">
</div>
</td>
<td valign="top" width="85%" height="100%">
<table width="100%" border="0"><tr>
<td valign="middle"><img src="', $message['icon_url'] . '" alt="" border="0" /></td>
<td valign="middle">
<div style="font-weight: bold;" id="subject_', $message['id'], '">
<a href="', $message['href'], '">', $message['subject'], '</a>
</div>
<div class="smalltext">« <b>', !empty($message['counter']) ? $txt[146] . ' #' . $message['counter'] : '', ' ', $txt[30], ':</b> ', $message['time'], ' »</div></td>
<td align="', !$context['right_to_left'] ? 'right' : 'left', '" valign="bottom" height="20" style="font-size: smaller;">';
if ($context['can_reply'] && !empty($options['display_quick_reply']))
echo '
', $reply_button, '';

// So... quick reply is off, but they *can* reply?
elseif ($context['can_reply'])
echo '
', $reply_button, '';

// Can the user modify the contents of this post?
if ($message['can_modify'])
echo '
', $modify_button, '';

// How about... even... remove it entirely?!
if ($message['can_remove'])
echo '
', $remove_button, '';

// What about splitting it off the rest of the topic?
if ($context['can_split'])
echo '
', $split_button, '';
echo '
</td>
</tr></table>
<hr width="100%" size="1" class="hrcolor" />
<div class="post">', $adpost['type'] == 0 ? $adpost['content'] : eval($adpost['content']) , '</div>
</td>
</tr>
<tr>
<td valign="bottom" class="smalltext" width="85%">
<table width="100%" border="0" style="table-layout: fixed;"><tr>
<td colspan="2" class="smalltext" width="100%">
</tr><tr>
<td valign="bottom" class="smalltext" id="modified_', $message['id'], '">
</td>
<td align="', !$context['right_to_left'] ? 'right' : 'left', '" valign="bottom" class="smalltext">
<img src="', $settings['images_url'], '/ip.gif" alt="" border="0" />&nbsp;', $txt[511], '
</td>
</tr></table>
</tr>
</table>
</td></tr>
</table>
</td></tr>';
}
else
echo '
<tr><td style="padding: 1px 1px 0 1px;">
<table width="100%" cellpadding="3" cellspacing="0" border="0">
<tr>
<td class="windowbg3">', $adpost['type'] == 0 ? $adpost['content'] : eval($adpost['content']) , '</td>
</tr>
</table>
</td></tr>';
}

}

}

if(function_exists("show_lastpostAds") && function_exists("show_posts"))
{
if(($ads = show_lastpostAds()) && !show_posts($adcounter))
{
if($modSettings['ads_lookLikePosts'])
{
echo '

<tr><td style="padding: 1px 1px 0 1px;">
<table width="100%" cellpadding="3" cellspacing="0" border="0">
<tr><td class="windowbg3">
<table width="100%" cellpadding="5" cellspacing="0" style="table-layout: fixed;">
<tr>
<td valign="top" width="16%" rowspan="2" style="overflow: hidden;">
<b>', $context['forum_name'], '</b>
<div class="smalltext">
</div>
</td>
<td valign="top" width="85%" height="100%">
<table width="100%" border="0"><tr>
<td valign="middle">&nbsp;</td>
<td valign="middle">
&nbsp;</td>
<td align="', !$context['right_to_left'] ? 'right' : 'left', '" valign="bottom" height="20" style="font-size: smaller;">';
if ($context['can_reply'] && !empty($options['display_quick_reply']))
echo '
', $reply_button, '';

// So... quick reply is off, but they *can* reply?
elseif ($context['can_reply'])
echo '
', $reply_button, '';


echo '
</td>
</tr></table>
<hr width="100%" size="1" class="hrcolor" />
<div class="post">', $ads['type'] == 0 ? $ads['content'] : eval($ads['content']) , '</div>
</td>
</tr>
<tr>
<td valign="bottom" class="smalltext" width="85%">
<table width="100%" border="0" style="table-layout: fixed;"><tr>
<td colspan="2" class="smalltext" width="100%">
</tr><tr>
<td valign="bottom" class="smalltext" id="modified_', $message['id'], '">
</td>
<td align="', !$context['right_to_left'] ? 'right' : 'left', '" valign="bottom" class="smalltext">
<img src="', $settings['images_url'], '/ip.gif" alt="" border="0" />&nbsp;', $txt[511], '
</td>
</tr></table>
</tr>
</table>
</td></tr>
</table>
</td></tr>';
}
else
echo '
<tr><td style="padding: 1px 1px 0 1px;">
<table width="100%" cellpadding="3" cellspacing="0" border="0">
<tr>
<td class="windowbg3">', $ads['type'] == 0 ? $ads['content'] : eval($ads['content']) , '</td>
</tr>
</table>
</td></tr>';

}

}