From b734bde85b5e839475f51f76eefbad17bcd1a866 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sat, 3 Oct 2020 16:52:32 +0300 Subject: [PATCH 1/4] Typo fix --- docs/en/UI/AspNetCore/Forms-Validation.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/UI/AspNetCore/Forms-Validation.md b/docs/en/UI/AspNetCore/Forms-Validation.md index e62a6dc807..48d7937013 100644 --- a/docs/en/UI/AspNetCore/Forms-Validation.md +++ b/docs/en/UI/AspNetCore/Forms-Validation.md @@ -152,7 +152,7 @@ However, if you want to **render the form body yourself** (for example, you may Both of the Dynamic Form and the Form Tag Helpers **automatically validate** the input based on the data annotation attributes and shows validation error messages on the user interface. Error messages are **automatically localized** based on the current culture. -**Example: User leaves empty a requires string property** +**Example: User leaves empty a required string property** ![abp-form-input-validation-error](../../images/abp-form-input-validation-error.png) @@ -203,4 +203,4 @@ In this case, you can add an entry to the localization file using the key `MyNam ## See Also -* [Server Side Validation](../../Validation.md) \ No newline at end of file +* [Server Side Validation](../../Validation.md) From 9d9f5691fffbd97d3b54ab5dc3037de93e2bfb02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 4 Oct 2020 21:35:37 +0300 Subject: [PATCH 2/4] Documented Navigation Menu --- docs/en/UI/AspNetCore/Navigation-Menu.md | 143 ++++++++++++++++++ .../images/nav-main-menu-administration.png | Bin 0 -> 25300 bytes docs/en/images/nav-main-menu.png | Bin 0 -> 18329 bytes docs/en/images/user-menu.png | Bin 0 -> 9475 bytes 4 files changed, 143 insertions(+) create mode 100644 docs/en/images/nav-main-menu-administration.png create mode 100644 docs/en/images/nav-main-menu.png create mode 100644 docs/en/images/user-menu.png diff --git a/docs/en/UI/AspNetCore/Navigation-Menu.md b/docs/en/UI/AspNetCore/Navigation-Menu.md index 4e0164ec72..4a8db0a6c5 100644 --- a/docs/en/UI/AspNetCore/Navigation-Menu.md +++ b/docs/en/UI/AspNetCore/Navigation-Menu.md @@ -1,3 +1,146 @@ # Navigation Menu +Every application has a main menu to allow users to navigate to pages/screens of the application. Some applications may contain more than one menu in different sections of the UI. + +ABP Framework is a [modular](../../Module-Development-Basics.md) application development framework. **Every module may need to add items to the menu**. + +So, ABP Framework **provides a menu infrastructure** where; + +* The application or the modules can add items to a menu, without knowing how the menu is rendered. +* The [theme](Theming.md) properly renders the menu. + +## Adding Menu Items + +In order to add menu items (or manipulate the existing items) you need to create a class implementing the `IMenuContributor` interface. + +**Example: Add a *CRM* menu item with *Customers* and *Orders* sub menu items** + +```csharp +using System.Threading.Tasks; +using MyProject.Localization; +using Volo.Abp.UI.Navigation; + +namespace MyProject.Web.Menus +{ + public class MyProjectMenuContributor : IMenuContributor + { + public async Task ConfigureMenuAsync(MenuConfigurationContext context) + { + if (context.Menu.Name == StandardMenus.Main) + { + await ConfigureMainMenuAsync(context); + } + } + + private async Task ConfigureMainMenuAsync(MenuConfigurationContext context) + { + var l = context.GetLocalizer(); + + context.Menu.AddItem( + new ApplicationMenuItem("MyProject.Crm", l["Menu:CRM"]) + .AddItem(new ApplicationMenuItem( + name: "MyProject.Crm.Customers", + displayName: l["Menu:Customers"], + url: "/crm/customers") + ).AddItem(new ApplicationMenuItem( + name: "MyProject.Crm.Orders", + displayName: l["Menu:Orders"], + url: "/crm/orders") + ) + ); + } + } +} +``` + +* This example adds items only to the main menu (`StandardMenus.Main`: see the *Standard Menus* section below). +* It gets a `IStringLocalizer` from `context` to localize the display names of the menu items. +* Adds the Customers and Orders as children of the CRM menu. + +Once you create a menu contributor, you need to add it to the `AbpNavigationOptions` in the `ConfigureServices` method of your module: + +````csharp +Configure(options => +{ + options.MenuContributors.Add(new MyProjectMenuContributor()); +}); +```` + +When you run the application, you will see the menu items added to the main menu: + +![nav-main-menu](../../images/nav-main-menu.png) + +> The menu is rendered by the current UI theme. So, the look of the main menu can be completely different based on your theme. + +Here, a few notes on the menu contributors; + +* ABP Framework calls the `ConfigureMenuAsync` method **whenever need to render** the menu. +* Every menu item can have **children**. So, you can add menu items with **unlimited depth** (however, your UI theme may not support unlimited depth). +* Only leaf menu items have `url`s normally. When you click to a parent menu, its sub menu is opened or closed, you don't navigate the `url` of a parent menu item. +* If a menu item has no children and has no `url` defined, then it is not rendered on the UI. This simplifies to authorize the menu items: You only authorize the child items (see the next section). If none of the children are authorized, then the parent automatically disappears. + +### Authorization + +As seen above, a menu contributor contributes to the menu dynamically. So, you can perform any custom logic or get menu items from any source. + +One use case is the [authorization](Authorization.md). You typically want to add menu items by checking a permission. + +**Example: Check if the current user has a permission** + +````csharp +if (await context.IsGrantedAsync("MyPermissionName")) +{ + //...add menu items +} +```` + +> You can use `context.AuthorizationService` to directly access to the `IAuthorizationService`. + +### Resolving Dependencies + +`context.ServiceProvider` can be used to resolve any service dependency. + +**Example: Get a service** + +````csharp +var myService = context.ServiceProvider.GetRequiredService(); +//...use the service +```` + +> You don't need to care about releasing/disposing services. ABP Framework handles it. + +### The Administration Menu + +There is a special menu item in the menu menu that is added by the ABP Framework: The *Administration* menu. It is typically used by the pre-built admin [application modules](../../Modules/Index.md): + +![nav-main-menu-administration](../../images/nav-main-menu-administration.png) + +If you want to add menu items under the *Administration* menu item, you can use the `context.Menu.GetAdministration()` extension method: + +````csharp +context.Menu.GetAdministration().AddItem(...) +```` + +## Standard Menus + +A menu is a **named** component. An application may contain more than one menus with different, unique names. There are two pre-defined standard menus: + +* `Main`: The main menu of the application. Contains links to the page of the application. Defined as a constant: `Volo.Abp.UI.Navigation.StandardMenus.Main`. +* `User`: User profile menu. Defined as a constant: `Volo.Abp.UI.Navigation.StandardMenus.User`. + +The `Main` menu already covered above. The `User` menu is available when a user has logged in: + +![user-menu](../../images/user-menu.png) + +You can add items to the `User` menu by checking the `context.Menu.Name` as shown below: + +```csharp +if (context.Menu.Name == StandardMenus.User) +{ + //...add items +} +``` + +## IMenuManager + TODO \ No newline at end of file diff --git a/docs/en/images/nav-main-menu-administration.png b/docs/en/images/nav-main-menu-administration.png new file mode 100644 index 0000000000000000000000000000000000000000..21ad977264aa77f6e0ecb1d622e237091f00f226 GIT binary patch literal 25300 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 z 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 XIOtD~`@2&h!UieGs7jZDP5l24ZGoOr literal 0 HcmV?d00001 diff --git a/docs/en/images/nav-main-menu.png b/docs/en/images/nav-main-menu.png new file mode 100644 index 0000000000000000000000000000000000000000..2784c035c2535de6e3afc6b49b56576df30a4753 GIT binary patch literal 18329 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 literal 0 HcmV?d00001 diff --git a/docs/en/images/user-menu.png b/docs/en/images/user-menu.png new file mode 100644 index 0000000000000000000000000000000000000000..af0671dbdc4119f5ce1eeb6f7429ef0b4e09f01c GIT binary patch literal 9475 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 WZ~08i{h_M~P?mouS1oH9{yzXuIeS Date: Sun, 4 Oct 2020 21:56:04 +0300 Subject: [PATCH 3/4] Added Menu Item Properties and IMenuManager sections --- docs/en/UI/AspNetCore/Navigation-Menu.md | 51 ++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/docs/en/UI/AspNetCore/Navigation-Menu.md b/docs/en/UI/AspNetCore/Navigation-Menu.md index 4a8db0a6c5..f10d907512 100644 --- a/docs/en/UI/AspNetCore/Navigation-Menu.md +++ b/docs/en/UI/AspNetCore/Navigation-Menu.md @@ -1,4 +1,4 @@ -# Navigation Menu +# ASP.NET Core MVC / Razor Pages UI: Navigation Menu Every application has a main menu to allow users to navigate to pages/screens of the application. Some applications may contain more than one menu in different sections of the UI. @@ -54,7 +54,7 @@ namespace MyProject.Web.Menus ``` * This example adds items only to the main menu (`StandardMenus.Main`: see the *Standard Menus* section below). -* It gets a `IStringLocalizer` from `context` to localize the display names of the menu items. +* It gets a `IStringLocalizer` from `context` to [localize](../../Localization.md) the display names of the menu items. * Adds the Customers and Orders as children of the CRM menu. Once you create a menu contributor, you need to add it to the `AbpNavigationOptions` in the `ConfigureServices` method of your module: @@ -79,6 +79,20 @@ Here, a few notes on the menu contributors; * Only leaf menu items have `url`s normally. When you click to a parent menu, its sub menu is opened or closed, you don't navigate the `url` of a parent menu item. * If a menu item has no children and has no `url` defined, then it is not rendered on the UI. This simplifies to authorize the menu items: You only authorize the child items (see the next section). If none of the children are authorized, then the parent automatically disappears. +### Menu Item Properties + +There are more options of a menu item (the constructor of the `ApplicationMenuItem` class). Here, the list of all available options; + +* `name` (`string`, required): The unique name of the menu item. +* `displayName` (`string`, required): Display name/text of the menu item. You can [localize](../../Localization.md) this as shown before. +* `url` (`string`): The URL of the menu item. +* `icon` (`string`): An icon name. Free [Font Awesome](https://fontawesome.com/) icon classes are supported out of the box. Example: `fa fa-book`. You can use any CSS font icon class as long as you include the necessary CSS files to your application. +* `order` (`int`): The order of the menu item. Default value is `1000`. Items are sorted by the adding order unless you specify an order value. +* `customData` (`object`): A custom object that you can associate to the menu item and use it while rendering the menu item. +* `target` (`string`): Target of the menu item. Can be `null` (default), "_blank", "_*self*", "_parent", "_*top*" or a frame name for web applications. +* `elementId` (`string`): Can be used to render the element with a specific HTML `id` attribute. +* `cssClass` (`string`): Additional string classes for the menu item. + ### Authorization As seen above, a menu contributor contributes to the menu dynamically. So, you can perform any custom logic or get menu items from any source. @@ -143,4 +157,35 @@ if (context.Menu.Name == StandardMenus.User) ## IMenuManager -TODO \ No newline at end of file +`IMenuManager` is generally used by the UI [theme](Theming.md) to render the menu items on the UI. So, **you generally don't need to directly use** the `IMenuManager`. + +**Example: Getting the `Main` menu items** + +```csharp +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Volo.Abp.UI.Navigation; + +namespace MyProject.Web.Pages +{ + public class IndexModel : PageModel + { + private readonly IMenuManager _menuManager; + + public IndexModel(IMenuManager menuManager) + { + _menuManager = menuManager; + } + + public async Task OnGetAsync() + { + var mainMenu = await _menuManager.GetAsync(StandardMenus.Main); + + foreach (var menuItem in mainMenu.Items) + { + //... + } + } + } +} +``` \ No newline at end of file From d93b3c1749657f0b8b90db7cd0b8ccf3e77a9619 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 4 Oct 2020 22:02:59 +0300 Subject: [PATCH 4/4] Update Navigation-Menu.md --- docs/en/UI/AspNetCore/Navigation-Menu.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/docs/en/UI/AspNetCore/Navigation-Menu.md b/docs/en/UI/AspNetCore/Navigation-Menu.md index f10d907512..ddbfbbd857 100644 --- a/docs/en/UI/AspNetCore/Navigation-Menu.md +++ b/docs/en/UI/AspNetCore/Navigation-Menu.md @@ -135,6 +135,19 @@ If you want to add menu items under the *Administration* menu item, you can use context.Menu.GetAdministration().AddItem(...) ```` +### Manipulating the Existing Menu Items + +ABP Framework executes the menu contributors by the [module dependency order](../../Module-Development-Basics.md). So, you can manipulate the menu items that your application or module (directly or indirectly) depends on. + +**Example: Set an icon for the `Users` menu item added by the [Identity Module](../../Modules/Identity.md)** + +````csharp +var userMenu = context.Menu.FindMenuItem(IdentityMenuNames.Users); +userMenu.Icon = "fa fa-users"; +```` + +> `context.Menu` gives you ability to access to all the menu items those have been added by the previous menu contributors. + ## Standard Menus A menu is a **named** component. An application may contain more than one menus with different, unique names. There are two pre-defined standard menus: @@ -188,4 +201,5 @@ namespace MyProject.Web.Pages } } } -``` \ No newline at end of file +``` +