What recommened architectures are there for a CMS? - model-view-controller

The Framework (maybe a light-weight CMS) in question will need to be able to expanded with modules, and be able to be implemented into common web services such as a blogging platform, a forum, and status-posting site (social networking), or simply just a basic webpage or so. However, all of this functionality needs to be implemented via modules/plugins. The front end, and admin backend for that matter, need to be fully customizable (via templates/themes) by the end user.
What architecture, or workflow, is best for a system like this. The MVC architecture sounds great for a project like this, however, after conducting some research on already developed systems such as Wordpress, Drupal, and PHPBB, I have learned that none of these systems use a MVC architecture and rather one of their own.
Are there any other commonly used architectures for web development, other than MVC? What does Drupal, wordpress, and the other commong systems use?

Take a look at orchard its an open source MVC CMS which has a builtin plugin framework and most of the things mentioned above have already been done. Its also pretty easy to write your own modules. http://orchard.codeplex.com/

Related

Add CMS subsystem to Codeigniter site

I have a rather complex (one man year development in total) specialist website application based on a CodeIgniter framework. I now have a requirement to add CMS functionality to it so that the users can add articles and similar content to the system to compliment the main functionality.
There are obviously several CodeIgniter CMS systems available - FuelCMS and PyroCMS for example, but which of these (or another) would be best for integrating into a developed site with minimal impact on existing code?
It depends on what you have already. Do you have RBAC in place? If so, that's already half the battle.
There's a lot out there but integrating those might turn out to be more work then writing your own system.
I've answered a similar question a while ago, about merging existing CI projects with a CMS, it might give you some more insight:
Port Codeigniter App to PyroCMS

Development methodology for CMS driven websites

