ToolBox
Regular


Joined: Mar 16, 2005
Posts: 74
|
Posted:
Thu Jun 25, 2009 5:15 pm |
|
For Fun III - depreciated mktime() and date field
Have you looked at mktime() calls in php codes of phpnuke?
If so, we may find when and where the function is called.
Probably, we will find it around date field while reading DB.
For instance, look at the following codes from news stories_archive module.
Code:
while($row = $db->sql_fetchrow($result)) {
$time = $row['time'];
ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})", $time, $getdate);
if ($getdate[2] == "01") { $month = _JANUARY; } elseif ($getdate[2] == "02") { $month = _FEBRUARY; } elseif ($getdate[2] == "03") { $month = _MARCH; } elseif ($getdate[2] == "04") { $month = _APRIL; } elseif ($getdate[2] == "05") { $month = _MAY; } elseif ($getdate[2] == "06") { $month = _JUNE; } elseif ($getdate[2] == "07") { $month = _JULY; } elseif ($getdate[2] == "08") { $month = _AUGUST; } elseif ($getdate[2] == "09") { $month = _SEPTEMBER; } elseif ($getdate[2] == "10") { $month = _OCTOBER; } elseif ($getdate[2] == "11") { $month = _NOVEMBER; } elseif ($getdate[2] == "12") { $month = _DECEMBER; }
if ($month != $thismonth) {
$year = $getdate[1];
echo "<li><a href=\"modules.php?name=$module_name&sa=show_month&year=$year&month=$getdate[2]&month_l=$month\">$month, $year</a>";
$thismonth = $month;
}
}
|
After reading the date-time field, most codes chop down the field data from an array (string array) to individual array.
This is ineffecient and sucks sever CPU time in the following respects:
1. more codes
2. more processing
Now, there is a way to read DB time and date field into array but to variables directly, which is more faster and shorter code:
The key to pay attention is sql queries:
Code:
$result = $db->sql_query("SELECT time from ".$prefix."_stories order by time DESC");
|
By the way, why this query is not good?
As you may or may not pay attention to the time-date format in stories archive, topics, and even news module, all date-time format was displayed as follows:
Year - Month - Day ....
This format is an Europen and Asian format of time and date.
To change the format, mktime() function calss entails.
To avoid and make it efficient, I would like to think over the following alternative.
Code:
$sql = "SELECT date_format(`time`,'%Y') AS s_year, count(`sid`) AS s_nArticles FROM ".$prefix."_stories GROUP BY date_format(`time`, '%Y') ORDER BY date_format(`time`, '%Y') DESC";
|
Now, what happens?
This is a sample code which you can expand it like:
Code:
SELECT data_format(`time`, '%Y') AS s_year, data_format(`time`, '%M`) ......
|
If we want, we may combine the format of yer, month, day, etc.
With this code, we will add time-date format constant string in language files.
This means, with time-date format constant string in language files, in multi-lingual modes of NUKE, it will display in correct locale formats.
Another side effects of this idea are 1) less or no calls of mktime() function and reduced phpcode lines.
That's a just fun to think over. |
|
|