Drupal sites and distributions have various needs for block placement and layout solutions. This wiki page aims to capture key needs and how each of the leading solutions addresses them. While the focus is on Drupal 7 versions, some observations may apply to Drupal 6 as well.
Aims:
- Enable site designers and Drupal distribution authors to understand the relative merits of different solutions and so make informed choices.
- Promote development of standards e.g. Kit so that components built for different distributions achieve at least minimal interoperability.
The main solutions noted are not necessarily mutually exclusive--a given site or distribution may have good reasons for combining two or more solutions.
| Need/functionality | Context | Display Suite | Panels |
|---|---|---|---|
| Exportable: settings can be individually exported, imported, overridden, and reverted through the UI. | Exportable via Ctools | Exportable via Entity API (?). | Exportable via Ctools |
| Features support: can be added to features | Features support via Ctools | Features support via Entity API (?) | Features support via Ctools |
| Lay out entity bundles (e.g., node types) in multiple view modes. | Can be used to enhance layouts for existing view modes. | View modes is the organizing principle of Display suite. | Can be used to enhance layouts for existing view modes. |
| Intuitive UI for layout | Context editor (bundled with Context module) provides drag and drop in place editor. | (?) | Highly refined in place editor. |
| Enable multiple layouts: | By default is limited to a theme's defined regions. Can be enhanced with additional layouts defined at the theme level, either as theme-provided layouts available to the Context layouts module (a sub-module that ships with Context) or through the use of configurable theme settings via the Delta module as implemented in the Omega base theme. There is also a proof of concept module, Context panels layouts, that aims to provide context layouts at the module rather than theme level. | Provides multiple layouts. Also supports Panels-style layouts. | Provides multiple layouts. |
| Enable custom, user-defined pages | Context can be used with Context node to produce custom pages. | ? | As well as overriding existing pages, e.g., entity pages like full node displays, Panels can be used to create custom pages. |
| Allow different Features to each specify elements (blocks, etc.) to be displayed in a particular layout such that, e.g., home page content is the sum of blocks supplied by several optional modules. | The ability to produce composite layouts from multiple sources is a key feature of Context. | Since field display information is stored with field definitions in Features, | Panels displays tend to be monolithic--they are created and exported as a whole. The ability for a given feature to conditionally enhance another feature's panels page would typically rely on using a hook_alter() implementation or a solution like Features override, which allows exporting of component overrides to a new feature. However, a given feature could provide mini-panels that could be placed via e.g. context. Exists as a feature request to Panels. |
| Pass contextual data to blocks: e.g., pass a custom argument to a block view display. | Contextual data can be passed to blocks via use of the Views boxes module. | Views content panes can be displayed in display suite view modes. TBD: can contextual data be passed? | Panels pages include a context that is configurably passed to views content panes. |
| Support for adding multiple types of data to layouts, e.g., node fields. | No - Blocks only. | Supports display of CTools content types (fields, blocks, etc.). | Supports display of CTools content types (fields, blocks, etc.). |
| Support for adding custom elements to layouts. | Custom data can be displayed via use of the Boxes module (or one of several similar solutions for code-based blocks). | Supports custom fields that can be added to and configured for the layouts of specific entity bundle view modes. | Supports custom panes. |
| Provide default layout and content on a per entity (eg node-type, user) basis. | No. | No. | Yes, via the Panelizer module. |
| Ability to lock content in a particular part of the layout (eg, so that more permissioned users can place an ad block and not have it removed by content editors). | No. | No. | Yes, via a permission to edit locked panes. |
See also:
Comments
I like the composite module
My comments to the list:
My list of pros:
It is production ready for 6.x
It is quite simple
I can create a page, and then later convert it to composite if I need more stuff in it.
It is very, very easy to select blocks for inclusion on the composite page.
It works flawlessly with i18n; I haven't tried out panels in such a setting. The front page of http://beta.samipath.com use one node which is a composite layout. It has two views embedded as blocks. If you change the language the content will change. There is no content for the finnish front page, but that is due to some features missing from i18n 6.x-1.0 which seems to miss a patch which was marked as fixed earlier (i18n content negotation handler for views).
There are stuff which Panels is much better at, changing the layout of all nodes in a content type, just to mention one.
I would love a handler for views which allowed to create zones like in panels/composite, instead of just the table/node/etc versions.
My experience has been different
In some cases Composite is good and in some case Panels is good. I don't quite agree with pkej on:
Well the Pages option on Panels (3) is incredibly more powerful and well structured. It gives the option to create new task handlers for Node edit/ view etc. whereby one could easily change the layout of the node for a specific content type. Wow! It is something. Again the contexts in Panels are very helpful in providing the conditions under which a page/block would get values. Very good indeed.
So I would say, Panels can do everything that Composite does and more. But certainly the UI of Composite is easier at least initially.
Looks like one major difference right now...
Panels allows new layouts per content type, Composite allows new layouts per node within that content type (a default can set, but individual nodes can be layouted differently if desired)
I don't think Panels currently allows this, if it does, I can't figure out how to do that. On a page panel, yes, but not on the node itself.
If you want to have a single content type (say blog), but allow different posts to have a choice of layout, Composite looks like the way to go... for now.
Panelizer module now services
Panelizer module now services this need.
link update
http://drupal.org/project/composite
http://drupal.org/project/panels
updated the wiki content.
updated the wiki content.
Luís Pedro Algarvio
Drupal and DevOps Developer, Evangelist & Trainer
lp.algarvio.org
FYI
You don't have to add a comment when you update the page. This is what the revisions tab is for http://groups.drupal.org/node/15851/revisions
They work great together.
I can only add to this that i have created sites with context, panels and display suite enabled. They all have their specific goal and all three are very powerfull.
can you give us the link page?
Hi Stalski,
can you give us the link to the page and also tell us where have you applied context, panels and ds on the site?
Thanks!