number of SQL on the mainpage with factor 10 and shortened the code with 4
lines. There is only *one* optimized SQL query left, being:
$result = db_query("SELECT stories.*, COUNT(comments.sid) AS comments FROM
stories LEFT JOIN comments ON stories.sid = comments.sid WHERE
stories.status = 1 AND stories.time <= $date GROUP BY stories.sid ORDER BY
stories.sid DESC LIMIT $number");
Note: we use a LEFT JOIN to retrieve the number of comments associated
with each story. By retrieving this data now, we elimate a *lot*
of individual queries that would otherwise be required inside the
while-loop. If there is no matching record for the right table in
the ON-part of the LEFT JOIN, a row with all columns set to NULL
is used for the right table. This is required, as not every story
has a counterpart in the comments table (at a given time).
to the outside world. It's a first step towards improving the submission
queue.
* More important (to the theme babies): instead of passing individual
parameters I'm considering to pass an object.
$theme->abstract($story->aid, $story->informant, $story->time,
stripslashes($story->subject), stripslashes($story->abstract),
stripslashes($story->comments), $story->category, $story->department,
$morelink);
would become:
$theme->abstract($story);
What do you guys think about pushing this trough? It would be much better
and would give extra `power' to the themes.
rendering a calendar less expensive.
* Added a function displayCalendar($theme, $active_date) to functions.inc.
* Adjusted index.php so it would support URIs formated like
"?date=$unix_timestamp".
* Integrated the calendar in my personal theme: themes/Dries/theme.class.
If you want to include the calendar in your theme, check the code in my
$theme->footer(): global $date and call displayCalendar($theme, $date).
Check the main page at http://beta.drop.org/ with theme 'Dries' to see it
yourself!