how to proceed to make my own basic content management system? - content-management-system

I am working on a project which requires facilities like aricles, forums, ratings, polls,communities etc..
how to i proceed to make it?
what are its essential parts?
suggestions for the database design.
thankyou.

I know this isn't your question, but don't reinvent the wheel.
You will fall foul of a lot of problems.
Use something like Drupal instead.

Just take a look at some source code from existing CMSs such as Wordpress or SMF and you'll get a good idea.

Yeah-- roll with wordpress or drupal if php, dotnetnuke or orchard for .net. Bare minimum, you could use their code as a template to make yours.
CMSs are complex systems--don't waste your time

There are so many existing and good and open source (if you need the source) CMS systems already. Why reinvent the wheel?
I would recommend going with one that exists but if you must you could even download an open source CMS to help give you an idea of what you need.

I would suggest that you adopt a php framework, like Symfony, kohana/CodeIgniter CakePHP etc. Building a custom cms for yourself or a client is not a bad idea. Hacking the 'usual suspects' that do 80% of what you need and leave a cluttered backend interface might work for some clients, but if you can offer a truly custom experience, your clients would prefer that, given that security is not an issue and you have well functioning CMS.
When it comes to the rudimentary tasks involved in database management/scaffolding, user permissions, forms handling, etc. do try out one of the frameworks, they get you coding the important stuff sooner. Play around with any one of these (I find Symfony is pretty powerful, and Kohana/CI are easy to set up, haven't used cakePhp) and once you get comfortable with one of these, have a look at some of the CMSes that were done using these frameworks

I've built a couple of lightweight CMS's from scratch several years ago in PHP, when the Nukes were the main ones about, and Mambo was becoming popular, however nowadays there are many great choices to choose from.
If your needs are very simple and you really want to build it yourself, than I would recommend building one with a framework such as Kohana which has much of the core plumbing in place, database access, security, permissions etc.
You will need a WYSIWYG such as TinyMCE, (f)CkEditor, or Telerik RadEditor.
Database structure could be centered around document type structure, take a look at the db structure for ModX which is an excellent CMS to buid customized sites off, however even looking at how they structure content is useful.
Design a backend U.I for the admin area of your site, keep it simple, and separate the cms admin area from the frontend code.
Determine the scalability issues of your cms, catering to hundreds(of thousands??!?) of users, what type of roles will be required, permissions for editing content etc.
How would the CMS be extended, with plugins, modules
Determine the templating system, whether to roll your own or use an existing one such as smarty.
These are just some of the initial decisions to make, it's actually quite easy to build a simple CMS though as others have suggested its generally much better to use an existing open source one, ModX, Drupal, etc..

Related

Problems/questions regarding content management system implementation

I've been on this issue for probably a good two months now and really haven't found a stable solution so I thought I'd just try to ask. I have an existing site already at http://keyjaycompound.com that runs off a CMS that I designed. While it was good at the time, I've now outgrown it and looking at it now, looks sloppy XD.
So at first I started redoing the CMS when I thought and read that there are so many CMS solutions available, why spin my wheels? It seemed more logical to get a third party solution that does the mondain tasks like article CRUD and user management where I'd primarily worry about the addons.
So I searched and tried many solutions that I thought would suite my PHP development needs. As my testing base, I needed to see how well my current site would transfer over and how much hassle would ensue. While CMS's like Drupal, E107, and others were great....on paper, neither seem to suite my need. They were either too bloated, lacking in documentation or community support, seemly comprised of large hassle for simple tasks, or just downright confusing >_<.
So now the road has put me at Frameworks now in which I'm currently trying to learn Code Igniter. Now my issue becomes security! One of the advantages of CMS systems like Drupal or Joomla is that they have (and constantly are) field tested for security holes. Something a lone modest experienced developer like myself would probably never find. However what some have told me is that the fact that the CMS would be designed by me does create somewhat of a layer of security considering it's not common to the public as much as Drupal or Wordpress.
So with that here are my questions. In consideration of time and practicality:
how do pro's actually do something like this; select a content management system for their project?
Do they start with frameworks and build out, adjusting to security problems along the way?
Do they use a particular CMS solution so they dont worry as much about common security holes?
Maybe I should start with a framework like Codeigniter and growing with it as my security and user management needs change?
Thanks guys. I'd really like to finally stick with a solution to learn so I can finally get back to developing.
This might be too old to answer, but I'm shocked nobody has bothered to answer the question! I'm in the same situation and saw this.
I started out with a CMS, but after a security attack that wiped a project site clean (and the CMS forum was completely clueless) I picked up Codeigniter. Some projects later and recreating my own CMS (twice), I settled with wordpress for small-medium projects (from personal websites to online news/magazine types). As you put it, I've outgrown my own CMS for these type of projects.
Answers (in the order you asked them):
1) It depends mostly on what it is you are doing. If its something that can be deployed with open software (with a little patience learning), you could be better off with that while making sure they're updated all the time. But if you're doing something way different from all these I'm afraid you're pretty much stuck with a custom solution, which you could accelerate with frameworks.
2,3,4) With frameworks (for starters) sticking to the security guidelines of the framework in question helps a lot, while proofing the usual suspects (form validation, session hijacking, injection, etc) . I ran my first CMS through a certified hacker and he said it was rock solid (despite how paranoid I was about security while developing). Stick to the blog of the framework for security updates (they do happen)
For CI though, a major item you have to consider thoroughly would be the user management. CI AFAIK didn't come with one at the time and picking one with security in mind made me realize how important it was.
What seems to be looking like a good idea is finding a CMS working within Codeigniter that I can extend with ease. I don't know yet if this is the same as a standalone CMS that was built on codeigniter, but tackling security problems for me would amount to running tests while being as alert as I am as I go
Sorry for the long talk. Hope this helps

