Advertisement:

Author Topic: Show number of errors at top of forum  (Read 28391 times)

Offline Daniel15

  • SMF Friend
  • SMF Hero
  • *
  • Posts: 4,221
  • Gender: Male
  • http://dan.cx/
    • daaniel on Facebook
    • Daniel15 on GitHub
    • daniel15 on LinkedIn
    • @Daniel15 on Twitter
    • Daniel15
Show number of errors at top of forum
« on: January 26, 2007, 10:58:31 PM »
This has been turned into a mod, and is available at the SMF Mods site. Please see http://custom.simplemachines.org/mods/index.php?mod=645. This topic is kept mainly for people that want to understand how it works



Based off a request from Sarke, this topic will show you a way to show the number of errors in your error log, as well as the number of errors on the current page, at the top of the forum. It will add a message like this:
There are 26 errors in the error log
On this page, 2 errors were encountered (debug)

The 'Debug' link will reload the page, with debugging temporarily turned on (it will output all errors directly to the page, and also show some information at the bottom of the page). This will allow you to see what's causing the errors.

Normally, the number of errors on the page would be output normally in the template (in the main_above subtemplate). However, most errors actually occur in the templates. So, this outputs On this page, 0 errors were encountered, and then changes the number via a small JavaScript appended to the end of the page :)

OK, let's begin the editing!

Index.php

Code: (Find) [Select]
// Load the current user's permissions.
loadPermissions();

Code: (Add after) [Select]
// ---- Begin modification - Errors at top of page - http://www.simplemachines.org/community/index.php?topic=145814.0 ----
// How many errors do we have?
global $db_prefix, $context, $db_show_debug;
$result = db_query("
SELECT COUNT(*) AS count
FROM {$db_prefix}log_errors", __FILE__, __LINE__);
list ($context['error_log_count']) = mysql_fetch_row($result);
mysql_free_result($result);

// Are they an admin, and do they want debug mode?
// If so, turn $db_show_debug on for this page
if ($context['user']['is_admin'] && isset($_GET['show_debug']))
$db_show_debug = true;
// ---- End modification ----
This segment grabs the number of errors in the error log, and stores it in a variable called $context['error_log_count']. Additionally, if you're the admin, and pass a GET variable named show_debug, it turns the $db_show_debug variable on (enabling what I call "debugging mode"; I'm not sure if there's a proper name for it). This is used later on.

Sources/Errors.php
Code: (Find) [Select]
global $settings, $modSettings, $db_show_debug;
Code: (Replace with) [Select]
global $settings, $modSettings, $db_show_debug, $context;

// ---- Begin modification - Errors on top of page - http://www.simplemachines.org/community/index.php?topic=145814.0 ----
// Add one to the error count
$context['error_count'] = isset($context['error_count']) ? $context['error_count'] + 1 : 1;
// ---- End modification ----
This will increment a value called $context['error_count'] every time an error is encountered on the current page

Themes/default/languages/Modifications.english.php
Code: (Find) [Select]
?>
Code: (Add before) [Select]
// ---- Begin modification - Errors on top of page - http://www.simplemachines.org/community/index.php?topic=145814.0 ----
$txt['error_log_thereis'] = 'There is';
$txt['error_log_thereare'] = 'There are';
$txt['error_log_currently'] = 'currently';
$txt['error_log_error'] = 'error';
$txt['error_log_errors'] = 'errors';
$txt['error_log_inlog'] = 'in the <a href="?action=viewErrorLog;desc">error log</a>';

$txt['error_log_thispage'] = 'On this page,';
$txt['error_log_was'] = 'was';
$txt['error_log_were'] = 'were';
$txt['error_log_encountered'] = 'encountered';
// ---- End modification ----
These are language strings used on the actual page itself. If you're using another language, translate these, and put them into Modifications.[your language].php

Themes/[your theme]/index.template.php
Code: (Find) [Select]
// 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 />';
}
Code: (Add after) [Select]
// ---- Begin modification - Errors on top of page - http://www.simplemachines.org/community/index.php?topic=145814.0 ----
// If they're an admin, show them how many errors we have in the log
if ($context['user']['is_admin'])
{
// Not set? Assume 0, then
if (!isset($context['error_log_count']))
$context['error_log_count'] = 0;
// No querystring set? Assume nothing
if (!isset($_SERVER['QUERY_STRING']))
$_SERVER['QUERY_STRING'] = '';

echo '
<br />', ($context['error_log_count'] == 1 ? $txt['error_log_thereis'] : $txt['error_log_thereare']), ' ', $context['error_log_count'], ' ', ($context['error_log_count'] == 1 ? $txt['error_log_error'] : $txt['error_log_errors']), ' ', $txt['error_log_inlog'], '<br />
', $txt['error_log_thispage'], ' <span id="error_count">0 ', $txt['error_log_errors'], '</span> ', $txt['error_log_encountered'], ' (<a href="', $scripturl, '?show_debug=1;', $_SERVER['QUERY_STRING'], '">debug</a>)<br />';
}
// ---- End modification ----
This bit shows the actual information at the top of the page. It ensures that the message makes grammatical sense (There is 1 error, There are 2 errors).
The errors on the current page has a hardcoded 0, but this is changed later using JavaScript (so we catch all the errors on the page).

