Episerver Development Fundamentals learning path
- Module 1 - Getting Started
- Module 2 - Pages, content types and properties
- Module 3 - Rendering
- Module 4 - Blocks
- Module 5 - Listing & Menu Controls
- Module 6 - Search & Filter
- Module 7 - Administration tools
-
Install 'Episerver CMS Visual Studio Extension'
Useful links:
https://marketplace.visualstudio.com/items?itemName=EPiServer.EpiserverCMSVisualStudioExtension
-
Install Alloy MVC site
Notes: Change search to 'Episerver Search'
Please be aware that Alloy is not always an example of "best practices", more an example of what you CAN do rather than what you SHOULD do.
Alloy has quite a lot of examples of special content rendering, however there are no documentation on why, how or exactly which code is related to which functionality.
The articles below helps to better understand Allow template.
Useful links:
https://world.episerver.com/documentation/Items/Installation-Instructions/installing-episerver/
https://world.episerver.com/articles/Items/ASPNET-MVC-Templates-for-EPiServer-7-CMS/
https://world.episerver.com/Articles/Items/Alloy-Templates-for-EPiServer-CMS-7/
http://joelabrahamsson.com/episerver-and-mvc-what-is-the-view-model/
-
Alloy template should be used to learn editing concept
Read the manual below
Useful links:
https://world.episerver.com/documentation/developer-guides/CMS/getting-started/learn-basic-editing/
http://webhelp.episerver.com/latest/getting-started/user-interface.htm
http://webhelp.episerver.com/latest/getting-started/on-page-edit-view.htm
http://webhelp.episerver.com/latest/cms-admin/administration-view.htm
http://webhelp.episerver.com/latest/getting-started/logging-in.htm
http://webhelp.episerver.com/latest/cms-edit/managing-content.htm
http://webhelp.episerver.com/latest/cms-admin/access-rights.htm
-
Create new site with next structure:
- Start page (StartPage type)
- Article page 1 (ArticlePage type)
- Article page 2 (ArticlePage type)
- Pages should inherit functionality from base page:
- Robots (string)
- OpenGraphTitle (string)
- OpenGraphMedia (ContentReference)
- Article page type should has 'XHTML string' property
Tasks:
- Use empty template for this project
- Start page must be configured as start page for the site (Manage Websites in the application admin page)
- Generate and add license file
- Base layout should be created (render data for metadata)
Useful links:
https://docs.microsoft.com/en-us/aspnet/core/mvc/views/overview
https://world.episerver.com/documentation/developer-guides/CMS/Content/Attributes/
-
Tasks:
- Create type for images (Copyright and Description fields)
- Create separate type for documents (Description field)
- Changing the maximum upload file size
Useful links:
-
Tasks:
- Add 'Edit HTML Source' button
- Change styles drop down
- Localize a styles menu
- Check in edit mode with different UI language that localization of the TinyMCE dropdown editor works.
Useful links:
-
Tasks:
- Add simple menu and navigation
- Menu should contains two levels
- Include menu model to layout model (implement IResultFilter)
(to avoid population in each page controller)
Example of navigation menu implementation could be found in EPiServer demo project(Alloy) or check jondjones.com (could be found in useful links below)
Useful links:
-
Tasks:
- Create new page programmatically under start page
- Update any field on the existing article page by clicking on button
Useful links:
-
Tasks:
- Add a Content Area to the Start Page.
- Create Partial View and Controller for the ContentPage.
Note. ContentPage must be used as normal page and in ContentArea on StartPage
Useful links:
-
Tasks:
- Register new Mobile Channel.
- Create special mobile template for a page.
- Check that a page is rendering using new template in preview mode when "mobile" channel is selected.
Useful links:
https://world.episerver.com/documentation/developer-guides/CMS/rendering/display-channels/
-
Tasks:
- Add second Content Area to the Start Page.
- Render content area with specific tag.
- Create partial template for a page which is displayed only in content area with specific tag.
Useful links:
https://world.episerver.com/documentation/developer-guides/CMS/rendering/selecting-templates/
-
Tasks:
- Add a block type using vs extension.
- Add Title, Description and Image properties to the block.
- Add partial view for the block.
- Create a shared block instance based on the new block type.
- Add shared block to the content area on the start page.
Useful links:
https://world.episerver.com/documentation/developer-guides/CMS/Content/Block-types-and-templates/
-
Tasks:
- Create a preview controller for block.
- Create a preview template for blocks.
Useful links:
-
Tasks:
- Add a local block to the StandardPage type.
- Add rendering of the local block to the corresponding page template.
- Populate the block in edit mode and check how it is rendered.
Useful links:
http://joelabrahamsson.com/working-programmatically-with-local-blocks-in-episerver-7/
-
Tasks:
- Add a new Block Type with "Root" property.
- Create the Block template.
-
Tasks:
- Add a News Page page type.
- Create new Layout with left navigation for child pages.
- News page should allow to create only News Item pages under it.
Useful links:
https://world.episerver.com/documentation/developer-guides/CMS/Content/Attributes/
-
Tasks:
- Create a new "PageList" block which can display pages of specific type under a specific content root node recursively.
Use PageCriteriaQueryService to implement search functionality.
Create an instance of the block to display list of all news articles under specific news list page. - Compare FindPagesWithCriteria with FindAllPagesWithCriteria method of the PageCriteriaQueryService.
Create a job to show a list of all unpublished news articles on the site in the job result.
Useful links:
- Create a new "PageList" block which can display pages of specific type under a specific content root node recursively.
-
Tasks:
- Add new page type and a template for the Search page.
- Implement search logic in a new SearchService using out the box Episerver.Search functionality.
Search should be able to find pages and media files in a specific language by text search query . - Additionally implement the same search logic using Episerver.Find.
Useful links:
https://world.episerver.com/documentation/developer-guides/CMS/search/
https://world.episerver.com/documentation/developer-guides/find/
-
Tasks:
Note! You can skip points a and d if you have Administrator account and able to access admin interface.
- Add new user to the existing database
- Disable authorization by changing web.config file
- Create WebAdmins and WebEditors Roles if they doesn't exists
- Create new user and assign him WebAdmins and WebEditors Roles
- Revert web.config to previous state
Useful links:
http://webhelp.episerver.com/17-5/cms-admin/managing-users-groups.htm
https://www.dcaric.com/blog/episerver-how-to-create-admin-users-from-the-code
- Add new user to the existing database
-
Tasks:
- Create Scheduled jobs with cancel possibility
- Setup initial parameters (schedule) for the job
Useful links:
https://world.episerver.com/documentation/developer-guides/CMS/scheduled-jobs/
-
Tasks:
- Create custom plugin for administration area using MVC
- Add button with EPiServer styles to the admin plugin
Useful links:
https://www.dcaric.com/blog/episerver-how-to-create-gui-plugins-using-mvc
https://www.epinova.no/en/blog/creating-a-consistent-look-in-episerver-plugins/
-
Tasks:
- Create custom report
Useful links:
-
Tasks:
- Localize Tabs
- Localize property name
- Localize Scheduler job name and description
- Change page icon in the tree (UI descriptors)
- Change tabs order using ITabDefinitionRepository and GroupDefinitions attribute. What is the difference between these two ways.
Useful links:
- Change property name and create migration step
- Create several templates for one content (Block or Page)
- Add a block preview template (also implement default preview for all blocks)
- Working with shared blocks programmatically (create and initialize properties)
- Working with media data programmatically (import images, BLOBs provider)
- Store data in the Dynamic Data Store (DDS)