Drupal 7 has most global site and page elements hardwired into templates, and gives no control to users to move them around. All the page elements (title, tabs, actions, breadcrumb, messages) are hardwired to core and contrib themes alike. We should stop special-casing these, so they can be moved around and selectively hidden or replaced as needed.
Also the current solution makes tabs uncacheable by render cache unless whole page could be cached. Tabs are also being generated even though they wouldn't be printed.
- Introduce them as specific blocks that can be moved around.
- Remove special case items from themes.
- Introduce regions as needed to place these elements.
Performance gain (see #264):
(block management page which has action links, primary tabs and secondary tabs. Tested as anonymous user. Warm caches but internal page caching turned off.)
=== 8.0.x..cached-tabs compared (55919cdb0fed9..55919d1190958):
ct : 92,936|88,242|-4,694|-5.1%
wt : 159,482|151,346|-8,136|-5.1%
mu : 18,570,072|17,711,328|-858,744|-4.6%
pmu : 19,736,144|18,835,248|-900,896|-4.6%
The code should depend on blocks as plugins (), however, we should not mark this postponed so we can do work on this in parallel and be ready for commits once that lands.
Beta phase evaluation
|Issue priority||Major because it significantly improves the ability for site builders to manage page elements from the UI. Not critical because nothing is broken.|
|Unfrozen changes||Unfrozen because it mostly affects the page template, and templates are not frozen.|
|Prioritized changes||The main goal of this issue is to improve site building and theming experience. It is also a continuation of work that was done pre-beta to convert all page template variables to blocks. This issue is also performance improvement which is prioritized change.|
|Disruption||There will be possible disruption to sites with customized versions of the templates affected, or depending on the variables that were removed/moved.|
PASSED: [[SimpleTest]]: [PHP 5.4 MySQL] 97,259 pass(es).
PASSED: [[SimpleTest]]: [PHP 5.4 MySQL] 97,265 pass(es).
PASSED: [[SimpleTest]]: [PHP 5.4 MySQL] 97,373 pass(es).