Code: (Find) [Select]
echo '
<div id="ajax_in_progress" style="display: none;', $context['browser']['is_ie'] && !$context['browser']['is_ie7'] ? 'position: absolute;' : '', '">', $txt['ajax_in_progress'], '</div>
</body></html>';
Code: (Replace with) [Select]
echo '
<div id="ajax_in_progress" style="display: none;', $context['browser']['is_ie'] && !$context['browser']['is_ie7'] ? 'position: absolute;' : '', '">', $txt['ajax_in_progress'], '</div>';

// Are we an admin, and do we have any errors?
if ($context['user']['is_admin'] && isset($context['error_count']) && $context['error_count'] != 0)
// Change the error text at the top of the page
echo '
<script type="text/javascript" language="JavaScript">
setInnerHTML(document.getElementById("error_count"), "', $context['error_count'], ' ', ($context['error_count'] == 1 ? $txt['error_log_error'] . ' ' . $txt['error_log_was']: $txt['error_log_errors'] . ' ' . $txt['error_log_were']), '");
</script>';

echo '
</body></html>';
This segment adds a JavaScript to the end of the page, which changes the message at the top to reflect the number of errors on the current page.

And that's all. Refresh, and you should see the information at the top of the page. Please reply here if you have any problems :)
« Last Edit: January 27, 2007, 10:55:13 PM by Daniel15 »
Daniel15, former Customisation team member, resigned due to lack of time. I still love everyone here :D.
Go to smfshop.com for SMFshop support, do NOT email or PM me!

Offline Sarke

  • Jr. Member
  • **
  • Posts: 315
Re: Show number of errors at top of forum
« Reply #1 on: January 27, 2007, 05:45:57 AM »
Nice, thanks! GJ!

This will be very useful for writing mods.
My MODs          Please don't PM me for support, post in the appropriate topic.

Offline Daniel15

  • SMF Friend
  • SMF Hero
  • *
  • Posts: 4,221
  • Gender: Male
  • http://dan.cx/
    • daaniel on Facebook
    • Daniel15 on GitHub
    • daniel15 on LinkedIn
    • @Daniel15 on Twitter
    • Daniel15
Re: Show number of errors at top of forum
« Reply #2 on: January 27, 2007, 05:53:07 AM »
Quote
Nice, thanks! GJ!
No problem :)
Do you reckon I should make this into a mod?

Quote
This will be very useful for writing mods.
I personally have debugging turned on all the time when writing mods. If you want to do this, add:
Code: [Select]
$db_show_debug = true;
to your Settings.php file
Daniel15, former Customisation team member, resigned due to lack of time. I still love everyone here :D.
Go to smfshop.com for SMFshop support, do NOT email or PM me!

Offline Tanix

  • Semi-Newbie
  • *
  • Posts: 60
Re: Show number of errors at top of forum
« Reply #3 on: January 27, 2007, 01:52:00 PM »
Do you reckon I should make this into a mod?

Yes, please.

Offline Daniel15

  • SMF Friend
  • SMF Hero
  • *
  • Posts: 4,221
  • Gender: Male
  • http://dan.cx/
    • daaniel on Facebook
    • Daniel15 on GitHub
    • daniel15 on LinkedIn
    • @Daniel15 on Twitter
    • Daniel15
Re: Show number of errors at top of forum
« Reply #4 on: January 27, 2007, 10:56:05 PM »
OK, I've turned this into a mod, and it's available at http://custom.simplemachines.org/mods/index.php?mod=645
Daniel15, former Customisation team member, resigned due to lack of time. I still love everyone here :D.
Go to smfshop.com for SMFshop support, do NOT email or PM me!

Offline Tanix

  • Semi-Newbie
  • *
  • Posts: 60
Re: Show number of errors at top of forum
« Reply #5 on: January 27, 2007, 11:02:32 PM »
Fast work, Daniel. Many thanks.

Offline Sarke

  • Jr. Member
  • **
  • Posts: 315
Re: Show number of errors at top of forum
« Reply #6 on: January 28, 2007, 05:27:59 AM »
Nice work, thanks again!
My MODs          Please don't PM me for support, post in the appropriate topic.