Hi!
I’ll start in few days new project, for this project I need to develop brand new CMS that will be used for a lot of websites. This got me thinking about the basic features I need to include in order to make my life easier, so this is what I have so far:
1. BackOffice for the BackOffice
Create 2 levels of administration, 1 for the client and yourself, and the other one is for you only. In your administration level you can add some tools for yourself that make the work easier, Some of those features I’ll describe below.
2. Protected Items
This is something you can add to your administrative level. Protected Items is those content pages/catalog categories and etc that your cms work with. For example if you created a content page that acts like “Thank you for shopping in SomeShop”, and you redirect to this content page through your code you don’t want the client to delete it by mistake. You got the idea? Lock the option for the simple admin to delete these important items.
3. Modules On/Off
The CMS I have in mind contains Photo Galley, Contact Form, Content Pages, Calendar and etc. Each of these are modules that are ready to be “installed” in each of my new clients. I install for him the whole CMS I have [with those modules I listed] but enabling only those he paid for, and if suddenly he needs something else I already have – just by marking the checkbox he’ll have the new module hw wanted – already integrated with his site. And yes – this is something you put in your administrative level.
4. System Logs
I work with Ubuntu and 9 workspaces, each workspace has its own purpose. 1 of my workspaces shows the logs of the applications I working on. But getting into those logs just because the client told me he had some error in some page at some point in the day is not that fun, thats why I’m creating a page in the CMS that shows me the logs so I could see really fast and more comfortable the problem he had. And by the way – telling to the client what exactly he did that gave him this error show you have control over the product you develop – and its really impressive.
5. Duplicate Items
The basic objects management is Add/Edit/Delete of content page of catalog item. I really would like you add the “create a copy” of each of those items. I don’t have any good reason for that yet, But since I adding it to each application I’m building I finding myself actually using it and saving some time to myself.
6. System Restore
This is maybe the strongest feature I can think of. Keep track of each table in your database, and you’ll be able to get back in time with the data of your application. Create a simple table named “db_history” that contains the fields: tableName, fieldName, fieldValue, fieldNewValue and nowTime.
The names are pretty clear I guess, the nowTime is to know when the change has been made. With this basic feature you can do a lot and it will help you solve many different problems and client’s issues.
I’ll be happy to see your suggestions for features like these, feel free to post a comment!
P.S
This features can be helpful to you in any application you develop, not only CMS-type application.
Hello
I must say I like the idea of restore and duplicate.
those are really nice..
SO you are going to build a CMS build on CI?
System logs are also good.
I’d also add log when user enters restricted/protected/not existing area
In that way we could *possibly* catch the hackers
or smth like that
huglester
13 Nov 09 at 19:14
Hi @huglester, thanks for posting a comment.
Yes, I’m gonna build this CMS with CI, I’ll post in the future the design of this application.
Also, I can’t believe I forgot about the feature you suggested!! It’s really useful to catch “hackers” as you said and find broken links in your website.
Thank you for your suggestion!
Udi Mosayev
13 Nov 09 at 20:58
Wow, it’s great.
Since I’m new to CI and CMS concept, I think this article is really helpful. One question is, how the modules created in CI? Is it using sub folder in controller folder, or something else? And how about the dependencies of a module? I think a module has to not have any dependencies with other modules.
Haqqi
17 Feb 10 at 05:46
Hi, thanks for you comment!
My idea for modules is very simple, as you described its all about subfolders.
For users module, you’re structure can be like this:
controllers/user/
add.php
login.php
models/user/
muser.php
musergroup.php
views/user/
add_user.php
add_group.php
I think the separation in the views is much more critic and useful because you probably have more views then controllers or models, and views folder can get very messy.
About the dependencies,
If you create user module, in other module you probably checking for valid authentication or permissions, so it this case I suggest to add some code to your MY_Controller class and see if user module exists – if so
$this->muser->checkLogin()..Hope you got the idea.
Good luck!
Udi Mosayev
17 Feb 10 at 11:11
These are all very good suggestions for making a CMS that is close to being client-proof.
If I was starting PyroCMS again these are certainly things I would think about working into the core, but Pyro has evolved purely as and when I have needed features or clients have asked for them.
Instead of starting YaCICMS would you consider working some of these features into PyroCMS? With v0.9.8 almost out in the wild we will soon be ready to work on the game-changing v1.0 which will include all sorts of insanely awesome features I am keeping to myself and the dev team.
If not, best of luck with your project. I’ll be keeping an eye on it.
Phil Sturgeon
19 Apr 10 at 11:18
Hi Phil, Thanks for your comment.
This CMS is for my freelance business, not something I release to the public, so don’t worry about that
I’ll be happy to donate some code into PyroCMS, I twitted you about that, I only need some contact info to talk to you about it.
Udi Mosayev
23 Apr 10 at 15:30
[...] you remember, I wrote about System Restore feature in Must Have Features in you CMS, this is my implementation for this feature. Thank you Zack for noticing! Share/Save var [...]
MY_Model in CodeIgniter at Udi Mosayev
17 May 10 at 18:47