Want to get involved in developing SMF, then why not lend a hand on our github!

Main Menu

Simple Machines Website-Forum Integration

Started by Thantos, April 09, 2007, 06:51:32 PM

Previous topic - Next topic


While discussion on this is nice, You should ask for support about doing this in the coding discussion boards instead.
Jeremy D ~ Site Team / SMF Developer ~ GitHub Profile ~ Join us on IRC @ ~ Support the SMF Support team!

Miles Marshall

Sorry I was just replying to were the rest of the people replied to
Need Computer Help? Just want to chat? Come on over!
"I tried to fix the world but they wouldn't give me the source code"



This is Diningin,food delivery service, Try our order food online,Restaurant Delivery Service,Not Just pizza Delivery Anymore... View more Menu on Dining-in's website. (we just serving Shanghai Pudong area now.)

Flying Drupalist

Hi, I'm attempting to use the code in to integrate mediawiki with my forum.

Here's what I added to the monobook theme.


$ssi_ban true;

$ssi_theme 16;


$context['page_title'] = 'Title Here';


 * MonoBook nouveau
 * Translated from gwicke's previous TAL template version to remove
 * dependency on PHPTAL.
 * @todo document
 * @addtogroup Skins

if( !defined'MEDIAWIKI' ) )
die( -);

/** */

 * Inherit main code from SkinTemplate, set the CSS and template filter.
 * @todo document
 * @addtogroup Skins
class SkinMonoBook extends SkinTemplate {
/** Using monobook. */
function initPage( &$out ) {
SkinTemplate::initPage$out );
$this->skinname  'monobook';
$this->stylename 'monobook';
$this->template  'MonoBookTemplate';

