PHP CMS Framework

I am working on creating a PHP CMS framework for myself and others. I know that there are many CMS frameworks already, but the ones I found are very complex and/or difficult to use. In addition, I am a fan of very clean code, that’s why I like to give it a try myself.

The goal is to create something that is extremely easy to use from a programmer, designer, system administrator or end-user perspective.
It should also be as flexbile as possible and synchronize easily with other frameworks.

What I have so far is an idea about the general structure of the project. Feel free to comment criticism.

  • application
    • kernel
      • App.php
      • Module.php
      • Router.php
      • __autoload.php
      • functions.php
    • modules
      • start.php
    • install
      • start.php
    • boot
      • start.php
    • www
    • config.php
    • start.php
  • public_html
    • .htaccess
    • start.php
The ‘application’ folder is where the php application is located.
The ‘public_html’ folder is where the documentroot is pointing to.
The .htaccess file rewrites every non-existent call to the ‘public_html/start.php’.
The ‘public_html/start.php’ then calls the ‘application/start.php’.
This mechanism makes sure that you can keep any other frameworks in place, while you can have the application folder wherever you want, using relative paths.
The file ‘application/start.php’ loads the php files in ‘kernel’.
An instance of the App class can now be instantiated:
$app = new App(‘path/to/application’);
The app can now be started with the following command:
App->Start();
The file ‘modules/start.php’ will be loaded to load the modules.
Each module contains a script that will add the classnames and filenames to the App classes for autoloading.
If the file ‘config.php’ does not exist, the file ‘install/start.php’ will be loaded to start an installation script.
The file ‘boot/start.php’ will be loaded to start custom functions (session, authentication, language).
The class Router will be used to forward execution to a file in the www folder.
So now the user can copy modules to the modules folder and add them to the ‘modules/start.php’.
Installation can be customized by changing the ‘install/start.php’.
Boot proces can be customized by changing the ‘boot/start.php’.
From the www folder php an html can be executed in a regular fashion, but with the framework in place.

1 Comment

Array to object conversion in PHP

I just wrote this simple function to convert arrays to objects in PHP.
For me it is convenient to have such a function at hand for quickly generating objects.


/*
* @param $class the name of the class that should be instantiated
* @param $array the array with key=>value combinations that is used to create the object
* @return an object of type $class with the values from $array
*/
function a2o( $class, $array ) { return array2object( $class, $array ); }
function array2object( $class, $array )
{
$obj = new $class( );
foreach($array as $key => $value)
$obj->$key = $value;
return $obj;
}

, , , ,

Leave a comment

The question mark in URLs

When constructing an url via a plugin, you cannot always know at which position the ? will come.
A simple htaccess rule can be used to strip off the first ?:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*)&(.*) $1?stripquestionmark=true&($2) [L,NS] [L]

, , ,

Leave a comment

Stop smoking sigarettes success

Well, I guess from my last assignment, I finished at least the most important part, and that is to stop smoking cigarettes 🙂

I have now found a new task for myself, and that is to do something every day that I feel uncomfortable doing.

The reason for this is that by starting to include options that I am currently uncomfortable with doing, I will increase the total number options that I have tremendously.

I started yesterday. Here are the results so far:

26-01-2010 – Go to sleep early, without the aid of cannabis

Somehow I managed to fall asleep quickly (at around 23.15) but I woke up several times during the night. I also had a lot of trouble waking up in the morning, I felt exausted. I woke up at 10.00.

27-01-2010 – Ride a bike for at least half an hour

This one went better than last one. I rode for half an hour.  The cold was not so much of a problem, but the wind constantly blew my hair in my face in a way that made it impossible for me to look around. I am now back and I decided to go to a barber shop and have my hair cut.  I also have muscle pain now but that is probably because I did not do much exercise for the last 5 years :p

First results:

,

Leave a comment

Black lungs prevent me from smoking my third sigarette today

I am really glad to announce that I have skipped the third sigarette for today.

I hope this will help to prevent my lungs from turning into this:

Smoker's lungs

, ,

Leave a comment

My next sigarette break

When I was reviewing the introduction, I thought it was a bit short of an article for five minutes of writing.

So I started to wonder how much text I will be able to produce in those five-minute breaks.

While the fact that I do not smoke is in my opinion more important than the fact that I am writing some bullshit over here, I  am pretty certain that I will not run short on text.

I now took two break within a span of an hour. Assuming I will be awake for at least 15 hours a day, I will be writing about 30 messages of 3-5 lines which makes for a grand total of about 120 lines each day.

Whoops, time’s up. Gotta go! 😀

, ,

Leave a comment

Stop smoking & Start blogging

Hello. My name is Martien.

I am trying to stop smoking, and to start blogging.

I have now decided to try and combine these two.

Whenever I feel the need to smoke, I will instead visit this blog, and write for at least five minutes.

So… five minutes are passing pretty quickly, and they are over now.

Cya next time!

, , , ,

Leave a comment

How to parse strings to numbers in T-SQL

If you execute this SQL statement, the function dbo.ParseNumber will be created:

CREATE FUNCTION dbo.ParseNumber
(
@string VARCHAR(8000)
)
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @IncorrectCharLoc SMALLINT
SET @IncorrectCharLoc = PATINDEX('%[^0-9]%', @string)
WHILE @IncorrectCharLoc > 0
BEGIN
SET @string = STUFF(@string, @IncorrectCharLoc, 1, '')
SET @IncorrectCharLoc = PATINDEX('%[^0-9]%', @string)
END
SET @string = @string
RETURN @string
END
GO

You can now use this function in an SQL statement like this one:

SELECT dbo.ParseNumber(MyStringColumn) FROM MyTable

Or this one:

SELECT * FROM MyTable WHERE dbo.ParseNumber(MyStringColumn) > 10

More information about SQL string parsing can be found here:

http://blog.sqlauthority.com/2007/04/11/sql-server-udf-user-defined-function-to-extract-only-numbers-from-string/

Or here:

http://www.ibm.com/developerworks/data/library/techarticle/0303stolze/0303stolze1.html

, , , , ,

Leave a comment