From 7f6e9a2bfc234cd0175fb6d4c292586afbc401c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 19 Aug 2020 12:12:48 +0300 Subject: [PATCH] Added document section: Replacing the Existing Templates. --- docs/en/Module-Development-Basics.md | 2 +- docs/en/Text-Templating.md | 106 ++++++++++++++++++++++++ docs/en/images/replace-email-layout.png | Bin 0 -> 31878 bytes 3 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 docs/en/images/replace-email-layout.png diff --git a/docs/en/Module-Development-Basics.md b/docs/en/Module-Development-Basics.md index 6aac90c294..e6f80233e4 100644 --- a/docs/en/Module-Development-Basics.md +++ b/docs/en/Module-Development-Basics.md @@ -1,4 +1,4 @@ -# Module Development +# Modularity ## Introduction diff --git a/docs/en/Text-Templating.md b/docs/en/Text-Templating.md index 3008db5c41..11a07b8673 100644 --- a/docs/en/Text-Templating.md +++ b/docs/en/Text-Templating.md @@ -380,6 +380,112 @@ The rendering result will be: A global object value: TEST VALUE ```` +## Replacing the Existing Templates + +It is possible to replace a template defined by a module that used in your application. In this way, you can customize the templates based on your requirements without changing the module code. + +### Option-1: Using the Virtual File System + +The [Virtual File System](Virtual-File-System.md) allows you to override any file by placing the same file into the same path in your project. + +#### Example: Replace the Standard Email Layout Template + +ABP Framework provides an [email sending system](Emailing.md) that internally uses the text templating to render the email content. It defines an email layout template in the `/Volo/Abp/Emailing/Templates/Layout.tpl` path. The unique name of the template is `Abp.StandardEmailTemplates.Layout` and this string is defined as a constant on the `Volo.Abp.Emailing.Templates.StandardEmailTemplates` static class. + +Do the following steps to replace the template file with your own; + +**1)** Add a new file into the same location (`/Volo/Abp/Emailing/Templates/Layout.tpl`) in your project: + +![replace-email-layout](images/replace-email-layout.png) + +**2)** Prepare your email layout template: + +````html + + + + + + +

This my header

+ + {%{{{content}}}%} + + + + +```` + +This example simply adds a header and footer to the template and renders the content between them (see the *Layout Templates* section above to understand it). + +**3)** Configure the embedded resources in the `.csproj` file + +* Add [Microsoft.Extensions.FileProviders.Embedded](https://www.nuget.org/packages/Microsoft.Extensions.FileProviders.Embedded) NuGet package to the project. +* Add `true` into the `...` section of your `.csproj` file. +* Add the following code into your `.csproj` file: + +````xml + + + + +```` + +This makes the template files "embedded resource". + +**4)** Configure the virtual file system + +Configure the `AbpVirtualFileSystemOptions` to add embedded files into the virtual file system: + +```csharp +Configure(options => +{ + options.FileSets.AddEmbedded(); +}); +``` + +`BookStoreDomainModule` should be your module name, in this example code. + +> Be sure that your module (directly or indirectly) [depends on](Module-Development-Basics.md) the `AbpEmailingModule`. Because the VFS can override files based on the dependency order. + +Now, your template will be used when you want to render the email layout template. + +### Option-2: Using the Template Definition Provider + +You can create a template definition provider class that gets the email layout template and changes the virtual file path for the template. + +**Example: Use the `/MyTemplates/EmailLayout.tpl` file instead of the standard template** + +```csharp +using Volo.Abp.DependencyInjection; +using Volo.Abp.Emailing.Templates; +using Volo.Abp.TextTemplating; + +namespace MyProject +{ + public class MyTemplateDefinitionProvider + : TemplateDefinitionProvider, ITransientDependency + { + public override void Define(ITemplateDefinitionContext context) + { + var emailLayoutTemplate = context.GetOrNull(StandardEmailTemplates.Layout); + + emailLayoutTemplate + .WithVirtualFilePath( + "/MyTemplates/EmailLayout.tpl", + isInlineLocalized: true + ); + } + } +} +``` + +You should still add the file `/MyTemplates/EmailLayout.tpl` to the virtual file system as explained before. This approach allows you to locate templates in any folder instead of the folder defined by the depended module. + +Beside the template content, you can manipulate the template definition properties, like `DisplayName`, `Layout` or `LocalizationSource`. + ## Advanced Features This section covers some internals and more advanced usages of the text templating system. diff --git a/docs/en/images/replace-email-layout.png b/docs/en/images/replace-email-layout.png new file mode 100644 index 0000000000000000000000000000000000000000..67db895f92a549bb4ddadf1606e6c97737cf5fd9 GIT binary patch literal 31878 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