diff --git a/docs/en/00_Getting_Started/01_Installation/index.md b/docs/en/00_Getting_Started/01_Installation/index.md index b24991bba..87d4e6c82 100644 --- a/docs/en/00_Getting_Started/01_Installation/index.md +++ b/docs/en/00_Getting_Started/01_Installation/index.md @@ -22,3 +22,6 @@ SilverStripe ships with default rewriting rules specific to your web server. Apa routing requests to the framework, they also prevent access to sensitive files in the webroot, for example YAML configuration files. Please refer to the [secure coding](/developer_guides/security/secure_coding/#filesystem) documentation for details. + +## Related Lessons +* [Up and running: Setting up a local SilverStripe dev environment](https://www.silverstripe.org/learn/lessons/v4/up-and-running-setting-up-a-local-silverstripe-dev-environment-1) \ No newline at end of file diff --git a/docs/en/00_Getting_Started/04_Directory_Structure.md b/docs/en/00_Getting_Started/04_Directory_Structure.md index 5a827d2b1..c9f7ffd41 100644 --- a/docs/en/00_Getting_Started/04_Directory_Structure.md +++ b/docs/en/00_Getting_Started/04_Directory_Structure.md @@ -100,4 +100,4 @@ by using a `flush=1` query parameter. See the ["Manifests" documentation](/devel ## Best Practices ### Making /assets readonly -See [Secure coding](/developer_guides/security/secure_coding#filesystem) +See [Secure coding](/developer_guides/security/secure_coding#filesystem) \ No newline at end of file diff --git a/docs/en/00_Getting_Started/index.md b/docs/en/00_Getting_Started/index.md index 5cb43f81d..2d821e5d2 100644 --- a/docs/en/00_Getting_Started/index.md +++ b/docs/en/00_Getting_Started/index.md @@ -64,6 +64,15 @@ ready for download or installation on a cloud platform. If you run into trouble, see [common-problems](installation/common_problems) or post to the [SilverStripe forums](http://silverstripe.org/community/forums/). -## Related + +## Related Lessons +* [Up and running](https://www.silverstripe.org/learn/lessons/v4/up-and-running-setting-up-a-local-silverstripe-dev-environment-1) +* [Creating your first theme](https://www.silverstripe.org/learn/lessons/v4/creating-your-first-theme-1) +* [Migrating static templates into your theme](https://www.silverstripe.org/learn/lessons/v4/migrating-static-templates-into-your-theme-1) +* [Working with multiple templates](https://www.silverstripe.org/learn/lessons/v4/working-with-multiple-templates-1) + +## Related Documentation * [Module installation](/developer_guides/extending/modules) + + diff --git a/docs/en/01_Tutorials/03_Forms.md b/docs/en/01_Tutorials/03_Forms.md index 271aa6c8a..c150ca6d7 100644 --- a/docs/en/01_Tutorials/03_Forms.md +++ b/docs/en/01_Tutorials/03_Forms.md @@ -403,4 +403,4 @@ We use the normal tactic of putting the data into an unordered list and using CS In this tutorial we have explored custom php forms, and displayed result sets through Grouped Lists. We have briefly covered the different approaches to creating and using forms. Whether you decide to use the [userforms module](http://addons.silverstripe.org/add-ons/silverstripe/userforms) or create a form in PHP depends on the situation and flexibility required. -[Next Tutorial >>](/tutorials/site_search) +[Next Tutorial >>](/tutorials/site_search) \ No newline at end of file diff --git a/docs/en/02_Developer_Guides/00_Model/01_Data_Model_and_ORM.md b/docs/en/02_Developer_Guides/00_Model/01_Data_Model_and_ORM.md index 23e0b44d4..064241149 100644 --- a/docs/en/02_Developer_Guides/00_Model/01_Data_Model_and_ORM.md +++ b/docs/en/02_Developer_Guides/00_Model/01_Data_Model_and_ORM.md @@ -744,6 +744,11 @@ record #2 in Page refers to the same object as record #2 in [SiteTree](api:Silve To retrieve a news article, SilverStripe joins the [SiteTree](api:SilverStripe\CMS\Model\SiteTree), [Page](api:SilverStripe\CMS\Model\SiteTree\Page) and NewsPage tables by their ID fields. +## Related Lessons +* [Introduction to the ORM](https://www.silverstripe.org/learn/lessons/v4/introduction-to-the-orm-1) +* [Adding custom fields to a page](https://www.silverstripe.org/learn/lessons/v4/adding-custom-fields-to-a-page-1) + + ## Related Documentation * [Data Types and Casting](/developer_guides/model/data_types_and_casting) diff --git a/docs/en/02_Developer_Guides/00_Model/02_Relations.md b/docs/en/02_Developer_Guides/00_Model/02_Relations.md index 7397c127b..36661aa98 100644 --- a/docs/en/02_Developer_Guides/00_Model/02_Relations.md +++ b/docs/en/02_Developer_Guides/00_Model/02_Relations.md @@ -479,6 +479,10 @@ As these lists are not backed by the database, most of the filtering methods on this type. As such, an `UnsavedRelationList` should only be used for setting a relation before saving an object, not for displaying the objects contained in the relation. +## Related Lessons +* [Working with data relationships -- has_many](https://www.silverstripe.org/learn/lessons/v4/working-with-data-relationships-has-many-1) +* [Working with data relationships -- many_many](https://www.silverstripe.org/learn/lessons/v4/working-with-data-relationships-many-many-1) + ## Related Documentation * [Introduction to the Data Model and ORM](data_model_and_orm) diff --git a/docs/en/02_Developer_Guides/00_Model/03_Lists.md b/docs/en/02_Developer_Guides/00_Model/03_Lists.md index 71db5466c..a5d56cc8a 100644 --- a/docs/en/02_Developer_Guides/00_Model/03_Lists.md +++ b/docs/en/02_Developer_Guides/00_Model/03_Lists.md @@ -92,6 +92,9 @@ echo $list->Count(); // returns '2' ``` +## Related Lessons +* [Lists and pagination](https://www.silverstripe.org/learn/lessons/v4/lists-and-pagination-1) + ## API Documentation * [SS_List](api:SilverStripe\ORM\SS_List) diff --git a/docs/en/02_Developer_Guides/00_Model/05_Extending_DataObjects.md b/docs/en/02_Developer_Guides/00_Model/05_Extending_DataObjects.md index b35da9a15..5128306ea 100644 --- a/docs/en/02_Developer_Guides/00_Model/05_Extending_DataObjects.md +++ b/docs/en/02_Developer_Guides/00_Model/05_Extending_DataObjects.md @@ -89,3 +89,6 @@ class Player extends DataObject Note: There are no separate methods for *onBeforeCreate* and *onBeforeUpdate*. Please check `$this->isInDb()` to toggle these two modes, as shown in the example above. + +## Related Lessons +* [Working with data relationships - $has_many](https://www.silverstripe.org/learn/lessons/v4/working-with-data-relationships-has-many-1) diff --git a/docs/en/02_Developer_Guides/00_Model/06_SearchFilters.md b/docs/en/02_Developer_Guides/00_Model/06_SearchFilters.md index 0599e9709..2fd1131c9 100644 --- a/docs/en/02_Developer_Guides/00_Model/06_SearchFilters.md +++ b/docs/en/02_Developer_Guides/00_Model/06_SearchFilters.md @@ -61,6 +61,10 @@ $players = Player::get()->filter([ ]); ``` +## Related Lessons +* [Introduction to ModelAdmin](https://www.silverstripe.org/learn/lessons/v4/introduction-to-modeladmin-1) +* [Building a search form](https://www.silverstripe.org/learn/lessons/v4/building-a-search-form-1) + ## API Documentation * [SearchFilter](api:SilverStripe\ORM\Filters\SearchFilter) diff --git a/docs/en/02_Developer_Guides/00_Model/08_SQL_Select.md b/docs/en/02_Developer_Guides/00_Model/08_SQL_Select.md index 887b283dc..dc85ec060 100644 --- a/docs/en/02_Developer_Guides/00_Model/08_SQL_Select.md +++ b/docs/en/02_Developer_Guides/00_Model/08_SQL_Select.md @@ -291,7 +291,11 @@ $players = Player::get(); $map = $players->map('Name', 'NameWithBirthyear'); ``` -## Related +## Related Lessons +* [Building custom SQL](https://www.silverstripe.org/learn/lessons/v4/beyond-the-orm-building-custom-sql-1) + + +## Related Documentation * [Introduction to the Data Model and ORM](data_model_and_orm) diff --git a/docs/en/02_Developer_Guides/01_Templates/01_Syntax.md b/docs/en/02_Developer_Guides/01_Templates/01_Syntax.md index e7cd93381..a360b742c 100644 --- a/docs/en/02_Developer_Guides/01_Templates/01_Syntax.md +++ b/docs/en/02_Developer_Guides/01_Templates/01_Syntax.md @@ -551,7 +551,10 @@ for adding notes for other developers but for things you don't want published in $EditForm <%-- Some hidden comment about the form --%> ``` -## Related +## Related Lessons +* [Creating your first theme](https://www.silverstripe.org/learn/lessons/v4/creating-your-first-theme-1) + +## Related Documentation [CHILDREN] @@ -563,3 +566,5 @@ $EditForm <%-- Some hidden comment about the form --%> * [SSViewer](api:SilverStripe\View\SSViewer) * [ThemeManifest](api:SilverStripe\View\ThemeManifest) + + diff --git a/docs/en/02_Developer_Guides/01_Templates/02_Common_Variables.md b/docs/en/02_Developer_Guides/01_Templates/02_Common_Variables.md index 076336c20..f1260eaf6 100644 --- a/docs/en/02_Developer_Guides/01_Templates/02_Common_Variables.md +++ b/docs/en/02_Developer_Guides/01_Templates/02_Common_Variables.md @@ -365,7 +365,10 @@ Placing it just below `$Content` is a good default. You can add your own forms by implementing new form instances (see the [Forms tutorial](/tutorials/forms)). -## Related +## Related Lessons +* [Adding dynamic content](https://www.silverstripe.org/learn/lessons/v4/adding-dynamic-content-1) + +## Related Documentation * [Casting and Formating Variables](casting) * [Template Inheritance](template_inheritance) diff --git a/docs/en/02_Developer_Guides/01_Templates/03_Requirements.md b/docs/en/02_Developer_Guides/01_Templates/03_Requirements.md index f7c8687ec..2b2ac35d3 100644 --- a/docs/en/02_Developer_Guides/01_Templates/03_Requirements.md +++ b/docs/en/02_Developer_Guides/01_Templates/03_Requirements.md @@ -392,6 +392,10 @@ $file = ModuleResourceLoader::singleton() ->resolveURL('silverstripe/admin:client/dist/images/spinner.gif'); ``` +## Related Lessons +* [Creating your first theme](https://www.silverstripe.org/learn/lessons/v4/creating-your-first-theme-1) +* [AJAX behaviour and ViewableData](https://www.silverstripe.org/learn/lessons/v4/ajax-behaviour-and-viewabledata-1) + ## API Documentation * [Requirements](api:SilverStripe\View\Requirements) diff --git a/docs/en/02_Developer_Guides/01_Templates/04_Rendering_Templates.md b/docs/en/02_Developer_Guides/01_Templates/04_Rendering_Templates.md index 02e4631ad..b907aa573 100644 --- a/docs/en/02_Developer_Guides/01_Templates/04_Rendering_Templates.md +++ b/docs/en/02_Developer_Guides/01_Templates/04_Rendering_Templates.md @@ -99,3 +99,9 @@ class PageController extends ContentController } ``` + +## Related Lessons +* [Controller actions/DataObjects as pages](https://www.silverstripe.org/learn/lessons/v4/controller-actions-dataobjects-as-pages-1) +* [AJAX behaviour and ViewableData](https://www.silverstripe.org/learn/lessons/v4/ajax-behaviour-and-viewabledata-1) +* [Dealing with arbitrary template data](https://www.silverstripe.org/learn/lessons/v4/dealing-with-arbitrary-template-data-1) +* [Creating filtered views](https://www.silverstripe.org/learn/lessons/v4/creating-filtered-views-1) \ No newline at end of file diff --git a/docs/en/02_Developer_Guides/01_Templates/05_Template_Inheritance.md b/docs/en/02_Developer_Guides/01_Templates/05_Template_Inheritance.md index eb6139f18..63d141652 100644 --- a/docs/en/02_Developer_Guides/01_Templates/05_Template_Inheritance.md +++ b/docs/en/02_Developer_Guides/01_Templates/05_Template_Inheritance.md @@ -180,3 +180,6 @@ Module names are derived their local `composer.json` files using the following p * The value of the `name` attribute in `composer.json` * The value of `extras.installer_name` in `composer.json` * The basename of the directory that contains the module + +## Related Lessons +* [Working with multiple templates](https://www.silverstripe.org/learn/lessons/v4/working-with-multiple-templates-1) diff --git a/docs/en/02_Developer_Guides/01_Templates/06_Themes.md b/docs/en/02_Developer_Guides/01_Templates/06_Themes.md index 4b2c1ae76..e2850e74e 100644 --- a/docs/en/02_Developer_Guides/01_Templates/06_Themes.md +++ b/docs/en/02_Developer_Guides/01_Templates/06_Themes.md @@ -103,3 +103,7 @@ The final step is to [submit your theme to Packagist](https://packagist.org/abou * [Themes Listing on silverstripe.org](http://addons.silverstripe.org/add-ons?search=&type=theme) * [Themes Forum on silverstripe.org](https://www.silverstripe.org/community/forums/themes-2/) * [Themes repositories on github.com](http://github.com/silverstripe-themes) + +## Related Lessons +* [Creating your first theme](https://www.silverstripe.org/learn/lessons/v4/creating-your-first-theme-1) +* [Migrating static templates into your theme](https://www.silverstripe.org/learn/lessons/v4/migrating-static-templates-into-your-theme-1) \ No newline at end of file diff --git a/docs/en/02_Developer_Guides/01_Templates/09_Casting.md b/docs/en/02_Developer_Guides/01_Templates/09_Casting.md index 36cac3350..52179c24d 100644 --- a/docs/en/02_Developer_Guides/01_Templates/09_Casting.md +++ b/docs/en/02_Developer_Guides/01_Templates/09_Casting.md @@ -167,3 +167,7 @@ Text / HTMLText methods: version of emails. * `$LimitSentences()` Will limit to the first `` sentences in the content. If called on HTML content this will have all HTML stripped and converted to plain text. + +## Related Lessons +* [Dealing with arbitrary template data](https://www.silverstripe.org/learn/lessons/v4/dealing-with-arbitrary-template-data-1) + diff --git a/docs/en/02_Developer_Guides/01_Templates/How_Tos/02_Pagination.md b/docs/en/02_Developer_Guides/01_Templates/How_Tos/02_Pagination.md index 7dae00134..e10e50623 100644 --- a/docs/en/02_Developer_Guides/01_Templates/How_Tos/02_Pagination.md +++ b/docs/en/02_Developer_Guides/01_Templates/How_Tos/02_Pagination.md @@ -113,6 +113,8 @@ list. | `$Link` | Links to the current controller URL, setting this page as current via a GET parameter | | `$CurrentBool` | Returns true if you're currently on that page | +## Related Lessons +* [Lists and pagination](https://www.silverstripe.org/learn/lessons/v4/lists-and-pagination-1) ## API Documentation diff --git a/docs/en/02_Developer_Guides/01_Templates/index.md b/docs/en/02_Developer_Guides/01_Templates/index.md index f5449c003..d022b85b8 100644 --- a/docs/en/02_Developer_Guides/01_Templates/index.md +++ b/docs/en/02_Developer_Guides/01_Templates/index.md @@ -15,3 +15,6 @@ templates from your controllers. ## How to's [CHILDREN Folder=How_Tos] + +## Related Lessons +* [Migrating static templates into your theme](https://www.silverstripe.org/learn/lessons/v4/migrating-static-templates-into-your-theme-1) \ No newline at end of file diff --git a/docs/en/02_Developer_Guides/02_Controllers/01_Introduction.md b/docs/en/02_Developer_Guides/02_Controllers/01_Introduction.md index a0e01f942..398fc525d 100644 --- a/docs/en/02_Developer_Guides/02_Controllers/01_Introduction.md +++ b/docs/en/02_Developer_Guides/02_Controllers/01_Introduction.md @@ -174,6 +174,10 @@ public function Link($action = null) The [Controller::join_links()](api:SilverStripe\Control\Controller::join_links()) is optional, but makes `Link()` more flexible by allowing an `$action` argument, and concatenates the path segments with slashes. The action should map to a method on your controller. +## Related Lessons +* [Controller actions/DataObjects as pages](https://www.silverstripe.org/learn/lessons/v4/controller-actions-dataobjects-as-pages-1) +* [Creating filtered views](https://www.silverstripe.org/learn/lessons/v4/creating-filtered-views-1) + ## Related Documentation * [Execution Pipeline](../execution_pipeline) diff --git a/docs/en/02_Developer_Guides/02_Controllers/02_Routing.md b/docs/en/02_Developer_Guides/02_Controllers/02_Routing.md index c4dccb298..4cf305a59 100644 --- a/docs/en/02_Developer_Guides/02_Controllers/02_Routing.md +++ b/docs/en/02_Developer_Guides/02_Controllers/02_Routing.md @@ -213,6 +213,9 @@ Director: 'feed': 'FeedController' ``` +## Related Lessons +* [Creating filtered views](https://www.silverstripe.org/learn/lessons/v4/creating-filtered-views-1) +* [Controller actions / DataObjects as pages](https://www.silverstripe.org/learn/lessons/v4/controller-actions-dataobjects-as-pages-1) ## Links * [Controller](api:SilverStripe\Control\Controller) API documentation diff --git a/docs/en/02_Developer_Guides/03_Forms/00_Introduction.md b/docs/en/02_Developer_Guides/03_Forms/00_Introduction.md index d2cc94dfa..7dbd6f057 100644 --- a/docs/en/02_Developer_Guides/03_Forms/00_Introduction.md +++ b/docs/en/02_Developer_Guides/03_Forms/00_Introduction.md @@ -346,6 +346,9 @@ $validator = new SilverStripe\Forms\RequiredFields([ $form = new Form($this, 'MyForm', $fields, $actions, $validator); ``` +## Related Lessons +* [Intoduction to frontend forms](https://www.silverstripe.org/learn/lessons/v4/introduction-to-frontend-forms-1) + ## API Documentation * [Form](api:SilverStripe\Forms\Form) diff --git a/docs/en/02_Developer_Guides/03_Forms/01_Validation.md b/docs/en/02_Developer_Guides/03_Forms/01_Validation.md index b5d6aaa0a..e2d4b3964 100644 --- a/docs/en/02_Developer_Guides/03_Forms/01_Validation.md +++ b/docs/en/02_Developer_Guides/03_Forms/01_Validation.md @@ -307,6 +307,10 @@ class Page extends SiteTree ``` +## Related Lessons +* [Intoduction to frontend forms](https://www.silverstripe.org/learn/lessons/v4/introduction-to-frontend-forms-1) + + ## API Documentation * [RequiredFields](api:SilverStripe\Forms\RequiredFields) diff --git a/docs/en/02_Developer_Guides/04_Configuration/00_Configuration.md b/docs/en/02_Developer_Guides/04_Configuration/00_Configuration.md index bf72c60e8..e0ad2520b 100644 --- a/docs/en/02_Developer_Guides/04_Configuration/00_Configuration.md +++ b/docs/en/02_Developer_Guides/04_Configuration/00_Configuration.md @@ -351,3 +351,6 @@ That is, the fragment will be included if all Only rules match, except if all Ex ## API Documentation * [Config](api:SilverStripe\Core\Config\Config) + +## Related Lessons +* [DataExtensions and SiteConfig](https://www.silverstripe.org/learn/lessons/v4/data-extensions-and-siteconfig-1) diff --git a/docs/en/02_Developer_Guides/04_Configuration/01_SiteConfig.md b/docs/en/02_Developer_Guides/04_Configuration/01_SiteConfig.md index d805d3234..553214f2f 100644 --- a/docs/en/02_Developer_Guides/04_Configuration/01_SiteConfig.md +++ b/docs/en/02_Developer_Guides/04_Configuration/01_SiteConfig.md @@ -81,3 +81,7 @@ provide the users a place to configure settings then the `SiteConfig` panel is t ## API Documentation * [SiteConfig](api:SilverStripe\SiteConfig\SiteConfig) + + +## Related Lessons +* [DataExtensions and SiteConfig](https://www.silverstripe.org/learn/lessons/v4/data-extensions-and-siteconfig-1) diff --git a/docs/en/02_Developer_Guides/04_Configuration/03_Environment_Variables.md b/docs/en/02_Developer_Guides/04_Configuration/03_Environment_Variables.md index 3bf84b7cd..924074ad3 100644 --- a/docs/en/02_Developer_Guides/04_Configuration/03_Environment_Variables.md +++ b/docs/en/02_Developer_Guides/04_Configuration/03_Environment_Variables.md @@ -11,3 +11,7 @@ For more information see our docs on [Environment Management](../../getting_star Data which isn't sensitive that can be in version control but is mostly static such as constants is best suited to be included through the [Configuration API](configuration) based on the standard environment types (dev / test / live). + +## Related Lessons +* [Up and running](https://www.silverstripe.org/learn/lessons/v4/up-and-running-setting-up-a-local-silverstripe-dev-environment-1) +* [Advanced environment configuration](https://www.silverstripe.org/learn/lessons/v4/advanced-environment-configuration-1) \ No newline at end of file diff --git a/docs/en/02_Developer_Guides/05_Extending/01_Extensions.md b/docs/en/02_Developer_Guides/05_Extending/01_Extensions.md index fedd77a8b..81bcdfd30 100644 --- a/docs/en/02_Developer_Guides/05_Extending/01_Extensions.md +++ b/docs/en/02_Developer_Guides/05_Extending/01_Extensions.md @@ -311,6 +311,10 @@ public function getCMSFields() } ``` +## Related Lessons +* [DataExtensions and SiteConfig](https://www.silverstripe.org/learn/lessons/v4/data-extensions-and-siteconfig-1) + + ## Related Documentaion * [Injector](injector/) diff --git a/docs/en/02_Developer_Guides/07_Debugging/00_Environment_Types.md b/docs/en/02_Developer_Guides/07_Debugging/00_Environment_Types.md index fb4e01efd..f47218dcd 100644 --- a/docs/en/02_Developer_Guides/07_Debugging/00_Environment_Types.md +++ b/docs/en/02_Developer_Guides/07_Debugging/00_Environment_Types.md @@ -81,4 +81,5 @@ if (Director::isLive()) { } ``` - +## Related Lessons +* [Advanced environment configuration](https://www.silverstripe.org/learn/lessons/v4/advanced-environment-configuration-1) diff --git a/docs/en/02_Developer_Guides/07_Debugging/01_Error_Handling.md b/docs/en/02_Developer_Guides/07_Debugging/01_Error_Handling.md index 943b5b19f..f78a143f1 100644 --- a/docs/en/02_Developer_Guides/07_Debugging/01_Error_Handling.md +++ b/docs/en/02_Developer_Guides/07_Debugging/01_Error_Handling.md @@ -265,3 +265,6 @@ In SilverStripe 3, logging was based on the Zend Log module. Customisations were This function no longer works, and any Zend Log writers will need to be replaced with Monolog handlers. Fortunately, a range of handlers are available, both in the core package and in add-ons. See the [Monolog documentation](https://github.com/Seldaek/monolog/blob/master/doc/01-usage.md) for more information. + +## Related Lessons +* [Advanced environment configuration](https://www.silverstripe.org/learn/lessons/v4/advanced-environment-configuration-1) diff --git a/docs/en/02_Developer_Guides/14_Files/01_File_Management.md b/docs/en/02_Developer_Guides/14_Files/01_File_Management.md index f9d209a58..957459099 100644 --- a/docs/en/02_Developer_Guides/14_Files/01_File_Management.md +++ b/docs/en/02_Developer_Guides/14_Files/01_File_Management.md @@ -202,3 +202,6 @@ storage. SilverStripe\Assets\File: keep_archived_assets: true ``` + +## Related Lessons +* [Working with files and images](https://www.silverstripe.org/learn/lessons/v4/working-with-files-and-images-1) diff --git a/docs/en/02_Developer_Guides/14_Files/02_Images.md b/docs/en/02_Developer_Guides/14_Files/02_Images.md index 7696a953b..a58c87998 100644 --- a/docs/en/02_Developer_Guides/14_Files/02_Images.md +++ b/docs/en/02_Developer_Guides/14_Files/02_Images.md @@ -214,3 +214,7 @@ SilverStripe\Core\Injector\Injector: * [Image](api:SilverStripe\Assets\Image) * [DBFile](api:SilverStripe\Assets\Storage\DBFile) * [ImageManipulation](api:SilverStripe\Assets\ImageManipulation) + +## Related Lessons +* [Working with files and images](https://www.silverstripe.org/learn/lessons/v4/working-with-files-and-images-1) + diff --git a/docs/en/02_Developer_Guides/15_Customising_the_Admin_Interface/01_ModelAdmin.md b/docs/en/02_Developer_Guides/15_Customising_the_Admin_Interface/01_ModelAdmin.md index e5e794903..f70f884af 100644 --- a/docs/en/02_Developer_Guides/15_Customising_the_Admin_Interface/01_ModelAdmin.md +++ b/docs/en/02_Developer_Guides/15_Customising_the_Admin_Interface/01_ModelAdmin.md @@ -360,6 +360,9 @@ class MyAdmin extends ModelAdmin } ``` +## Related Lessons +* [Intoduction to ModelAdmin](https://www.silverstripe.org/learn/lessons/v4/introduction-to-modeladmin-1) + ## Related Documentation * [GridField](../forms/field_types/gridfield)