Cafeteria Management System as a project. What should I use?

This is a part of my course project.
Basically, there are vendors which provide food and at peak hours the queue gets so large that people have to wait long for their order.
Our project is like an online site which will enable users to order food. After ordering the food, the user will get an info as to where does he lie in the queue. This way students can order from their hostel rooms without actually going to the vendor and getting their time wasted by waiting in the line. As soon as the user orders the food, vendor gets notified of the project so that he can start preparing the food.
I am completely new to web development so I am not sure what to use. This project will also work as an exercise to learn about web development.
I have heard about Drupal & Joomla CMS. Also, Django framework is also there and I am actually confused as to what technology to use.
I am also confused as to what is the difference between a framework and a CMS? How do they differ and which one will suit me.
So, how do I go about developing the
application?
A framework is a basic application without any concrete business logic. It contains basic structure and sometimes basic features (like database connectivity and other standard libraries). You have to write your code yourself.
A CMS is a content management system. It is essentially a complete website but without the content. it provides tools to write content (web pages). The most popular ones (like Joomla) come with a bunch of templates too that you can download to give your site any look you want.
A CMS probably doesn't have enough features to provide you with this logic. You will probably need to do some programming to get this done. It may still be useful to use a CMS, though. Lots of them support various plugins that allow you to add these kind of features and still allow you to easily edit regular pages.
Frameworks are libraries turned on their heads. You plug a library into your code; a framework turns this around by abstracting a particular problem in such a way that you plug your code into it to solve a problem. It's the Hollywood principle: "Don't call us; we'll call you."
People who write frameworks have deep knowledge of a particular problem domain. They usually represent the distillation of several attempts to solve a problem, with best practices, clear abstractions, and good plug-in points made clear from long experience.
Django is a Python framework for web applications that have a browser front end and relational databases for persistence.
That's one example of a framework.
A CMS (Content Management System) allows users to dynamically add and manage content in a web application. I think they solve slightly different problems from Django, because it is specialized to the problem of content management.
I'd recommend starting your queuing problem without a front end at all - just text. Concentrate on the subtleties of queuing. Get that right with your object model and then expose a user interface to display it to users.
CMS is a 'content management system'. If provides modules that you can plug in. The end effect is it sets up a website for you, and you have admin pages where you can enter content. For special stuff, you use plugins. If you have to, you can write your own plugins.
A development framework is just a stack of technologies you can use to develop an application. So for example, the Grails framework uses Hibernate(persistence) and Spring(dependency injection and other stuff) under the covers -- it is providing and using existing tools (which are themselves frameworks) which you will in turn use to build the application.
With a framework, you basically start with a bunch of tools in your toolbox, but little or no parts of a running web app out of the box. You have to develop the functionality with the tools. With a CMS system, it's like they have implemented something for you, but it is really generic and you will have to tailor it to your needs.

Drupal or from-scratch web app development?

