Welcome, Guest. Please login or register.
Did you miss your activation email? July 20, 2008, 04:03:47 AM
Did you miss your activation email? July 20, 2008, 04:03:47 AM
Developers' Blog
2.0 Update Part 4
Well it has been a while (too long) since we've given you all an update on 2.0.
First I'd like to thank the charter members who have been providing some excellent feedback and really helping us flush out the bugs and polishing up the features.
Since the release of Beta 1 we have decided to make a change to how we do database queries. The goal is to make the query function as injection proof as possible. This will require rewriting not only the query function but all of the queries in SMF. As you can imagine that is quite an undertaking. Luckily Compuart is working on it and he thinks he can write a script to do most of the query conversions. I unfortunately do not have a sample of the new query that I can show you at this time. But it should remove the __FILE__, __LINE__ arguments at the end of each database query.
We've discussed a timetable and we settled on February for Beta 2. This is for a few reasons:
1) We need time to internally test the database change and to implement it here so we can make sure there are no ill effects
2) We don't want to release it right before the MotM when a good portion of the team won't be as available to help out
3) We'd like to some to implement anything that might come up during the MotM.
Now like always: no promises. If we have to delay it we will. The database changes have to be in and stable before we release Beta 2. We feel it would be too late in the development cycle to make that change after that point.
We would like to do some quick turn around for RCs after Beta 2. As such we are putting a feature freeze on 2.0. But knowing us I'm sure small features will still be snuck in. While we won't be looking to add new features to 2.0 we will of course be taking feedback on how to improve the features that are already in.
Take you all for your patience and I really hope you'll be satisfied with the wait once we actually do the release.
First I'd like to thank the charter members who have been providing some excellent feedback and really helping us flush out the bugs and polishing up the features.
Since the release of Beta 1 we have decided to make a change to how we do database queries. The goal is to make the query function as injection proof as possible. This will require rewriting not only the query function but all of the queries in SMF. As you can imagine that is quite an undertaking. Luckily Compuart is working on it and he thinks he can write a script to do most of the query conversions. I unfortunately do not have a sample of the new query that I can show you at this time. But it should remove the __FILE__, __LINE__ arguments at the end of each database query.
We've discussed a timetable and we settled on February for Beta 2. This is for a few reasons:
1) We need time to internally test the database change and to implement it here so we can make sure there are no ill effects
2) We don't want to release it right before the MotM when a good portion of the team won't be as available to help out
3) We'd like to some to implement anything that might come up during the MotM.
Now like always: no promises. If we have to delay it we will. The database changes have to be in and stable before we release Beta 2. We feel it would be too late in the development cycle to make that change after that point.
We would like to do some quick turn around for RCs after Beta 2. As such we are putting a feature freeze on 2.0. But knowing us I'm sure small features will still be snuck in. While we won't be looking to add new features to 2.0 we will of course be taking feedback on how to improve the features that are already in.
Take you all for your patience and I really hope you'll be satisfied with the wait once we actually do the release.
Loading...
Oh, and keep up the good work. It's been great just signing up as a charter member, must say, I'm digging the new* section (And can't wait to give SMF 2.0 a demo run!).
edit: * = cm only sections
Will there be any change in performance with the query change?
it will def be cm but as for public I dont think its been decided yet
[Well, I have enough patience to not spend money on a charter membership
i gotta say you guys update pretty fast.
I hope the public version comes sometime around end of March/start of April!
Good Luck!
Bug Reports: 0
Ah well, sounds good anyways
just prefix [Feedback] or something to your post
On the server I'm using posting images(when the resize is active) ussually takes a long time to post(even with a new smf forum, server problem to get the image or something). This version might help with this problem?
thanks to all developers for the great job that has been made.
Of course 2.0 adds lots of new features so it may well be that not all your old mods are required then.
Im asking because im writing currently a new complex theme based on 1.1.4 default-theme and i don't want to make the whole work for nothing, you know....
Regards, Christian
Does this mean i have to rewrite large parts of it completely or what does that mean?
Is the old default-theme from 1.1.4 not running with 2.0 ?
If you have a custom theme the upgrader will do it's best to update it to work with 2.0 but this process will not be perfect.
Custom themes will need to be updated to get all the new 2.0 features. For example, if your BoardIndex template is from 1.1 redirection boards wouldn't look right.
It shouldn't however be too much hastle - it depends on the complexity of your theme. If the theme is just an index.template.php and style.css then the changes are minimal.
Edit: two different devs, two different answers...just take your pick
Best Regards and thanks for developing, Christian
This might have been already talked about, but is there a list on features out for 2.0 ?
That's not good. Obviously, in the 2+ plus years since 1.1 RC3 hit the streets very little has changed with SMF's template system.
The real reason I am posting is because I am looking for an idea of when the public Beta of SMF 2 will be available.
For maximum efficiency and code reuse, I am trying to standardize the templating system I use across all of my sites. The templates won't be the same, obviously, but the way the HTML output is generated will be. A class will determine caching if appropriate, load the templates (which will be similar in style to Wordpress templates--maximum flexibility), then output the code or do any placeholder substitutions as necessary.
This echoing out code in the templates themselves is highly inflexible. It's much better to assign the HTML output to a variable then echo out that variable, or cache it, or substitute it into another template, etc. Much more flexible, as you can see. Right?
So, I kind of need an idea of what is around the corner with respect to SMF2. Right now, I'm thinking I'll have to get rid of the header and footer templates since they are going to be so similar to SMF 1.1. But I will need to extract the keyword, description, title, and meta variables, etc, and then assign them to $GLOBALS to use them in my overall site template. But I also have to be concerned about SMF's lack of separation of logic and presentation because I have no idea where a table row will be echoed out from. As SMF 1.1.x is currently written, stuff comes out of pretty much anywhere. Then we've got issues with duplicate code in different places, etc.
It would be absolutely terrific if I could find a way to assign the forum content minus the header and footer (just the board index, message view, post screen, etc.) to a variable using ob_start()/ob_get_clean() then substitute it into my overall site template using str_replace().
But I have no idea if I will be able to do that given SMF's penchant for using tables for layout and other peculiarities. It sounds like SMF is still going to use tables, which means it will be a decade behind the current state of the art.
I don't want to hear any stuff about how SMF's template system is 3/1000ths of a second faster than other templating systems. I don't care about that. What I do care about is the hours it takes to fit SMF into the overall look and theme of my website.
Thank you very much.
Your friend,
Motumbo
Also, I had to remove the last paragraph of your post as it's in violation of the Charter Membership, if you want to use 2.0 before a public beta is released, you'll have to become one yourself.
Any mods/themes for 1.1.x are 95% not likely to work with 2.0 fully.
One of SMF's strengths is the customizability from php/html mix templates rather than only html with placeholders.
I'm for table-less layouts (thats table-less, not without-tables) [where tables are ONLY used for tabular data].
Very well.
OK. Good, I got some info. You may be for tableless layouts (except for tabular data--something nobody argues with), but what is going to be in SMF 2.0?
Is SMF 2.0 template system pretty much going to be similar in design to 1.1.x? That's what I need to know.
I sure hope so!
// The main sub template above the content.
function template_main_above()
{
global $context, $settings, $options, $scripturl, $txt, $modSettings;
// Show right to left and the character set for ease of translating.
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"', $context['right_to_left'] ? ' dir="rtl"' : '', '><head>
<meta http-equiv="Content-Type" content="text/html; charset=', $context['character_set'], '" />
<meta name="description" content="', $context['page_title'], '" />', empty($context['robot_no_index']) ? '' : '
<meta name="robots" content="noindex" />', '
<meta name="keywords" content="PHP, MySQL, bulletin, board, free, open, source, smf, simple, machines, forum" />
<script language="JavaScript" type="text/javascript" src="', $settings['default_theme_url'], '/script.js?fin11"></script>
<script language="JavaScript" type="text/javascript"><!-- // --><![CDATA[
var smf_theme_url = "', $settings['theme_url'], '";
var smf_images_url = "', $settings['images_url'], '";
var smf_scripturl = "', $scripturl, '";
var smf_iso_case_folding = ', $context['server']['iso_case_folding'] ? 'true' : 'false', ';
var smf_charset = "', $context['character_set'], '";
// ]]></script>
<title>', $context['page_title'], '</title>';
// The ?fin11 part of this link is just here to make sure browsers don't cache it wrongly.
echo '
<link rel="stylesheet" type="text/css" href="', $settings['theme_url'], '/style.css?fin11" />
<link rel="stylesheet" type="text/css" href="', $settings['default_theme_url'], '/print.css?fin11" media="print" />';
/* Internet Explorer 4/5 and Opera 6 just don't do font sizes properly. (they are big...)
Thus, in Internet Explorer 4, 5, and Opera 6 this will show fonts one size smaller than usual.
Note that this is affected by whether IE 6 is in standards compliance mode.. if not, it will also be big.
Standards compliance mode happens when you use xhtml... */
if ($context['browser']['needs_size_fix'])
echo '
<link rel="stylesheet" type="text/css" href="', $settings['default_theme_url'], '/fonts-compat.css" />';
// Show all the relative links, such as help, search, contents, and the like.
echo '
<link rel="help" href="', $scripturl, '?action=help" target="_blank" />
<link rel="search" href="' . $scripturl . '?action=search" />
<link rel="contents" href="', $scripturl, '" />';
// If RSS feeds are enabled, advertise the presence of one.
if (!empty($modSettings['xmlnews_enable']))
echo '
<link rel="alternate" type="application/rss+xml" title="', $context['forum_name'], ' - RSS" href="', $scripturl, '?type=rss;action=.xml" />';
// If we're viewing a topic, these should be the previous and next topics, respectively.
if (!empty($context['current_topic']))
echo '
<link rel="prev" href="', $scripturl, '?topic=', $context['current_topic'], '.0;prev_next=prev" />
<link rel="next" href="', $scripturl, '?topic=', $context['current_topic'], '.0;prev_next=next" />';
// If we're in a board, or a topic for that matter, the index will be the board's index.
if (!empty($context['current_board']))
echo '
<link rel="index" href="' . $scripturl . '?board=' . $context['current_board'] . '.0" />';
// We'll have to use the cookie to remember the header...
if ($context['user']['is_guest'])
$options['collapse_header'] = !empty($_COOKIE['upshrink']);
// Output any remaining HTML headers. (from mods, maybe?)
echo $context['html_headers'], '
<script language="JavaScript" type="text/javascript"><!-- // --><![CDATA[
var current_header = ', empty($options['collapse_header']) ? 'false' : 'true', ';
function shrinkHeader(mode)
{';
// Guests don't have theme options!!
if ($context['user']['is_guest'])
echo '
document.cookie = "upshrink=" + (mode ? 1 : 0);';
else
echo '
smf_setThemeOption("collapse_header", mode ? 1 : 0, null, "', $context['session_id'], '");';
echo '
document.getElementById("upshrink").src = smf_images_url + (mode ? "/upshrink2.gif" : "/upshrink.gif");
document.getElementById("upshrinkHeader").style.display = mode ? "none" : "";
document.getElementById("upshrinkHeader2").style.display = mode ? "none" : "";
current_header = mode;
}
// ]]></script>';
// the routine for the info center upshrink
echo '
<script language="JavaScript" type="text/javascript"><!-- // --><![CDATA[
var current_header_ic = ', empty($options['collapse_header_ic']) ? 'false' : 'true', ';
function shrinkHeaderIC(mode)
{';
if ($context['user']['is_guest'])
echo '
document.cookie = "upshrinkIC=" + (mode ? 1 : 0);';
else
echo '
smf_setThemeOption("collapse_header_ic", mode ? 1 : 0, null, "', $context['session_id'], '");';
echo '
document.getElementById("upshrink_ic").src = smf_images_url + (mode ? "/expand.gif" : "/collapse.gif");
document.getElementById("upshrinkHeaderIC").style.display = mode ? "none" : "";
current_header_ic = mode;
}
// ]]></script>
</head>
<body>';
echo '
<div class="tborder" ', $context['browser']['needs_size_fix'] && !$context['browser']['is_ie6'] ? ' style="width: 100%;"' : '', '>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="catbg" height="32">';
if (empty($settings['header_logo_url']))
echo '
<span style="font-family: Verdana, sans-serif; font-size: 140%; ">', $context['forum_name'], '</span>';
else
echo '
<img src="', $settings['header_logo_url'], '" style="margin: 4px;" alt="', $context['forum_name'], '" />';
echo '
</td>
<td align="right" class="catbg">
<img src="', $settings['images_url'], '/smflogo.gif" style="margin: 2px;" alt="" />
</td>
</tr>
</table>';
// display user name
echo '
<table width="100%" cellpadding="0" cellspacing="0" border="0" >
<tr>';
if($context['user']['is_logged'])
echo '
<td class="titlebg2" height="32">
<span style="font-size: 130%;"> ', $txt['hello_member_ndt'], ' <b>', $context['user']['name'] , '</b></span>
</td>';
// display the time
echo '
<td class="titlebg2" height="32" align="right">
<span class="smalltext">' , $context['current_time'], '</span>';
// this is the upshrink button for the user info section
echo '
<a href="#" onclick="shrinkHeader(!current_header); return false;"><img id="upshrink" src="', $settings['images_url'], '/', empty($options['collapse_header']) ? 'upshrink.gif' : 'upshrink2.gif', '" alt="*" title="', $txt['upshrink_description'], '" align="bottom" style="margin: 0 1ex;" /></a>
</td>
</tr>
<tr id="upshrinkHeader"', empty($options['collapse_header']) ? '' : ' style="display: none;"', '>
<td valign="top" colspan="2">
<table width="100%" class="bordercolor" cellpadding="8" cellspacing="1" border="0" style="margin-top: 1px;">
<tr>';
if (!empty($context['user']['avatar']))
echo '
<td class="windowbg" valign="middle">', $context['user']['avatar']['image'], '</td>';
echo '
<td colspan="2" width="100%" valign="top" class="windowbg2"><span class="middletext">';
// If the user is logged in, display stuff like their name, new messages, etc.
if ($context['user']['is_logged'])
{
echo '
<a href="', $scripturl, '?action=unread">', $txt['unread_since_visit'], '</a> <br />
<a href="', $scripturl, '?action=unreadreplies">', $txt['show_unread_replies'], '</a><br />';
}
// Otherwise they're a guest - send them a lovely greeting...
else
echo $txt['welcome_guest'];
// Now, onto our second set of info, are they logged in again?
if ($context['user']['is_logged'])
{
// Is the forum in maintenance mode?
if ($context['in_maintenance'] && $context['user']['is_admin'])
echo '
<b>', $txt[616], '</b><br />';
// Are there any members waiting for approval?
if (!empty($context['unapproved_members']))
echo '
', $context['unapproved_members'] == 1 ? $txt['approve_thereis'] : $txt['approve_thereare'], ' <a href="', $scripturl, '?action=viewmembers;sa=browse;type=approve">', $context['unapproved_members'] == 1 ? $txt['approve_member'] : $context['unapproved_members'] . ' ' . $txt['approve_members'], '</a> ', $txt['approve_members_waiting'], '<br />';
// Show the total time logged in?
if (!empty($context['user']['total_time_logged_in']))
{
echo '
', $txt['totalTimeLogged1'];
// If days is just zero, don't bother to show it.
if ($context['user']['total_time_logged_in']['days'] > 0)
echo $context['user']['total_time_logged_in']['days'] . $txt['totalTimeLogged2'];
// Same with hours - only show it if it's above zero.
if ($context['user']['total_time_logged_in']['hours'] > 0)
echo $context['user']['total_time_logged_in']['hours'] . $txt['totalTimeLogged3'];
// But, let's always show minutes - Time wasted here: 0 minutes ;).
echo $context['user']['total_time_logged_in']['minutes'], $txt['totalTimeLogged4'], '<br />';
}
echo ' </span>';
}
// Otherwise they're a guest - this time ask them to either register or login - lazy bums...
else
{
echo ' </span>
<script language="JavaScript" type="text/javascript" src="', $settings['default_theme_url'], '/sha1.js"></script>
<form action="', $scripturl, '?action=login2" method="post" accept-charset="', $context['character_set'], '" class="middletext" style="margin: 3px 1ex 1px 0;"', empty($context['disable_login_hashing']) ? ' onsubmit="hashLoginPassword(this, \'' . $context['session_id'] . '\');"' : '', '>
<input type="text" name="user" size="10" /> <input type="password" name="passwrd" size="10" />
<select name="cookielength">
<option value="60">', $txt['smf53'], '</option>
<option value="1440">', $txt['smf47'], '</option>
<option value="10080">', $txt['smf48'], '</option>
<option value="43200">', $txt['smf49'], '</option>
<option value="-1" selected="selected">', $txt['smf50'], '</option>
</select>
<input type="submit" value="', $txt[34], '" /><br />
<span class="middletext">', $txt['smf52'], '</span>
<input type="hidden" name="hash_passwrd" value="" />
</form>';
}
echo '
</td>
</tr>
</table>
</td>
</tr>
</table>';
echo '
<table id="upshrinkHeader2"', empty($options['collapse_header']) ? '' : ' style="display: none;"', ' width="100%" cellpadding="4" cellspacing="0" border="0">
<tr>';
// Show a random news item? (or you could pick one from news_lines...)
if (!empty($settings['enable_news']))
echo '
<td width="90%" class="titlebg2">
<span class="smalltext"><b>', $txt[102], '</b>: ', $context['random_news_line'], '</span>
</td>';
echo '
<td class="titlebg2" align="right" nowrap="nowrap" valign="top">
<form action="', $scripturl, '?action=search2" method="post" accept-charset="', $context['character_set'], '" style="margin: 0;">
<a href="', $scripturl, '?action=search;advanced"><img src="'.$settings['images_url'].'/filter.gif" align="middle" style="margin: 0 1ex;" alt="" /></a>
<input type="text" name="search" value="" style="width: 190px;" />
<input type="submit" name="submit" value="', $txt[182], '" style="width: 11ex;" />
<input type="hidden" name="advanced" value="0" />';
// Search within current topic?
if (!empty($context['current_topic']))
echo '
<input type="hidden" name="topic" value="', $context['current_topic'], '" />';
// If we're on a certain board, limit it to this board ;).
elseif (!empty($context['current_board']))
echo '
<input type="hidden" name="brd[', $context['current_board'], ']" value="', $context['current_board'], '" />';
echo '
</form>
</td>
</tr>
</table>
</div>';
// Show the menu here, according to the menu sub template.
template_menu();
// The main content should go here.
echo '
<div id="bodyarea" style="padding: 1ex 0px 2ex 0px;">';
}
That ain't pretty code.
Proper idents where used so you know whether its part of another if or something. It is well commented so you know what section does what.
It is also split up so you can only edit what you need to.
But a template designer will look at that and go "What's all this mean??"
The only thing changing HTML wise with SMF 2.0 will be a move towards semantic code that should mean theme authors will be able to change a large amount of the template using just the CSS. As I've said a million times I'd like to change the template system and have some well developed plans for it - but it's low priority for SMF at the moment - particularly as theme authors seem to be perfectly capable of creating some fantastic themes with the current system.
As for the code. The SMF code is extremely clear, consistant and well commented. Obviously everyone has their own preferences in terms of style I accept. I would accept that people not familiar with PHP may find it a bit daunting at first.
Exactly the same as what happens with Smarty etc.
note: i know there is a mod for smf already, but its buggy, and doesnt work well for me.
http://www.simplemachines.org/community/index.php?topic=217789.0
Like shadow said. It does now.
That or you just wait until it's released. We don't set deadlines, and each time it's asked God kills a kitty. WONT SOMEONE PLEASE THINK OF THE KITTIES!
I can't think of any other free forum software that has it
it ends up costing the same for me.
Obviously we're not responsible for "paid for" mods - we don't release any paid for items at all.
Birger
Theres a reason why SMF releases it to charter members first. Not just that the devs wanna be mean but they also don't want mass herds of bug reporting and tons of fixing all at once. What a mess.
Imagine how many support questions there would be if SMF released 2.0 to the public right now.
I might become a Charter Member sometime in the future. Just don't have the money for it at the moment.
WE WANT NEWS! WE WANT NEWS! WE WANT NEWS!
Really, when are you going to release a public beta?
hehe.
You should've seen what I had when 1.1 RC3 was released.
Birger
You don't see many new things because you don't have access to them on this forum. But when you get to actually use 2.0 you will.
I think this was already answered, SMF2.0 has some user side improvements, but almost of them are admin side..., so you can't see that much
Thanks very much