Important Note: This documentation is for Concrete version 8 and above. For parts of this documentation in version and earlier, please refer to this document about autoloading.

There are times when you're working on a Concrete CMS site that you'll need to accomplish a task with code that Concrete doesn't contain. Sometimes you'll be able to accomplish this with a core extension, like a custom block type (either included in the application directory, or in a package), custom page template or custom element. However, sometimes you'll need a custom code. For example, let's consider the example of a page type controller (you can find more information on how to create custom page type controllers here). Within my custom page type controller view method, I want to retrieve a list of posts.

I could use the Concrete\Core\Page\PageList class, but what if I wanted to extend the page list class with a class that already took care of filtering pages in a certain way. I need a new custom class that extends the Concrete\Core\Page\PageList class. How do I create this class, and more importantly, where do I put it in the Concrete filesystem so that it will autoload correctly?

Let's read on for more information.