I am exploring how CMS's in PHP work. I am talking about full-powered, fully developed CMS's like Drupal, Wordpress, and Joomla. What are the main components and systems that are incorporated into something like this.
For example; I know you will need a page loader to handle all page requests (direct all requests to index.php using the .htaccess file), you will need a database class, a templating class, and a hook system to provide user extendability. What else am I missing?
(Also, is there a book that explains the working components of a full-fledged CMS?)
I'd second starting with something like Wordpress (not a real CMS I know) to get a feel for the sort of things you want your one to do. From there you could move up to Drupal or if you still feel the need to, look into building one in a framework (Codeigniter is a good one to start with).
Personally after a few years of rebuilding a CMS for each client I wish I'd got into Drupal quicker.
Google MVC in PHP. There are plenty of frameworks off which to build such a tool. Although, I beg to differ on Wordpress. Wordpress is a blogging system, not what I would call a "fully-fleged" CMS.
I found this book.
And I would strongly recommend this book on building a CMS with the Zend Framework.
Another solid CMS to consider is Concrete5.
Just a quick shoutout for ez Publish. It is a rock solid PHP based CMS, some of the best code i've seen.
Related
I have experience with Joomla and have modified and wrote some simple Joomla extensions. I don't have experience using one of the popular PHP frameworks (such as CakePHP), but I was thinking about using the Joomla framework because I'm familiar with Joomla. How would I use the Joomla framework for a software project instead of using regular Joomla and writing the extensions needed for it to extend it's capabilities? Thanks!
The basic idea is that you:
Get a copy of either the whole framework or just the packages you need+dependencies (from github or composer) or use the older copy that is shipped with the CMS,
Bootstrap your application (JApplicationWeb or JApplicationCli).
Write your code using the MVC structure provided.
The big difference with writing a totally independent application is that you are doing just that, you need to build everything in the application whereas in the CMS there are already a lot of things in place. (The good part of that is that you can make new code with no legacy concerns.) For example, if you look at the JIssues project you'll see that they had to think about things like authentication. So as you would expect writing a simple application is simple, writing a complex one is complex.
You can see many examples of framework applications around, ranging from the ones found in the CLI folder of your CMS installation to JIssues, and of course the three web applications in the CMS are all examples of applications on the framework.
The Joomla Framework is intended (among other things) to be the platform upon which you can build a web-application. The framework is like the frame of one of those motorcycles they build on "American Choppers." It provides the backdrop so that you can hit the ground thinking about your app without worrying about User Authentication, database connection, and a thousand other things like those that get in the way of bringing your app to its potential audience.
If you're trying to extend Joomla, the current edition is what you should be using.
We are building a custom application using LAMP with P being PHP. We also need to have CMS to manage various aspects of the site. The two options for the CMS are
Build a complete custom CMS from scratch
Extend an existing open source CMS to fit our needs. This way we can use some of the features out of the box and others we will build ourselves.
I would like to get your feedback on the following
What are your experiences with option number 2?
Which CMS would you recommend that we can further customize and extend for our use?
What are the best ways to integrate a custom application with other external CMS?
I really like the MVC approach for a CMS (you did mention extending), and PyroCMS is built on Codeigniter. It might not (out of the box) serve all of your needs, but easily could. Its worth a look, at the least.
A whole set of CMS are available nowadays, everyone with its own pros and cons.
I guess the first step in your case is to make a list of the features that you:
MUST HAVE
SHOULD HAVE
COULD HAVE
Once you have this list, you'll be able to compare the existing CMSs to see which one better fits your needs.
There's no a best CMS (otherwise everyone would use the same).
Said this, Joomla offers a powerful base system, easily extensible. But this is just my modest opinion. Right now, 4712 extensions exist for this CMS. If you still can't find all you need, it's possible to implement your own extensions (in terms of plugins, components and modules). See the developers section for more information.
I've recommended ModX in response to previous questions
It provides a nice clean framework which is simple to install and is easy customize.
For your situation I think ModX is a strong contender as it allows you to embed your own php code in your site using snippets - Bob's guide on snippets is a good overview. The snippets can be managed through the backend web manager and they can easily be dropped into any pages as required.
Larger applications can be setup as modules, this is similar to many of the other main stream CMS's, it's just that in ModX the web based control makes the management of the code a simple task.
We currently use MySource Matrix CMS for large projects, Wordpress CMS for small projects and Zend Framework for bespoke applications...
I'm not trying to confuse and compare a CMS to a framework, that has been done before :-)
I want to identify a few CMSs for review that have foundations in strong (preferably independent) PHP frameworks.
The only one I have looked at is SilverStripe CMS and Sapphire Framework.
We have many clients that have a CMS for internet and/ or extranet and then various other bespoke applications that are then integrated via various means to look like they're in the CMS.
I believe it will be more productive and beneficial to have a common framework between these branches so they can be natively merged.
Hope this makes sense.
PS. I have used custom assets in MySource Matrix and specific modules in other CMS but you feel you are working for the CMS not the application you are building.
Have you looked at Expression Engine? Its built on top of the CodeIgniter MVC framework, and may provide a lot of flexibility for having parts of the site be managed content, and branching out into more application type stuff using CI when needed. Not free, but all my colleagues that use it, swear by it (so much so that I'll actually consider it for the next project that fits this profile). There are also add-ons for many of the commons problems you're likely to want to solve.
And while not PHP, the Django framework is also a nice cross between CMS and App Framework, with some really great features like DB Migrations, etc. I can honestly say that Learning Python made me a better PHP Programmer, and the projects I've done with django were fun and fast to code. Not to start a holy war, but I describe Django as Drupal without all the clutter (and yes I've worked with Drupal enough to respect and fear it at the same time ~ too much friction in the Drupal dev process for my taste).
Even if I didn't get clearly what you are looking for I was just searching for a CMS that is not bundled with a propietary PHP framework and it should also be fast, simple coded, ordered and flexible to extend.
After a lot of search I found OctoberCMS. It uses Laravel PHP framework and it's intended for wevdevelopers/programmers, may be in a future it will also support more WYSIWYG edition. Right now it's very fast and easy to extend via MVC implementations or plugins.
It has a nice code and structure to work as programmer. If you like to create content via HTML+CSS and you don't care about WYSIWYG, then this could be a great alternative.
It's a very different approach compared to other CMS bundles. I'm not saying it's better, just different.
With their slogans:
The PHP framework for web artisans
http://laravel.com
The platform that gets back to basics
https://octobercms.com
Have you tried Drupal? We have used it as a CMS and also integrated it with things like Microsoft Dynamics and UPS Worldship. It's pretty flexible like that.
I wouldn't call sapphire and independent framework for the simple fact you'll have a hard time finding many apps written in sapphire alone - sapphire pretty much is silverstripe. Theres also the issues of silverstripe using an ajax powered admin interface for much of its own functionality meaning you have to adhere to these to keep the same look and feel with the bespoke work you want to add.
I am looking for an easy-to-use CMS that can be used to host a multilingual website with photo galleries and a few forms.
I am open to PHP/Python, excluding WordPress/Joomla/Drupal.
Django CMS 2.0 is a great multilingual CMS.
Views are cached and being a pluggable Django app makes it very extensible.
You would like the plugin approach of the design, is very helpful to integrate existing apps to a project.
http://github.com/digi604/django-cms-2.0/tree/master
Try CMS From Scratch. It's hard to get any simpler or easier.
Also, don't forget http://www.opensourcecms.com/. They host demo versions of most CMSs out there that you can try.
If you're open to Ruby, see Radiant CMS: "Radiant is a no-fluff, open source content management system designed for small teams." Also Mephisto.
For something in Python that isn't Django, you can also try Pylons.
Checkout django-blocks. Has multi-language Menu, Flatpages and even has a simple Shopping Cart!!
Since you tag django, I can suggest you a reusable Django application called django-photologue. IMHO it's worth it to use a CMS capable framework like Django rather than using a ready made CMS because in the future there would be a chance for you to customize your application. Using a ready made CMS I reckon is not as flexible as using a framework like Django.
One of your tags is 'django'.
I don't know if I would call Django simple, but it is easy
to use - once you know how... It has a very steep learning
curve.
Perhaps you are really looking for which framework to learn
and use for web-development for the next many years? I that
case I would recommend Django. Others systems I considered
were (all PHP based):
Joomla
CMSMS (CMS Made Simple)
Drupal
CodeIgniter,
CakePHP
Symfony
Smarty
Concrete5.
I have completed a Django project.
The problem is that the lighter CMS systems out there don't usually offer a lot - which is why WordPress/Joomla/Drupal have made it so big. WordPress actually takes 9 MB to load the index page on a vanilla install.
Have you looked at http://chryp.net?
If you know how to program in Python or PHP then there are MANY CMSes built by the users of frameworks that offer a lot if you don't mind messing with code.
What is the difference between a PHP framework and a CMS? It just unclear to me what the difference is.
Thanks!
CMS = Content Management System.
Framework = Collection of tools, source code, methodology and idioms.
You can build a CMS with a PHP Framework, but you can't build a PHP Framework with a CMS.
Also, a CMS doesn't have to be built in PHP, but a PHP framework will be (most often).
A framework helps you create applications by providing solutions for common tasks, but a cms is an application. You can use a framework to create a cms.
There are also a few cms'es claimin to also be frameworks (or have framework capabilities):
Modx
Drupal
If you haved worked with one of the typical frameworks (CodeIgniter, CakePhp, and others), there are for sure quite different to work with a cms like Modx or Drupal, but they are flexible cms'es that are fearily easy to extend with new features!
A Framework is something designed to help programmers build applications, and possibly CMSes.
examples are CakePHP, CodeIgniter, and Kohana.
a CMS can be used by someone with no real programming expierience. examples are WordPress, Joomla, and Drupal.
A content management system is used to manage content. The content can be differentiated according to types, like custom post types for WordPress. You can create a CMS using a framework or code from scratch.
A framework can be thought of as collection of packages to speed up development (compared to coding from scratch).
Now, you mentioned that you want to make your own framework. You can create a framework from scratch, or use open source means, like Composer or Symfony components, to build your framework. Just remember that as a developer, you are responsible for making sure that any open source components you include in your system has been reviewed for security. You can do line-by-line review, which can be difficult (e.g. 5,000+ files on a lumen installation), or any other means based on established protocols of your organization or laws.