Good CMS design, templates and other issues + performance

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View
I hope you can spend some time and help me to select proper
application design and programming issues. :) I'm making new version
of CMS. I've been mostly theorizing about it for a recent months.

** Main Goals **
The main goal of this CMS is **speed and performance**. It should work
fast on slower or overloaded servers. Other goals are: easy appearance
editing, low size, care about input data (e.g. if error occurs, form
is sent to client with his input)... This CMS uses PDO for
communication with database.

** Let's start. Front Controller? **
There are some front controllers and other files in the main
  *  index.php - handles most requests
  *  login.php - login and logout
  *  adm.php - administration panel
  *  request.php - handling AJAX
  *  kernel.php - the most important file - connecting to database,
setting user, lang, style... general functions.
  *  other - e.g. go.php (downloading files, redirecting to links)

Are front controllers better solutions than separate module files
(which handle requests), e.g. art.php, image.php...?

** Details of index.php **
There are several versions of index.php depending on application
design. - index.php - content.php

** Problem 1. Access to <title> tag. **
In previous versions, all modules were included in <body> tag by the
main template. Document Title was always constant (set in
configuration). However, it's better to display currently displayed
subpage's title in <title> - for users and for Google. :) So I was
forced to change something. The first action was **setting it only for
content modules** (see it in posted URL above).

** How to allow all modules to change <title> and <head>? **
It's more difficult. I will explain you, why. However, let's begin
from some methods of byways:

  *  Output Buffering - everything what modules and their templates
(included by modules) display, is buffered and assigned into $content
variable. No problem with setting <title> and <head>. However, output
buffering and assigning data into variable uses more RAM and may be
little slower.

  *  Template abstraction - all modules are included before <html>.
They tell CONTENT object or class, what should be displayed. CONTENT
class would offer some functions like: add(), info()... The main
template displays content: <?= $content ?> (if we use __toString) or:
Content::display(). Examples:

Quoted text here. Click to load it

  *  Modules abstraction - modules are covered into classes. Before
<html> index.php gets <title>'s text from them. In <body> the main
template calls Module::display() or prints: <?= $module ?> (if we use
__toString). Unfortunately, we **must use or define some global
variables**, e.g. $cfg, $lang, $db, maybe too: $user... Example:

Quoted text here. Click to load it

  *  FILE constant or $template variable - without abstraction. If
FILE not defined, use $_GET['mod'] as FILE. Example:

Quoted text here. Click to load it

 *  Another way?

Remember that $lang and $db are used in all modules, $cfg in most,
$user in some of them. They are global. What do you think about above
methods and why?

** What do we need to display? **
In some modules we have to display only one template. However, most of
them may:

  *  use more templates - I think I can use include() in one of these

  *  display only information - examples: "user doesn't exist", "No
votes in this poll", "No results". In the first case we can display
404 page instead. Sometimes we would like to put some links under the

  *  comments - this submodule makes everything in global scope. In
case of abstraction, I must cover it into class or function.

** Code repetitions **
There are 5 content modules - articles, files, images, links and news.
4 of them have "details" page. In every of these 4 modules we must:

  *  download data about item from database
  *  IF item exists: download data of item's category (common)
  *  display hierarchy of categories (common - function in kernel.php,
but not good solution)

Is it a problem to repeat some fragments of code? In the beginning of
creating new version (you can see it in posted fragment of index.php)
index.php included common content.php file. However, adding new type
of content requires more modifications or we must create something
like "content" plugins.

Okay, I'm finishing this contemplation for now. I hope you will give
me some advices. How would you solve my problems? Let's talk about it.
If you want more examples or code of above methods, tell me. Remember
that speed, performance and low RAM usage is important. :)

Re: Good CMS design, templates and other issues + performance


Maybe it won't be difficult to change <title> if I include all modules
before <html>. However, there will be some consequences because of
current CMS design.

Which consequences? Read "what do we need to display?" section. :) How
about displaying informations? Is it needed to make any abstractions
(classes) or use output buffering? How about need of repeating some
code in similar modules?

PS. I don't want to use Smarty, etc.

Site Timeline