This is quite a generic question, and I hope to hear what opinions people have on this, rather than a dedicated answer.
Ive been developing for about 6 years and have recently joined a new team. I am self taught. I have been given a project to develop a Magento driven ecommerce site, and a large portion focussing on editorial/blogging sections.
When I work with a CMS (i realise not CMS's work the same), to complete a project my methods have always been in the following order:
Develop the front-end (html, css, js).
Integrate front-end templates onto CMS
Compile CMS functions to fill out contents in placeholders on thos templates (replacing any dummy text etc).
Inject content.
When I explained this to my colleagues they looked horrified.
So they work a different way around:
Compile functions on CMS
Inject content.
Add styles (html templates, css, js etc).
Add to the equation, my scenario, the ecommerce website im developing must be responsive on devices.
So my question is, having I been doing this wrong for the last 6 years? Complete the front-end first? Or compile the front-end after?
I would really like to hear what people think about this. I am self taught, so have never had official training on development patterns such as this.
Thanks
It rather depends on the system used. Some systems allow you complete flexibility in the front-end, others (such as Magento) are more restrictive in what they allow.
At my company we usually use something akin to your preferred method; but I know that a partner of ours developed for Magento in the way of your colleagues.
So, my guess is that you both are right and that it is dependent on the choice of product.

Starting a journey with CMS - which product will suits my requirements

I'm starting a journey with CMS. I would like to create a few simple web sites: my pastime blog, programmres blog (but I would be something more than just a plain blog) & three web sites: for my father's & uncle's shops + simple web sites that helps to learn English :)
When it comes to by programming background, I was PHP developer for 2 years so I thought I could use that experience. I found WordPress & Joomla as probably the two most popular platforms. However WordPress is usually recommended as best bloogging platform. What about being a CMS? So perhaps one of them is better as CMS? Or there's something else ever more suitable for my needs (Drupal)?
On every day basis I'm ASP .NET MVC 3 developer, so perhaps you could recommend a good MVC3, active CMS project?
EDIT: How about ASP Project: Orchard?
I would always advocate Drupal over Joomla for CMSs. They are similar in what they offer. WordPress in more beginner friendly but is (currently) less "customisable" and has a different, more blog-oriented, focus. Drupal is very full featured and is easy to manage and install. I believe Joomla is getting better with the release of 1.7 and/or 2.5LTS.
Drupal's community is more comprehensive and as such you get plenty of support. You can choose a very wide range of functional complexity with Drupal that you can't with WordPress. Joomla is similar in this regard but there are a few key things that I prefer from a development perspective with Drupal over Joomla:
Modules and plugins are more plug and play with Drupal and easier to manage.
When you develop a module in drupal you there are code "hooks" to bind to the core where as Joomla you extend the core
The drupal website admin is more intuitively designed and easier to manage modules etc.
Installation and update/upgrading of Drupal is more universally developer friendly (i.e. you don't need to be an expert and if you aren't you are not too likely to destroy your sites!). That said Joomla seems to be starting to follow Drupal more closely now so it will probably start getting better.
The main reason I would advocate Drupal for your needs it your requirement for a variation of functionality. You can enable and disable functionality very easily in Drupal and you can drag and drop themes etc. with ease. I use Joomla every day in work and my experience Drupal is king!
It's not very difficult to use WordPress as a CMS. A good resource is http://digwp.com/. The blog itself should help, but the Digging into WordPress book has a chapter about how to turn WordPress into a CMS. The great thing is you'll get a lifetime subscription of the book, so when new versions of the book come out, you will get the updated PDF for free.
My personal preference is with WordPress. It seems to have the largest user community, which means more answered questions, more plugins, more places to find cool themes, etc.
If you have PHP experience, it's probably your best bet.
As far as WP being a CMS, it has definitely goot the tools you need for a fully functioning website. A lot of the times I use WP as a CMS for clients, because it's so easy for them to catch on, and there is always a way for them to google any question they might have and find an answer without having to contact me for support.
Additionally, WP is great if you know some PHP code and can write your own custom plugins.
There are TONS you can do with it. Take a look at the most recent change log. It's got some great stuff.
http://wordpress.org/ for more info and download.
As far as ASP CMS, I've used Sitefinity in the past (only because I HAD to for work). I didn't find it to be nearly as intuitive as wordpress, and frankly I just don't like ASP. I find it to be clunky and not nearly as easy to modify and theme as PHP. Just my personal opinion of course.
Also, I'm not sure Sitefinity is free, so there is always that to consider. I'm not sure there are many free ASP CMS options as there are for PHP.
Although for simply blogging WordPress is the leading choice, for a CMS I would go with Joomla. There are many extensions that you can use with Joomla, the templates are very easy to edit if you have past experience with PHP, and the native CMS that it comes with is very verbose. Joomla has a strong community behind it, and they support many different aspects of a CMS and are constantly adding new features. Implementing a Blog in Joomla is very easy.
WordPress is certainly the leading choice... if you weren't wanting to use your developer skills. Writing a plugin for WordPress is rather agnostic to programming style (or ability), and is great for entry-level designers, but if you're looking to apply your MVC skills, of the two Joomla would be the choice.
The reason I say this is that Joomla more or less forces extensions to be MVC compliant. They also have a very strong and healthy community (the WP community in comparison is cut-throat, dog-eat-dog, the loudest-jackass-wins kind of a thing) and recently have abstracted the PHP framework layer away from the CMS, so if you're into really hardcore architectural web application coding, you can play with just its framework independently.
WordPress == get it done fast, elegantly (novice & designer focus)
Joomla == get it done right, with some work (business, programmer, and hobbyist focus)
Drupal == build every function of your site from the ground up, then rebuild it again when the next version comes out (engineer focused)
Bottom line is that you won't find good MVC driven CMS at this point in time. I have done very similar research and went through a range of vendors (both commercial and open source).
Yes, Orchard is available and based on your requirements it might be up to the job, however, I'd say that it's mainly for small size businesses that want some basic content management functionality.

MVC Framework and CMS

I'm wondering just where a CMS - out of box like SiteFinity, Sitecore, SharePoint, DotNetNuke, etc. - fits with the MS MVC Framework (1 or 2). The MVC Framework presents a lot of benefits for developers and for overall SEO and SEM value, while most CMS platforms require a lot of the WebForms "stuff" that comes with ASP.NET. Thoughts? I'm trying to figure out if these two pieces fit well together for future projects, or if they are disparate concepts?
BTW: I realize that a custom CMS could work, however that can require an awful lot of extra time than just setting up an instance of an out of box CMS.
MVC is a pattern. There are CMS systems that are webforms-based, like DNN, and ones that are based on MVC, like Orchard. Either framework (Webforms or MVC) are equally capable of supporting a CMS. Your choice should be based primarily on the one that offers the features you want. If you expect to extend it with plugins, and you're already familiar with Webforms, go with the one you know unless you want to learn MVC.
My thoughts are you very limited in the tools/components available to you at present when you choose to go the MVC route. Although there are a few CMS components out there for MVC they lack maturity IMHO. I believe in a couple of years when MVC has more maturity you'll be able to achieve the speed and sophistication of application development that is close or on par with Webforms.
Right now though if you have a lean project budget, and you need sophisticated functionality (i.e. CMS); Webforms still remains hard to beat when you have those constraints.

What are the advantages of using an MVC framework over e.g. Drupal to build a large website? [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 years ago.
Improve this question
I am writing a comparison between 3 technology options for building our new website:
Wordpress
Drupal
An MVC framework
The boss is sure we should use Wordpress, but the site will be big, with many sections, subsections, pages, and complicated templates.
I'm finding it easy to compare WP + Drupal, but not so easy to state the additional advantages (over Drupal) of using an MVC framework.
So far I have:
Custom data storage, content types, semantics
APIs / REST
Separation of logic / UI
Convention, code structure
(Obviously some of the benefits will be different depending on the type of project. In this case it will be a large portal for a museum, with potential for some social stuff for visitors)
It's difficult to compare a CMS (e.g., Drupal, WordPress) with an MVC framework because they are in different categories.
To specifically answer your question about the advantage of an MVC framework over a CMS, the advantage of an MVC framework is simply that it allows you to design the exact web app you need from the ground up.
As for your particular situation:
Using an existing CMS such as WordPress or Drupal would be an excellent idea if they fit your needs. It avoids reinventing the wheel, saves you time, and CMSs can be quite user-friendly (to varying degrees). If you plan to delegate the task of content updates to a non-technical user, then it might be prudent to choose a novice-friendly CMS rather than spinning your own with an MVC framework, possibly resulting in an app that requires more technical expertise to maintain.
If, however, you envision that the website will require a lot of custom business logic that would be difficult to implement within the constraints of a CMS, then you might need to use an MVC framework.
Thanks everyone for your answers. I made the case for using a Framework or Drupal, but it was decided that we should go with Wordpress, or at least start building on Wordpress and see how it goes.
FWIW here are the notes I came up with:
WORDPRESS / MU
http://wordpress.org/
http://mu.wordpress.org/
A personal publishing tool, blogging platform
PHP +
Many available widgets +
Multi-author support / workflow +
Social features (BuddyPress) +
Integration (BBPress etc) +
Easy, common +
Simple UI +
Able to manage multiple blogs (with WordPress MU) +
Only 2 content types (post or page) -
Not a real "CMS" / blog mentality -
Inflexible heirachy (no sections) -
Limited semantics -
Limited template choices for authors -
Messy code -
Security / exploits -
DRUPAL
http://drupal.org/
A content management framework, CMS construction kit, tools to build sites. For 'non programmers' to build websites, building blocks
PHP +
Made for big sites / portals +
Social features built in (each user has own profile/log, extensible) +
Page type selection/config by authors (block system) +
Scope for structured data / semantics +
Multiple content types (press releases, news articles, blog posts, etc.) +
Good community / tools +
Blank canvas +
Many features +
Good image handling +
Complex UI -
"Black box", very abstract code, learning curve! -
Customizing / theming is difficult -
FRAMEWORK
It allows you to design the exact web app you need from the ground up
Extensible +
Control of semantics, data storage +
APIs / Data / REST / Web services +
Current, modern tools, cutting edge +
Separation of logic/presentation (MVC design pattern) +
Convention - structured code, workflow +
Reuse/combine content +
Allows development of multiple UIs without touching business logic codebase +
Robust API / standards / patterns +
DRY (don't repeat yourself) +
Learning curve -
Need to design a custom UI -
Overkill? (depending on goals) -
You can't really compare WP or Drupal and MVC framework. What you can do is to decide whether to use an existing content-management system or roll out your own and compare ROI, TCO, development cost, etc.
As someone who has worked on various home rolled CMS systems for the best part of the last decade my advice is don't roll your own. If you have some unique application then MVC is a nice way to code up web applications, but it's ease won't counterbalance the thousands of man hours spend building and millions of page hits of testing the OSS ones have.
Drupal is not only a nice CMS system but also is a pretty good framework for building bespoke web functionality, so you get a lot for free and only have to spend time working on what is unique to your site. (after you have learnt how to code on drupal systems)
You can build a pretty extensible site based on WP or Drupal, but you may run into design limitations set based on what the frameworks were designed to do. Drupal/WP are content management systems at the core, so if you're not managing content, you're not using the framework effectively. If you find yourself building more and more code to get around these limitations, then you have cause to build from a scratch or use a lightweight framework.
I'm currently building a site with CakePHP MVC framework and I highly recommend it. IMHO, it satisfies all of your advantages.
Drupal has MVC Layer, check out Drupal Prometheus # http://www.drupalprometheus.org. It has most of the features of a modern MVC framework plus the power of Drupal CMS. We recently started using it on a project for our client.
The flexibility of a CMS has a limit, though with Drupal that limit is getting smaller. There is a learning curve to accomplish what you want, and it might not be the most elegant solution if you have to fudge it together with existing extensions. Of course you can always expand the functionality of any CMS yourself, but that may take more time than using a good framework in the first place.
I had this same dilemna recently, and after trying with Drupal, eventually went with the CodeIgniter MVC PHP framework instead. Probably worth investing a few days with a CMS first, to investigate if it's possible. If you then decide it'll be too difficult, use a MVC framework instead.
Microsoft ASP MVC (for example) is a framework for building your websites on, Drupal is a content management system where you "design" your pages but don't have to write any code.
I would say the advantage of using an MVC framework to roll your own instead of using WP or Drupal are:
You only code what you need. WP and Drupal are gonna have lots of stuff you don't need sitting on your server.
The developers understand the whole codebase because they've written it from scratch - making it easier to maintain later.
WP is a big codebase (I don't know about Drupal) as soon as you require something that isn't supported by either CMS you are going to have to dig around a lot of code.
Wordpress' separation of logic / UI sucks - I mean really sucks.
More flexibility. CMSs are great as you don't try to make them do something they weren't intended to do - then they become a pain.
If you are going to push for an MVC framework then you need to look carefully at which you would choose - they are not created equal. Some of them will place restrictions on your code and website layout in the same way a CMS would.
I guess it's really down to how complex the requirements are and how well a CMS or framework will meet those. For relatively simple content delivery it may be an option to write your own lightweight MVC and build upon that.
I would advise you strongly against WordPress, it is wonderful for sites with some static pages and one blog/news section, but I made a bilingual product website based on WP 2.2 and it was a major PITA with lots of hacking and writing database-reaching code into the template to make it possible.
Now I have been developing in Drupal and it is really better for larger projects (although it takes more time to set up a simple blog compared to WP) - it has wonderful modular architecture that allowed me to solve any request/problem so far by writing a module instead of hacking the core.
As for MVC/Drupal: have look what Drupal does, if you can get your result by modifying Drupal, then it is great and will save you a lot of time by not having to code the usual stuff (user registration, input sanitization, robust form handling and validation, theming infrastructure, storage abstraction, web services abstraction layer (Services module) and so on...).
Against Drupal: inherently slow, due to modular (I'm rendering a list of items, let's call all modules that implement theme_list to find out if they want to modify it) architecture, so if you are making next twitter, get a fast MVC framework instead. And caching of content for registered users still needs lot of work to be effective (a tagged cache should be in core), so sites when users are usually logged in can be slow.
I reckon Drupal is MVC. Drupal uses a theming system which is your views and a menu system which is your controller. The modules are your models. Sure, the menu is fragmented into various modules but it's still basically MVC right?

Resources