I am looking to develop a multi-user web application that supports the following key features:
fill out forms with demographic data on individuals
define and administer surveys & polls
generate nice reports with graphs)
user rights administration and generic login stuff
My dilemma is whether to use a CMS (Drupal?) or develop from scratch.
Putting the time and cost issues aside for a minute, which are an obvious CMS strength, what are the weaknesses and potential risks using a CMS? my gut tells me that a CMS will be very easy and quick to start with, but when the features list begins to grow - I will pay the bill with having to delve into unfamiliar DB structure and code, try to tweak existing modules or write my own from scratch.
Is it really better, over the long run, to use a CMS?
There are two basic types of CMSes:
focused on features
focused on flexibility
The first type - focused on features - usually offer lot of modules or extensions to expand the basic functionality. You can build your web site very quickly using ready-to-use third party modules. There's a disadvantage of this way - it isn't so easy to bend or customize these modules. Usually you need to rewrite them.
Drupal. WordPress and Joomla are good examples of the first type of CMSes.
The second type - focused on flexibility - somewhere called Content Management Frameworks - don't offer so much prefabricated modules, but offer much more tools and ways to make your structure and relationships between elements fit your needs. It takes more time to learn this kind of CMS or to build your fist web site, but you can easily customize anything you need.
Some examples of the second type CMSes: SilverStripe, Symphony CMS, appRain, MODx, ezPublish.
appRain is one of the best customizable option where you will get both option of CMS and also complex coding by it's framework.
Development process is also easy. New version 4.0.4 is on they way to be released.

productivity superstar frameworks/tools for side gigs

