Do not add links to news, events, FAQs or newsletters to the sitemap if the target page has not been published (see #5520).
Include the local configuration file twice, once before and once after the module configuration files are parsed (see #5490). This will make settings like the debug or safe mode work properly.
Correctly set the RSS feed self-reference (see #5478).
Remove ­
and
from RSS and Atom feeds (see #5473).
Do not remove the grid column margin on mobile devices (see #5475).
Store the relative path to the installation in the pathconfig.php
(see #5339).
Correctly send the comment moderation mails (see #5443).
Correctly create the user home directory upon registration (see #5437).
Made the .htaccess
files Apache 2.4 ready (see #5032).
Also truncate opened files in File::truncate()
(see #5459).
Added the "allowTransparency" attribute to the mediabox script (see #5077).
The submit button label was not shown in the FormSubmit
widget (see #5434).
Show invisible elements in the back end preview (see #5449).
Allow to create forward pages without a specific target (see #5453).
Updated the TinyMCE typolinks plugin (see #5329).
Correctly initialize the user's pagemounts (see #5454).
Support loading static JavaScripts in the config.php
files (see #4890).
Show all articles if the article list module is in the same column (see #5373).
Do not show mail_
templates from theme folders (see #5379).
Consider only published events when finding the calendar boundaries and only render the previous and next links if there are events (see #5426).
Do not override the header and footer height in the layout builder (see #5368).
Correctly reset fallback, default and "do not copy" fields (see #5252).
Removed the pixel unit from the video width and height attributes (see #5383).
Correctly load the language files (see #5384).
Correctly split the words when adding to the search index (see #5363).
If an eagerly loaded relation does not exist, return null
instead of an empty
model in Model::getRelated()
(see #5356).
Throw an exception if the file system and the database are out of sync and show a meaningful error message (see #5101).
Return an associative array in Model_Collection::fetchEach()
if the requested
field is not id
(see #5134).
Make eagerly loaded "pageTree" fields mandatory again (see #4866).
Do not use forward pages as upper page in the book navigation (see #5074).
Correctly show the "empty news list" note (see #5304).
Correctly sort values by an external order field (see #5322).
Define the login status constants in the back end (see #4099, #5279).
Make sure the drag'n'drop hints do not overlay the field labels (see #5338).
Apply the color picker to single fields as well (see #5240).
Correctly close the SimpleModal overlay with the escape key (see #5297).
Update TinyMCE to version 3.5.8 (see #5273).
Correctly check for nested arrays in Widget::isValidOption()
(see #5328).
Preserve the order of multi source fields when exporting a theme (see #5237).
Also check whether the target exists when creating new folders (see #5260).
Load the core autoload.php
files first (see #5261).
Support null
as column default value in the DCA (see #5252).
Added the $blnDoNotCreate
option to the Files
class, which makes the class
write to a temporary file first and then move it to its destination in one
atomic operation. This fixes some cache issues (see #5307).
Handle @
blocks when importing style sheets (see #5250).
Show the newsletter list even if there is no jumpTo page configured in the channel and show the enclosures in the newsletter reader (see #5233).
Added an option to load model relations uncached (see #5248, #5102). Also fixed
the array_merge()
order so the default options can be overriden.
Updated SimplePie to version 1.3.1 (see #5207).
Updated SwiftMailer to version 4.3.0 (see #5263).
The jQuery accordion script did not work with minified markup (see #5245).
Removed the "spaceToUnderscore" option from all alias fields (see #5266).
The media content element now supports .ogg files (see #5282).
Do not rewrite requests for .mp3, .mp4, .webm or .ogv files (see #5258, #5284).
Correctly determin the last run of the command scheduler (see #5278).
Make the jQuery accordion behave like the MooTools version (see #5251).
Added support for more advanced media queries (see #5236).
Added the missing UserGroupModel
class (see #5218).
Handle the case that glob()
returns false
(see #5226).
The table sorter did not work if jQuery and MooTools were active (see #5228).
Copy all content elements if pages are duplicated with childs (see #5241).
Added lazy template loading for newsletter mail templates.
Do not separate a style sheet with a font-face selector if the definition is invisible or the media type of the style sheet is "all" (see #5216).
Looking for theme templates broke the install routine (see #5210).
Correctly handle empty newsletter channel selections.
Throw an error if FileTree or PageTree widgets are left blank although they are marked as mandatory in the DCA (see #5131).
Modules and Hybrids included via content element were shown even if the content element was invisible or not published (see #5203).
Do not try to limit the template selection to a particular theme but show all available themes instead (see #5095).
Correctly build the comments subscription confirmation URL (see #5201).
Update the database if a file is being uploaded in the front end (see #5137).
Do not send a 404 header if an enclosure is requested and cannot be find by a module; there might be another module which can (see #5178).
Consider the save_callback
of the password field in tl_user
when a back end
user is forced to change his password (see #5138).
Random images now open in the lightbox if configured (see #5191).
Find e-mail addresse like a@b.com
in String::encodeEmail()
(see #5175).
Make sure there is a minimal MooTools core version for the command scheduler (see #5195).
Made Model::getPk()
and Model::getTable()
static (see #5128).
Do not move resources in the file manager if the targets exist. Otherwise the database might get out of sync with the file system (see #5145).
Convert automatically generated article alias names if the page uses folder URL style alias names (see #5168).
The newsletter system did not yet handle file ID attachments (see #5118).
The gallery and downloads element now support using the user's home directory again (see #5113).
Added an option to load models uncached (see #5102).
Added support for CURRENT_DATE
, CURRENT_TIME
and CURRENT_TIMESTAMP
to the
database installer (see #5089).
Store the whole database row in Calendar::addEvent()
so e.g. RSS feeds with
the event text instead of just the teaser are being rendered (see #5085).
Purge the internal cache after a module has been (de)activated (see #5016).
Do not cache the system/cron/cron.txt
file (see #5105).
Do not create content elements for news and events which redirect to articles, pages or external URLs during the version 3 update (see #5117).
Handle incorrectly closed indexer comments (see #5119).
The table content element did not assign the correct CSS class names when there was only one row and one column (see #5140).
Consider the dynamic ptable when copying/deleting content elements (see #5041).
Scan templates in the autoload creator even if there are no classes (see #5158).
Corrected the main column margin when using the layout builder in combination with the responsive grid (see #5170).
Consider the sorting order of external style sheets (see #5038).
The numeric file mounts of a user were overridden by the real paths (see #5083).
Exclude the undo module from the list of allowable back end modules (see #5056).
Validator::isAlias()
did not support Unicode characters (see #5033).
Group the search results by their parent IDs when searching the extended tree view, e.g. the article tree (see #5051).
Correctly generate the debug bar markup on XHTML pages (see #5031).
Handle radial gradients when importing style sheets (see #4640).
More abstract and effective algorithm to determin the number of files in the "purge data" maintenance module (see #5028).
Fixed two wrong class paths (see #5027).
Correctly add event images to the templates (see #5002).
Replaced the automatic copyright notice with a meta generator tag.
Do not strip tags from passwords (see #4977).
Correctly show the number of returned rows in the debug bar (see #4981).
Correctly add the RSS feed base URLs (see #4994).
Fixed an issue in the mediaelement.js MooTools adapter (see #4917).
Correctly assing the classes "first" and "last" in the (mini) calendar if the week does not start on Sunday (see #4970).
Correctly handle URL parameters appended to the empty domain (see #4972).
Updated all vendor scripts and assets to their latest version (see #4966).
Handle existing folders during a theme import (see #4952).
Show an error message instead of an exception if a template cannot be imported in the install tool (see #4961).
Readded the "active" class to the custom navigation module (see #4963).
Always convert file IDs to paths when exporting themes (see #4952).
Mark active forward pages with "forward" instead of "active" (see #4822).
Updated jQuery UI to version 1.9.1 (see #4953).
Remove HTML tags when overriding the page title (see #4955).
Correctly route pages if the language is not added to the URL and there are multiple results or folder URL aliases (see #4872).
Do not cache pages if the request contains a token (see #4702).
Make the original element passed to a Hybrid
object available (see #4556).
Show an error message instead of throwing an Exception if the file system and the database are out of sync (see #4438).
Removed the deprecated workarounds for storing .xml files in the root directory.
Since the autogenerated .xml files now reside in the share/
subfolder, .xml
files in the root directory will not be touched by Automator::purgeXmlFiles()
.
Make sure the install tool and – after the version 3 update – the back end remain accessible if the Contao 3 files are just added to an existing Contao 2 installation (which is not recommended) (see #4907).
Prevent deleting referenced content elements using "edit multiple" (see #4898).
Removed some left-over ENT_COMPAT
constants (see #4889).
The too simple folder hash algorithm caused issues with the file synchronization and was replaced with a more sophisticated one (see #4934).
Updated mediaelement.js to version 2.9.5 (see #4917).
If folder URLs are enabled in the back end settings, generate folder URL aliases in the site structure (see #4933).
Readded the default value for textareas to the form generator (see #4932).
Readded the option to limit the file tree to a certain path (see #4926).
Added a hint that selected files can be dragged to re-order them (see #4838).
Correctly add news and event images as RSS feed enclosures (see #4928).
Correctly scale videos (see #4896).
Readd a language to the meta editor drop-down if it is deleted (see #4716).
Add the static JavaScript file before the non-static ones (see #4890).
Correctly check permissions to toggle the visibility of content elements now that they can be used everywhere (see #4894).
Added an accessible jQuery accordion variant (see #4900).
Correctly link to FAQs via insert tag (see #4905).
Correctly handle wildcards in the page and file picker (see #4910).
Correctly handle the case that a front end module is included in a page layout more than once (see #4849).
Correctly detect the language fragment in the error 404 page (see #4669).
Correctly check for the version 2.9 update in the install tool (see #4920).
Automatically adjust the CSS framework if the layout builder and the responsive grid are combined (see #4824).
Pass the cache status to all recursive replaceInsertTags()
calls (see #4402).
Updated jQuery to version 1.8.2 and jQuery UI to version 1.8.24 (see #4848).
The autoload creator now correctly reads files (see #4876).
Encode single quotes in JavaScript calls (see #4889).
Do not add a content element to news or events without text (see #4882).
Fixed the automatic page alias generator (see #4880).
Correctly handle small class files in the autoload creator (see #4876).
The Email class now correctly embeds all kind of images (see #4562).
Consider the dynamic parent table when deleting child records (see #4867).
Correctly detect the namespace in the autoload creator and support custom configurations per path (see #4776).
Do not regenerate the autoload.php
files when generating the IDE compatibility
file (see #4810).
Model class names which cannot be build from the corresponding table name can
now be registered in the $GLOBALS['TL_MODELS']
array (see #4796).
Removed the back end context menu, because it was buggy in IE and did not work at all on touch-based devices (see #4459).
Do not set a right boundary for the calendar navigation if there are events with unlimited recurrences (see #4862).
Gradient angles are now converted from the new syntax to the legacy syntax for the prefixed versions (see #4569). This also means that from now on you have to use the new syntax, e.g. "to bottom" instead of "top" and "180deg" instead of "270deg" to generate a top to bottom gradient.
Show the hint arrows in all "imageSize" fields by default (see #4326).
Updated TCPDF to version 5.9.192 and fixed some CHMOD settings (see #4819).
Added the classes "first" and "last" to the breadcrumb menu to be more in line with the other navigation templates (see #4833).
Correctly link to articles and FAQs when using insert tags (see #4835).
Do not add the file picker to the list of referer addresses (see #4855).
The CAPTCHA form field now supports the "placeholder" attribute (see #4865).
Correctly add enclosures to RSS/Atom feeds (see #4853).
Handle numeric IDs in the "image" insert tag (see #4805).
If folder URLs are disabled in the back end settings, the "generate alias" job (edit multiple) will generate simple aliases (see #4846).
Correctly handle replacements when uploading files (see #4818).
Only limit getTemplateGroup()
to a theme in the articles module (see #4808).
Decode Punycode domains when used via insert tag (see #4753).
Correctly handle open tags in String::substrHtml()
(see #4773).
Correctly handle units when importing style sheets (see #4721).
Manually merge the legacy database.sql
definitions (see #4766).
Skip news archives and calendars without a jumpTo page when creating RSS feeds (see #4784).
Index the content of the download(s) element (see #4755).
The mediabox plugin did not play Vimeo videos (see #4770).
Comments can now be sorted descending again (see #4782).
Readded the news list "skip items" feature (see #4783).
Use the Validator
class to validate date and time formats (see #4762).
Do not add invalid "float" commands to images (see #4758).
Fixed the CHANGELOG parser in the back end (see #4190).
Fixed the SyntaxHighlighter "html-script" option (see #4748).
Do not offer to drop all tables when installing an extension (see #4622).
Consider the domain, language and publication settings when searching for a folder-style alias (see #4652).
Ignore case when entering an extension name in the extension installer of the repository manager (see #4689).
Consider the language of a forward target when setting up a forward page or
using a {{link}}
insert tag (see #4706).
Allow to import other white-space values than nowrap
(see #4519).
Show the teaser text in the full view if a news item or event does not have a text, so linking and commenting is possible (see #4630).
The style sheet importer now handles background gradients (see #4640).
Update jQuery to version 1.8.1 (see #4678).
Correctly determine in the install tool whether it is a fresh installation or the version 3 update is required (see #4676). Also, scan the files directory if an administrator account is created during the installation.
If an article is selected, do not hide articles in other columns (see #4740).
Support uppercase TLDs when validating e-mail addresses (see #4738).
Do not show the tool tips if the title is empty (see #4672).
Show the back button when editing multiple elements in parent view (see #4709).
Changed the Controller::replaceInsertTags()
logic so non-cacheable tags are
preserved by default (see #4712).
Correctly link new items and events to articles (see #4728).
Output the dynamic HEAD tags before the static ones (see #4700).
Do not cache the page if the file
parameter is set (see #4702).
Renamed the public module folders to "assets" (see #4667).
You can now exempt folders from the files synchronisation (see #4522). Exempt folders will also be hidden in the TinyMCE popup file select menu.
The newsletter subscription modules now work again (see #4660).
Add the static files URL to images added in the rich text editor.
Add the SyntaxHighlighter scripts at the page bottom.
Do not add the jQuery/MooTools scripts as separate scripts.
The new file structure only allows for two static URLs pointing to the upload
folder (TL_FILES_URL
) and the assets folder (TL_ASSETS_URL
) (see #4638). The
old constants will remain available for reasons of backwards compatibility.
Clone the Model and not the Collection when copying files (see #4628).
The "custom navigation" and "quick link" modules did not show if there was only a single page (see #4616).
The quick navigation module could not jump to pages named "index" (see #4611).
Replaced SplFileInfo::getExtension()
which is only available from PHP 5.3.6
with pathinfo($info->getFilename())
(see #4619).
Do not send a 404 header if a download element does not find a file to send to the client. There might be other download elements which do (see #4632).
Do not create files without file name in the extension creator (see #4635).
Moved Controller::restoreBasicEntities()
to the String
class (see #4646).
The file picker can now be accessed properly by regular users.
Make the modules' html folders accessible during the update and create the required files in the extension creator as well.
Pass the minimum cron timeout value to the cron trigger so minutely cron jobs are correctly executed (the minimum interval used to be 5 minutes).
Do not write to the local configuration file in the cron script (see #4483).
Downgraded the chosen plugin to make it work again (see #4595).
Added a config/autoload.ini
file to optionally disable the registration of
namespaces, classes or templates in the autoload creator (see #4591).
Renamed the system/modules/*/html
folders to public
, since the only thing
which is not stored in there are HTML files.
Moved all vendor PHP libraries to system/vendor
and the Contao library to
system/modules/core/library
. Also moved all vendor JavaScript plugins to the
assets
folder.
Added the "indexPage" hook (see #4506).
Added the "prepareFormData" hook (see #4538).
Added an option to get notified of new comments by e-mail (see #3858).
Stop the script execution after the main controller is finished or when a back end or front end template has been output (see #4565). This will prevent code which has been injected at the end of a PHP file from being executed.
Updated all third-party plugins and libraries to their latest version.
Insert tags can now dynamically add style sheets, JavaScripts and additional head tags to the page (see #4203).
Support nested insert tags (one nesting level) (see #4402). Thanks a lot to Christoph Wiechert for his great finds and hard work.
Added a back end upload widget (see #4244).
Added the "toggle_view" insert tag to toggle between mobile and desktop view, so the autodetected status can be overridden (see #4308).
Show some meta information in the "FileTree" widget (see #4330).
Removed all unnecessary prefixed format definitions (see #4463).
Take the external style sheets from the database-aided file system (see #4324).
File::getContent()
now removed BOMs (see #4469).
Added an option to limit the page picker to a predefined node set (see #3563).
To use the feature, set the rootNodes
key in the DCA:
$GLOBALS['TL_DCA'][$table]['fields'][$field]['rootNodes'] = array(2, 6, 7);
The breadcrumb templates now uses lists to render its links (see #1258).
Added the insert tag "post" to access POST data (see #4448).
Fall back to CRYPT_SHA256
or CRYPT_BLOWFISH
if CRYPT_SHA512
is not
available and throw an exception if none of these algorithms exists.
Themes can now be linked with a template folder again (see #4360).
Content elements can now be used everywhere (no kidding).
Adjusted the maintenance module to the new Live Update (coming soon).
Added a button to the safe mode notice, which allows administrators to disable the safe mode without having to open the back end settings.
Use the correct path to font-face style sheets (see #4475).
Added a "requestTokenWhitelist" array to the Contao configuration which can be used to exempt domains from the request token check (see #3164). Example:
$GLOBALS['TL_CONFIG']['requestTokenWhitelist'][] = 'facebook.com';
The code above can be added in the local configuration file.
Make the return value of Database\Result::fetchEach()
an associative array
with the ID as key and the requested field as value.
Contao now uses crypt()
to generate stronger password hashes (see #3225).
Load the core modules before the extension modules.
Added a separate field to enter the link title to the "hyperlink" and "download" elements (see #4068).
Hide the MAX_FILE_SIZE
form field if there is no upload field (see #4001).
Moved the meta viewport tag to its own PHP variable so it can be replaced with a custom version if necessary (see #4335).
Image galleries are now rendered as unordered lists (see #4130). The Contao CSS framework will format them respecting the "thumbnails per row" setting.
The session and authentication cookies are now "http-only" (see #4185).
It is now possible to choose multiple analytics templates (see #4328).
Improved the "latest changes" overview on the back end welcome page and added links to edit or restore the changed element (see #4336).
Added a YouTube content element based on mediaplayer.js (see #4363).
Added an additional routine to check boxes, radio buttons and select menus, which compares the user input with the given options (see #4383).
Ignore DCA files which do not relate to a database table when building the DCA extracts during installation (see #4316).
The Combiner now correctly supports all kind of relative paths (see #4161).
Added a jQuery tablesort plugin (see #4393).
Adjusted the permission checks and reworked the "content elements everywhere" structure (it is now entirely configured in the DCA).
Since the command scheduler now supports minutely jobs, the cron.php
file has
to be adjusted accordingly (see #4425).
Added a development .htaccess file (thanks to Wael M. Nasreddine) (see #4419).
Do not force a password change in the back end if an administrator switches to an account (see #3984). Thanks a lot to psi-4ward and aschempp for their work.
If "addLanguageToUrl" is enabled and a request without the language fragment ends up in a 404 error, automatically add the language of the corresponding root page and redirect sending a 301 header (see #4028).
Passwords can now contain special characters (see #4047).
Background images up to a configurable size can optionally be embedded in style sheets as data: string (see #3884).
Added "rem" to the list of CSS units (see #4395).
Fixed a few remaining issues with the unique pagination variables (see #4141).
The layout builder now uses the holy grail CSS code to generate the columns. This moves the main column above the left and right column, which is good for SEO purposes and for repsonsive designs. If it turns out that this is not backwards compatible, it can be reverted.
Made the Contao CSS framework configurable in the page layout module and added an optional reset style sheet and a responsive 12-column grid. If none of the components are selected, the CSS framework is entirely bypassed.
Add the request token to "save and new" requests (see #4329).
Make sure the size of a resized image is at least 1 pixel (see #4323).
Content elements can now be shown/hidden at a certain time (see #4187).
Added a video/audio player content element based on mediaelement.js.
Pagination variables are now unique (see #4141).
Added Folder->size
to the Folder
class (see #3903).
Added better page titles in the back end (see #3980).
Made the number of login attempts configurable (see #3923).
Themes, style sheets, newsletter recipients, list entries and table enties to be imported can now be directly uploaded.
Do not instantiate the four default objects in System::__construct()
anymore,
but rather lazy load them when required using __get()
.
Made the Cache
, Encryption
, Environment
, Input
, RequestToken
and
Search
classes static, again leaving the Singleton routines untouched for
for backwards compatibility.
Made the String
methods static and left the Singleton routines so the class
can still be used in object context (I actually wonder that PHP supports it, but
it does) (see #3898).
Added the classes Validator
and Idna
to encapsulate validation and IDNA
domain name encoding in static methods.
Added support for minutely cron jobs (see #3895).
Moved the "getCountries" hook to the end of the getCountries()
method so it
passes the sorted array instead of the raw one (see #3823).
Added the new "Share on Google+" button to the article header.
Merged the "rep_base" and "rep_client" modules into one "repository" module.
Merged the "backend" and "frontend" modules into one "core" module and added support for subfolders to structure the different types of classes: "classes", "drivers", "elements", "forms", "models", "modules", "pages" and "widgets".
Just to mention it: There is a new DCA option which allows you to add custom buttons to the edit screen (next to "save", "save and close" etc.):
$GLOBALS['TL_DCA']['tl_page']['edit'] => array
(
'buttons_callback' => array
(
array('tl_page', 'addAliasButton')
)
);
You can see the example in the system/modules/core/dca/tl_page.php file.
Much better "purge data" maintenance job, which can be extended and uses the Automator to get things done, so every job can also be triggered via cron.
New approach to handle mobile devices: instead of redirecting to another website root page, you can now define a separate layout for mobile pages. This allows us to re-use the existing site structure and content and to leave out (or include) certain modules, scripts and style sheets if a visitor uses a mobile device.
Better page layout edit screen: row icons, separate analytics templates, jQuery and MooTools configuration in subpalettes.
The color picker can now be activated in the data container (see #3874).
Added an addMultiple()
method to the Combiner (see #3814).
Added $arrFile
as fourth parameter of the "getCombinedFile"-hook (see #3945).
Show the media query in the style sheet overview (see #4042).
Prevent administrators from disabling their own account (see #4102).
Removed the IE6 layout fix which added an non-breaking space to every activated column (see #23).
Also add the classes "float_above" and "float_below" to image containers (which now can only have the classes "float_left" and "float_right") (see #4157).
Do not generate links to previous and next months in the calendar if they do not contain any events (see #4160).
Added a better hint when choosing the position of a new element (tree view).
Re-added the developer's module to the core, since it has to be adjusted upon almost every update. Will move the task center to the ER in exchange.
Added a diff view to examine the changes between two versions of a record.
Added a log rotate job to the Automator.
Added a meta wizard to manage file meta information with a GUI.
Replaced the default browser tooltips with the MooTools tips interface.
Added a magic method to the Model
and Model\Collection
classes, so you can
call Model::findByName($name)
instead of Model::findBy('name', $name)
. The
first method call will be rewritten to the second one.
Added a hash()
method to calculate the MD5 hash of files and folders.
Added a custom drag&drop sorting order to image gallery elements.
Moved the changelog file into a protected subdirectory (see #4049).
Added a much better page picker which opens in a modal window and shows the site structure instead of just a drop-down menu.
Show a confirmation screen if an invalid URL has been detected instead of the default error screen, so deep linking in the back end remains possible.
Check the request token in the back end when $_GET['act']
is set (see #4007).
The TreeView is now searchable.
Added support for folder-style URLs (see #3921). This is meant as a proof of concept to see whether it works and is useful. We might have to add a feature to the site structure to automatically generate folder-style aliases.
Using folder-style URLs requires one additional database query if the request contains more than one parameter, therefore it can be disabled in the settings.
Improved the moo/j_analytics
templates and added moo/j_piwik
templates in
case someone wants to use Piwik instead of Google Analytics.
Improved the RSS feed handling of the calendar module accordingly.
Improved the RSS feed handling in the news module (will do the same for the calendar module). Feeds are no longer bound to a news archive and can include multiple archives now.
Added a nicer dialog script in the back end.
Added mootools-mobile.js
and swipe support to the mediabox and slimbox.
You can now add external style sheets from the files directory to page layouts.
They are then treated like the internal style sheets, meaning they can be added
to the combiner by adding the |static
flag to the file name.
Rewrote all front end JavaScripts so they run in "no-conflict" mode, which means you don't have to decide "MooTools or jQuery" anymore but can have them both.
You can now choose jQuery instead of MooTools in the front end. Also, there is
a jQuery mediabox alternative called "colorbox" (template j_colorbox
).
Modified the plugins folder structure to prepare for jQuery support.
Split the models into Model
(single record) and ModelCollection
(multiple
models) to have a "cleaner" implementaion (thanks to Andreas Schempp).
Merged the "registration", "rss_reader" and "tpl_editor" module into the core modules ("backend" and "frontend").
All front end modules of the core modules now use Models.
Added lazy and eager loading of related records to the Model class. Usage:
$objArticle = ArticleModel::findByPk(5);
// The author will be eager loaded (no additional DB query)
echo $objArticle->getRelated('author')->name; // Kevin Jones
// The parent page will be lazy loaded if it is requested
echo $objArticle->getRelated('pid')->title; // Music Academy
Relations are defined in the DCA files.
All core modules are now using namespaces and can thus be overriden.
Ported the news extension into its own namespace. Note that this is completely optional and does not have to be done with your custom modules! I am just doing it so the classes can be overriden by an extension
Use the TemplateLoader in the getTemplate()
and getTemplateGroup()
methods.
Added a merge script (contao/merge.php
) which automatically prepares Contao 2
extensions for Contao 3 by creating the config/autoload.php
file.
Much nicer debug output.
Modules are now disabled by adding a .skip
file instead of using the global
inactiveModules
array. This way the local configuration file does not have to
be included twice in the Config
class.
Moved the Contao framework into the 'library' folder.
Renamed the default configuration file from config.php
to default.php
, so
hopefully less people will try to edit the file directly.
Moved the generated scripts to assets/css
and assets/js
and the thumbnails
to assets/images
. Also moved the feed files into the share
folder.
Renamed the tl_files
directory to files
.