 * @todo document
 * @addtogroup Skins
class MonoBookTemplate extends QuickTemplate {
 * Template filter callback for MonoBook skin.
 * Takes an associative array of data set from a SkinTemplate-based
 * class, and a wrapper for MediaWiki's localization database, and
 * outputs a formatted page.
 * @access private
function execute() {
global $wgUser;
$skin $wgUser->getSkin();

// Suppress warnings to prevent notices about missing indexes in $this->data

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">
<html xmlns="<?php $this->text('xhtmldefaultnamespace'?>" <?php 
$this->data['xhtmlnamespaces'] as $tag => $ns) {
xmlns:<?php echo "{$tag}=\"{$ns}\" ";
xml:lang="<?php $this->text('lang'?>" lang="<?php $this->text('lang'?>" dir="<?php $this->text('dir'?>">
<meta http-equiv="Content-Type" content="<?php $this->text('mimetype'?>; charset=<?php $this->text('charset'?>" />
<?php $this->html('headlinks'?>
<title><?php $this->text('pagetitle'?></title>
<style type="text/css" media="screen,projection">/*<![CDATA[*/ @import "<?php $this->text('stylepath'?>/<?php $this->text('stylename'?>/main.css?<?php echo $GLOBALS['wgStyleVersion'?>"; /*]]>*/</style>
<link rel="stylesheet" type="text/css" <?php if(empty($this->data['printable']) ) { ?>media="print"<?php ?> href="<?php $this->text('stylepath'?>/common/commonPrint.css?<?php echo $GLOBALS['wgStyleVersion'?>" />
<link rel="stylesheet" type="text/css" media="handheld" href="<?php $this->text('stylepath'?>/<?php $this->text('stylename'?>/handheld.css?<?php echo $GLOBALS['wgStyleVersion'?>" />
<!--[if lt IE 5.5000]><style type="text/css">@import "<?php $this->text('stylepath'?>/<?php $this->text('stylename'?>/IE50Fixes.css?<?php echo $GLOBALS['wgStyleVersion'?>";</style><![endif]-->
<!--[if IE 5.5000]><style type="text/css">@import "<?php $this->text('stylepath'?>/<?php $this->text('stylename'?>/IE55Fixes.css?<?php echo $GLOBALS['wgStyleVersion'?>";</style><![endif]-->
<!--[if IE 6]><style type="text/css">@import "<?php $this->text('stylepath'?>/<?php $this->text('stylename'?>/IE60Fixes.css?<?php echo $GLOBALS['wgStyleVersion'?>";</style><![endif]-->
<!--[if IE 7]><style type="text/css">@import "<?php $this->text('stylepath'?>/<?php $this->text('stylename'?>/IE70Fixes.css?<?php echo $GLOBALS['wgStyleVersion'?>";</style><![endif]-->
<!--[if lt IE 7]><script type="<?php $this->text('jsmimetype'?>" src="<?php $this->text('stylepath'?>/common/IEFixes.js?<?php echo $GLOBALS['wgStyleVersion'?>"></script>
<meta http-equiv="imagetoolbar" content="no" /><![endif]-->

<?php print Skin::makeGlobalVariablesScript$this->data ); ?>
<script type="<?php $this->text('jsmimetype'?>" src="<?php $this->text('stylepath' ?>/common/wikibits.js?<?php echo $GLOBALS['wgStyleVersion'?>"><!-- wikibits js --></script>
<?php if($this->data['jsvarurl'  ]) { ?>
<script type="<?php $this->text('jsmimetype'?>" src="<?php $this->text('jsvarurl'  ?>"><!-- site js --></script>
<?php ?>
<?php if($this->data['pagecss'   ]) { ?>
<style type="text/css"><?php $this->html('pagecss'   ?></style>
<?php }
if($this->data['usercss'   ]) { ?>

<style type="text/css"><?php $this->html('usercss'   ?></style>
<?php }
if($this->data['userjs'    ]) { ?>

<script type="<?php $this->text('jsmimetype'?>" src="<?php $this->text('userjs' ?>"></script>
<?php }
if($this->data['userjsprev']) { ?>

<script type="<?php $this->text('jsmimetype'?>"><?php $this->html('userjsprev'?></script>
<?php }
if($this->data['trackbackhtml']) print $this->data['trackbackhtml']; ?>

<!-- Head Scripts -->
<?php $this->html('headscripts'?>
<body <?php if($this->data['body_ondblclick']) { ?>ondblclick="<?php $this->text('body_ondblclick'?>"<?php ?>
<?php if($this->data['body_onload'    ]) { ?>onload="<?php     $this->text('body_onload')     ?>"<?php ?>
class="mediawiki <?php $this->text('nsclass'?> <?php $this->text('dir'?> <?php $this->text('pageclass'?>">
<div id="globalWrapper">
<div id="column-content">
<div id="content">
<a name="top" id="top"></a>
<?php if($this->data['sitenotice']) { ?><div id="siteNotice"><?php $this->html('sitenotice'?></div><?php ?>
<h1 class="firstHeading"><?php $this->data['displaytitle']!=""?$this->html('title'):$this->text('title'?></h1>
<div id="bodyContent">
<h3 id="siteSub"><?php $this->msg('tagline'?></h3>
<div id="contentSub"><?php $this->html('subtitle'?></div>
<?php if($this->data['undelete']) { ?><div id="contentSub2"><?php     $this->html('undelete'?></div><?php ?>
<?php if($this->data['newtalk'] ) { ?><div class="usermessage"><?php $this->html('newtalk')  ?></div><?php ?>
<?php if($this->data['showjumplinks']) { ?><div id="jump-to-nav"><?php $this->msg('jumpto'?> <a href="#column-one"><?php $this->msg('jumptonavigation'?></a>, <a href="#searchInput"><?php $this->msg('jumptosearch'?></a></div><?php ?>
<!-- start content -->
<?php $this->html('bodytext'?>
<?php if($this->data['catlinks']) { ?><div id="catlinks"><?php       $this->html('catlinks'?></div><?php ?>
<!-- end content -->
<div class="visualClear"></div>
<div id="column-one">
<div id="p-cactions" class="portlet">
<h5><?php $this->msg('views'?></h5>
<div class="pBody">
<?php foreach($this->data['content_actions'] as $key => $tab) { ?>
<li id="ca-<?php echo Sanitizer::escapeId($key?>"<?php
  if($tab['class']) { ?>
class="<?php echo htmlspecialchars($tab['class']) ?>"<?php }
><a href="<?php echo htmlspecialchars($tab['href']) ?>"<?php echo $skin->tooltipAndAccesskey('ca-'.$key?>><?php
 echo htmlspecialchars($tab['text']) ?>
<?php  } ?>
<div class="portlet" id="p-personal">
<h5><?php $this->msg('personaltools'?></h5>
<div class="pBody">
<?php  foreach($this->data['personal_urls'] as $key => $item) { ?>
<li id="pt-<?php echo Sanitizer::escapeId($key?>"<?php
if ($item['active']) { ?>
class="active"<?php ?>><a href="<?php
echo htmlspecialchars($item['href']) ?>
"<?php echo $skin->tooltipAndAccesskey('pt-'.$key?><?php
if(!empty($item['class'])) { ?>
echo htmlspecialchars($item['class']) ?>
"<?php ?>><?php
echo htmlspecialchars($item['text']) ?>
<?php ?>
<div class="portlet" id="p-logo">
<a style="background-image: url(<?php $this->text('logopath'?>);" <?php
href="<?php echo htmlspecialchars($this->data['nav_urls']['mainpage']['href'])?>"<?php
echo $skin->tooltipAndAccesskey('n-mainpage'?>
<script type="<?php $this->text('jsmimetype'?>"> if (window.isMSIE55) fixalpha(); </script>
<?php foreach ($this->data['sidebar'] as $bar => $cont) { ?>
<div class='portlet' id='p-<?php echo Sanitizer::escapeId($bar?>'<?php echo $skin->tooltip('p-'.$bar?>>
<h5><?php $out wfMsg$bar ); if (wfEmptyMsg($bar$out)) echo $bar; else echo $out?></h5>
<div class='pBody'>
<?php  foreach($cont as $key => $val) { ?>
<li id="<?php echo Sanitizer::escapeId($val['id']) ?>"<?php
if ( $val['active'] ) { ?>
class="active" <?php }
><a href="<?php echo htmlspecialchars($val['href']) ?>"<?php echo $skin->tooltipAndAccesskey($val['id']) ?>><?php echo htmlspecialchars($val['text']) ?></a></li>
<?php ?>
<?php ?>
<div id="p-search" class="portlet">
<h5><label for="searchInput"><?php $this->msg('search'?></label></h5>
<div id="searchBody" class="pBody">
<form action="<?php $this->text('searchaction'?>" id="searchform"><div>
<input id="searchInput" name="search" type="text"<?php echo $skin->tooltipAndAccesskey('search');
if( isset( $this->data['search'] ) ) {
value="<?php $this->text('search'?>"<?php ?> />
<input type='submit' name="go" class="searchButton" id="searchGoButton" value="<?php $this->msg('searcharticle'?>" />&nbsp;
<input type='submit' name="fulltext" class="searchButton" id="mw-searchButton" value="<?php $this->msg('searchbutton'?>" />
<div class="portlet" id="p-tb">
<h5><?php $this->msg('toolbox'?></h5>
<div class="pBody">
if($this->data['notspecialpage']) { ?>

<li id="t-whatlinkshere"><a href="<?php
echo htmlspecialchars($this->data['nav_urls']['whatlinkshere']['href'])
"<?php echo $skin->tooltipAndAccesskey('t-whatlinkshere'?>><?php $this->msg('whatlinkshere'?></a></li>
if( $this->data['nav_urls']['recentchangeslinked'] ) { ?>

<li id="t-recentchangeslinked"><a href="<?php
echo htmlspecialchars($this->data['nav_urls']['recentchangeslinked']['href'])
"<?php echo $skin->tooltipAndAccesskey('t-recentchangeslinked'?>><?php $this->msg('recentchangeslinked'?></a></li>
<?php  }
if(isset($this->data['nav_urls']['trackbacklink'])) { ?>

<li id="t-trackbacklink"><a href="<?php
echo htmlspecialchars($this->data['nav_urls']['trackbacklink']['href'])
"<?php echo $skin->tooltipAndAccesskey('t-trackbacklink'?>><?php $this->msg('trackbacklink'?></a></li>
<?php  }
if($this->data['feeds']) { ?>

<li id="feedlinks"><?php foreach($this->data['feeds'] as $key => $feed) {
<span id="feed-<?php echo Sanitizer::escapeId($key?>"><a href="<?php
echo htmlspecialchars($feed['href']) ?>
"<?php echo $skin->tooltipAndAccesskey('feed-'.$key?>><?php echo htmlspecialchars($feed['text'])?></a>&nbsp;</span>
<?php ?></li><?php

foreach( array('contributions''blockip''emailuser''upload''specialpages') as $special ) {

if($this->data['nav_urls'][$special]) {
<li id="t-<?php echo $special ?>"><a href="<?php echo htmlspecialchars($this->data['nav_urls'][$special]['href'])
"<?php echo $skin->tooltipAndAccesskey('t-'.$special?>><?php $this->msg($special?></a></li>
<?php }

if(!empty($this->data['nav_urls']['print']['href'])) { ?>

<li id="t-print"><a href="<?php echo htmlspecialchars($this->data['nav_urls']['print']['href'])
"<?php echo $skin->tooltipAndAccesskey('t-print'?>><?php $this->msg('printableversion'?></a></li><?php

if(!empty($this->data['nav_urls']['permalink']['href'])) { ?>

<li id="t-permalink"><a href="<?php echo htmlspecialchars($this->data['nav_urls']['permalink']['href'])
"<?php echo $skin->tooltipAndAccesskey('t-permalink'?>><?php $this->msg('permalink'?></a></li><?php
} elseif ($this->data['nav_urls']['permalink']['href'] === '') { ?>

<li id="t-ispermalink"<?php echo $skin->tooltip('t-ispermalink'?>><?php $this->msg('permalink'?></li><?php

wfRunHooks'MonoBookTemplateToolboxEnd', array( &$this ) );

if( $this->data['language_urls'] ) { ?>

<div id="p-lang" class="portlet">
<h5><?php $this->msg('otherlanguages'?></h5>
<div class="pBody">
<?php foreach($this->data['language_urls'] as $langlink) { ?>
<li class="<?php echo htmlspecialchars($langlink['class'])?>"><?php
<a href="<?php echo htmlspecialchars($langlink['href']) ?>"><?php echo $langlink['text'?></a></li>
<?php ?>
<?php ?>
</div><!-- end of the left (by default at least) column -->
<div class="visualClear"></div>
<div id="footer">
if($this->data['poweredbyico']) { ?>

<div id="f-poweredbyico"><?php $this->html('poweredbyico'?></div>
<?php  }
if($this->data['copyrightico']) { ?>

<div id="f-copyrightico"><?php $this->html('copyrightico'?></div>
<?php }

// Generate additional footer links

<ul id="f-list">
$footerlinks = array(
foreach( $footerlinks as $aLink ) {
if( isset( $this->data[$aLink] ) && $this->data[$aLink] ) {
<li id="<?php echo$aLink?>"><?php $this->html($aLink?></li>
<?php  }


<?php $this->html('bottomscripts'); /* JS call to runBodyOnloadHook */ ?>
<?php $this->html('reporttime'?>
<?php if ( $this->data['debug'] ): ?>
<!-- Debug output:
<?php $this->text'debug' ); ?>

<?php endif; ?>
// end of execute() method
// end of class

Now that doesn't work, ofc. I can think of several pitfalls off of the top of my head. But can somebody point me in the right direction? Thanks.



Hi dear. I need Integration SMF into CUBECART. Can you help me ? I think a lot of people need this. I can give some money !

Thank you very much and have a nice day!, Vitaly


They are just distributing the code they're using here. I don't think is the section to ask requests for integrations. Maybe Help Wanted?


Indeed help wanted would be a better choice
Gary M. Gadsdon
Do NOT PM me unless I say so
War of the Simpsons
Bongo Comics Fan Forum
Youtube Let's Plays

^ YT is changing monetisation policy, help reach 1000 sub threshold.



I put the code below into 'test.php'.   I see it gives the header and footer as espected.  However, it takes 3+ times longer to load that code than it takes to load the real forum index (with all of the content).   What would be causing the page to take so much longer to load with those simple few lines of code?


Quote from: Daniel15 on May 30, 2007, 02:14:00 AM
To add a page "into" SMF, try this code in a seperate PHP file:


// Theme we're going to use
$ssi_theme 4;
// Layers we're going to use
$ssi_layers = array('main');
// Enable GZip compression (saves bandwidth)
$ssi_gzip true;


'See? SMF is cool :)';


You'll need to change the $ssi_theme = 4 line to the correct theme ID.



Sorry about the bump, I only notice this now :(

Can you put this "tutorial" in ? I think a lot of people need this, and there is easier to find ;)

Btw, great job!
Quote from: Eliana Tamerin on August 23, 2008, 04:10:10 PM
SMF 7 is where it gets good. That has time travel. You can go back and post before the guy who flamed you. :P


excuse my ignorance, i am not sure if i understand this correctly.  am i to combine all the codes in the first post in one file and call it "integrate.php", then change the code to reference to my website and server?  i guess i need an answer to this question first before i go to the next questions.  i can't wait to implement this into my forum, great feature.  Thanks.


Hi again, my intentions are not to bump this up, but wanted to know if anyone is using this Website-Forum Integration, also if anyone cam recommend someone that can set it up for me.  Thanks.


try this, on my website I use 1.1.5 for customers, and used the above page that helped me alot :) first time using the ssi feature :)
Former SMF Project Manager
Former SMF Customizer


thanks RunicWarrior, i am not sure what to do with the ssi...i used it on a test forum sometime ago, not sure what i was after, but i did get it to display the same as the link you posted, wasn't sure what it did but did really get into it.  i guess my question is, is there a step by step as to how to install it and integrate it with my current forum?  of course I'll install a test forum and play with it until i fully understand it, perhaps i am asking a bit too much for some one to hold my hand through the initial setup.


To use SSI.php in your page add at the very top of your page before the <html> tag on line 1:
<?php require("SSI.php"); ?>

changing the address to suit your needs compared to where your forum is located :)

then depending on what you want added depends on the code so for example if you want your forum stats to show on the page you would add

<?php ssi_boardStats(); ?>

where you want the to show ...
Former SMF Project Manager
Former SMF Customizer


thanks for that RunicWarrior, I'll play with it and see how far i can get.  thanks again,




but i see here ..

Each file is broken up into 4 main parts

    * Setup variables not see
    * Bringing in integrate.php  i see yes
    * A source function not see
    * A template function not see


Setup variables are all the variables being defined prior to integrate.php being included.

The source function is file_source() and the template function is template_file_template()


did see what i need...

How can puty like that picture


I'm not sure what's wrong, but I get this error when I try to run the sample script:

Unable to load the 'main_above' template.

It works when I have the $ssl_layers assignment commented out. I am using the default theme ($ssi_theme = 1)


// Theme we're going to use
$ssi_theme = 4;
// Layers we're going to use
$ssi_layers = array('main');
// Enable GZip compression (saves bandwidth)
$ssi_gzip = true;


echo 'See? SMF is cool :)';



Can someone please point me in the right direction?