If you were going to start building web sites as a consulting business on the side -- keeping your day job -- and you also had a toddler and a wife, what frameworks/tools would you pick to save you typing?
Any language.
I'm looking for a productivity superstar stack that won't tie my hands too much when I have to update the site 6 months later, or "evolve" the data model once in production.
It needs to allow me to say "yes" to the client: community features, CMS, security, moderation, AJAX, ...
I would suggest Django. Super simple to get something up and running really quick. You are using Python which has a large library to go with it. For me Ruby on Rails would be a close second.
I'd probably look at DotNetNuke. Its easy to set up (a lot of hosts will do it for you) and easy to use and put together a custom site that business's will be able to maintain in the future.
Its fairly easy to create custom modules that are specific to a business and hundreds of modules for sale (or free) that can be integrated into DNN for special uses.
Take a look at Microsoft's Sharepoint server if you'd like a pre-made framework with many options for plugging in your own code. Sharepoint is kind of a world unto itself but it is a very powerful environment.
Update: I'm surprised to have been voted down on this one. Keep in mind that the questioner specifically requested frameworks that included a CMS. Sharepoint meets this criteria - unlike straight .NET or other web development frameworks.
If you are going to vote the entry down, I think you owe it to the person who asked the question to explain why you don't think he should not even explore it as an option. You could be right - collective wisdom is what voting on SO is all about. But without an explanation, we don't know why you think you are right.
My answers are going to revolve around the .NET stack.
Use Master pages and CSS templates. This makes it so much easier to pop in a new look and feel for your customer.
For sure I'd include the Dynamic Data framework in the .NET world.
Hosting might become an issue for your customer. Questions around managing email addresses, procedures on how to quickly update the website to include the new contact phone number (different for each customer, I'd assume) Consider getting a reseller account on your favorite webhost, and dole out webhosting accounts as appropriate. There are lots of issues around this point. It may turn out to be a nice source of recurring revenue.
Build yourself a few patterns including a database wrapper which would handle all your data calls (i.e. a dll which wraps all your data calls, sets up your ADO.NET objects, runs your sproc calls, and picks up the connstring from app.config or something similar.)
This goes a long way to maintainability as well.
I would recomend going with anything MVC in a language you can undertand! Theres a couple of CMS's in python, php and ruby using that design and well... that allows you to be ready for combat for Ajax and expanding anything very fast.
This is definitely not a question that can be answered.
I prefer asp.net webforms because I think it allows for extremely rapid web app development, but I am sure you will receive recommendations for:
asp.net mvc
Ruby on Rails
PHP and some framework
Python and some framework such as Django
I believe PHP has the most pre-built apps that you can use, though asp.net also has the things you are looking for.
All of these platforms and frameworks can do what you want.
Choose between Rails and Django. They both have different strengths. I like Rails better in general, but Django's admin interface can save you a lot of time when you need it.
There's another factor to take into consideration here: what are you the most familiar with? I believe that some studies have found upwards of a 30% loss of productivity when trying to learn a new language/framework.
Sometimes, there's nothing wrong with just sticking to what you know. But if you're interested in what languages/frameworks to learn, I'll refer you to the other posts because the above was the only thing I really have to add.
I recommend looking into Grails. It uses Groovy which is similiar to Java (so if you know this already you're good to go). Groovy runs on the JVM so you can still use all the great libraries already available for Java. Yet, since it's a dynamic language with a lot of the similar bells and whistles like Ruby you can use closures and that kind of neat stuff when you need/want to. And you're not slowed down by Java's traditonal slow compile-deploy-test development cycle.
Grails is already setup with Hibernate and Spring. You can create CRUD application in practically no-time (pretty much like Rails applications), and at the same time drill down and be able to control every little details since it's built on such proven and well-supported technologies. In addition there's literally hundreds of plugins available that helps you easily set up things like mailing lists, security, AJAX components and so on.
Otherwise, if you want to set up a community site and don't want to code a single line you could always check out ning.com.

Roll my own or use existing CMS (Drupal perhaps?)

I need to create a internal website and can't figure out if we should be writing our own, or using an existing framework.
Most of the website will essentially be a front end to a database. We need to have a number of people enter data into forms. We then want to be able to show different views of all this data -- including running small queries (e.g. how many resources do we have with attribute 'X'). As is usually the case with this, we will want to tweak the UI on a regular basis.
There actual data design is not a simple 1:1 mapping of resource to entry. For example, we might track several attributes for one item as the "base set of data" for that item. Then we could have several additional sets of data.
Imagine a recipe application. You might have a recipse for a starter. This could then be referenced by several other recipes that need that same information.
I feel like this is best suited for a general framework (Ruby on Rails, Django, etc), but I wonder if it might not be good for a "traditional" CMS platform like Drupal? I specifically mention Drupal since the people that would develop this have the most knowledge using php and MySql.
I usually lean towards wanting to use an existing platform, but am interested in other people's thoughts. To give you an idea of scope, I would imagine if we wrote this from scratch we are probably talking about 3-5 weeks of development.
Would you recommend writing our own, or using an existing framework? If you would suggest using something that exists what would you recommend?
Would you consider this to be best suited for a straight framework or a straight CMS?
Thanks!
It's possible that Drupal will be a good solution for you, though you'll probably need a few key additional modules like the "Content Creation Kit" (CCK) and "Views".
Unlike other web CMS systems (WordPress, Exponent, phpNuke), Drupal treats your entries as a "pool" of content, from which you pull various subsets for different areas of your site.
There is a lot of documentation for Drupal (almost too much), the biggest problem is finding the piece that's relevant to what you're trying to achieve. Diving on to one of the interactive IRC channels can be a good idea, as the community is quite helpful and is almost always willing to give you a pointer in the right direction.
The power, flexiblity and capability of Drupal is both its biggest strength and weakness - I know it took me a bit of effort to get my head around key concepts, and I'm far from being a Drupal Expert.
One last comment: Having written my own CMS from scratch, which I abandoned in favour of Drupal, I'd suggest your 3-5 week estimate is likely on the light side.
Stay away from Drupal for any site that requires customized functionality. I recently used Drupal for a website at work, and it was VERY difficult to figure out how to get it to do what I wanted it to do. There is a lot of documentation out there, but all of it is unhelpful -- it answers very specific questions about specific issues but does not provide any context as to how you would approach building the site as a whole. If you're a programmer, using a more general framework will probably work better, as CMS's are designed for a specific kind of site, and if you want your site to have non-standard functionality you are going to be fighting the system instead of working with it. If your developers are most experienced in PHP, try one of the PHP frameworks that mimics the architecture of Rails -- e.g. cakePHP or CodeIgniter.
CMSes usually make sense when you have a broad and potentially expanding array of different content types and modes you need to handle. Drupal has literally dozens. Given than you mentioned RoR, it sounds like what you need is more of a MVC style framework. Maybe similar to the sort of thing stackoverflow was built with. .NET an issue for you?
If you are really limited to 3-5 weeks, however, I think a Rails-based strategy makes sense so go with RoR or CodeIgniter
If Drupal can do what you need easily I would say go with Drupal. I don't know much about Drupal though.
Otherwise, what you describe sounds like a data driven web app or more like a reporting app. It sounds like you might have some very specific needs or that users might want very specific needs in the future. That is something hard to get from premade software since you have no idea what users are going to request. Since I'm a programmer I would probably want to build it myself.
Funny you should ask... I just came across this in SD Time's Linkpalooza this afternoon:
Ten free powerful content management systems…
There are at least 4 more mentioned in the comments to this post.
It seems to make little sense to develop a new one with so many from which to choose!
BTW, this is neither a recommendation nor endorsement of any particular CMS.
Treat Drupal as a framework. Core modules + CCK + Views is a good start to build on.
If you're doing something that you might want to expose to other applications, consider the Services module. A lot of interesting things have been done with flex frontends connected to drupal running services with amfphp.