My first Content Management System
A small look into the past:
Summer vacations arrived, I went back home and learned PHP and worked on some PHP projects. Soon I got more PHP Projects and at one point I realized I need a faster way to develop websites. That was when I remembered this CMS the seniors used to talk about, Drupal. I Googled the term, read more about it. Then I Googled Content Management Systems and next, about the top CMS present over the web. After doing this small research I found about Joomla, another popular CMS and the web convinced me that Joomla has more potential then Drupal (or I thought so, either ways I was more impressed by Joomla). The next moment I had Joomla Package set on download.
I couldn’t really figure it out on my own. I downloaded a set of video tutorials for Joomla and got myself started on learning this thing. I was pretty impressed. Now I could develop a website in an hour? That was fast. And it was much easy to control. The Joomla extension library has almost everything one would need to make a feature-full website (without having them to type lines and lines of code).
I was practically amazed. The next thought that hit me was “I gotta make something similar of my own!”. (Yeah, I’m stupid, impulsive and I challenge myself with everything.) But I could never give much time to this thought. Was kind of disappointing as I would have loved to make such a thing of my own. But there always was something more important to work on.
Here it is:
A few months later, I was offered to work on a project where I had to make a Website for an Open Online Journal. I took it. I started to work on it and while doing so, I realized that this needs to have a certain level of admin control. I made a few class diagrams, a list of features that the admin must have and the admin panel layout. I wrote the code for the classes, Database class, Admin User Class, and a few more. But something major always seemed missing. I wasn’t satisfied. Then one night I sat down with a notepad and a pen. I made a list of everything the website has to offer. It basically needed features like:
- Updating the content of the pages at any point of time (including custom Meta tag content for each page).
- Way to upload new articles.
- Way to edit uploaded articles.
- Uploading files other than articles
- User control (like blocking or deleting a user)
- Control of current and archives articles/issues
- Control on Online Submission of articles by users.
- and more
Well, the only solution I found to this was a custom CMS, and it was the “Wow” moment for me as I was about to design my very first CMS, all by myself. I worked day and night for the next 7 days. It was a great experience. On the 7th day, in the evening, after testing all the features I was like “Wohoo! my first CMS. my first CMS! Yes!” (I become a kid at such times :P). I couldn’t stop staring at it. I kept going through the links again and again to check for bugs (I found many :P). And not just the that, I had completely separated the Design and Content part of the website, totally. There was no link between the website design and what was in the website. I could just swap the css and the template and I’d have a new website. That was one of the best moments of my time as a web developer.
The key features of the CMS are:
- Complete separation of Web Design and Content
- Content and Meta control for every page
- Multiple Admin control (not deployed on the published project)
- User control
- Complete Article control:
- Uploading new articles.
- Editing articles
- Removing articles
- Current and Archived article control
- Control over Published and Unpublished articles
- Online submission and maintenance
- Search Engine Optimized web design.
- And more, I cannot list them all.
A few notable features of the CMS (and the website as a whole) are:
- No user have direct access to the uploaded files. None of the files are uploaded in a public directory. All the files and articles are uploaded in a directory above the web directory, so it impossible for anyone to access the upload directory without access to the Control Panel.
- Since the files are not directly accessible, whenever they a called or needed by the user or admin, a copy of it generated on the fly and is produced to the requestor. This way, no person has direct access to it, the upload directory is secured, files are protected from damage and the original copies are never accessed directly. To further increase the security, a strict file type restriction is implemented.
- Complete website is made on PHP and with the help of OOP. No PHP framework is used in it’s development.