Sitecore EXM電子メールコンポーネントにリンクを表示する方法を理解するのが難しいです。コンポーネントMVCのSitecoreのリンクリストをレンダリングする
私はSitecore MVCコントローラレンダリングを使用しています。私は基本的にSitecore EXMプラットフォームでデフォルトとして提供されるメインセクションコンポーネントを複製しようとしています。
using Sitecore.Links;
using Sitecore.Mvc.Presentation;
using Sitecore.Web.UI.WebControls;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using TestSitecore.Models;
using TestSitecore.Models.MVCEmailModels;
using Sitecore.Data.Items;
using Sitecore.Collections;
namespace TestSitecore.Repositories
{
public class MainSectionMVCRepository
{
public MainSectionMVC GetMainSectionMVC()
{
var mainSectionMVC = new MainSectionMVC();
var rendering = RenderingContext.Current.Rendering;
var dataSource = rendering.Item;
mainSectionMVC.Title = new HtmlString(FieldRenderer.Render(dataSource, Constants.FIELD_TITLE));
mainSectionMVC.Text = new HtmlString(FieldRenderer.Render(dataSource, Constants.FIELD_TEXT));
mainSectionMVC.Image = new HtmlString(FieldRenderer.Render(dataSource, Constants.FIELD_IMAGE));
mainSectionMVC.Links = GetLinks(dataSource);
return mainSectionMVC;
}
private List<Item> GetLinks(Item dataSource)
{
List<Item> links = new List<Item>();
// I need to get access the the Links that are attached to the datasource item ???? How to do this
return links;
}
public MainSectionMVCViewModel GetMainSectionMVCViewModel(MainSectionMVC mainSectionMVC)
{
var viewModel = new MainSectionMVCViewModel();
var rendering = RenderingContext.Current.Rendering;
//viewModel.Background = rendering.Parameters["Background"];
viewModel.ContextItem = PageContext.Current.Item;
viewModel.MainSectionMVC = mainSectionMVC;
return viewModel;
}
}
}
とモデルMainSectionMVC.cs:
using Sitecore.Data.Items;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace TestSitecore.Models.MVCEmailModels
{
public class MainSectionMVC
{
public HtmlString Title { get; set; }
public HtmlString Image { get; set; }
public HtmlString Text { get; set; }
public List<Item> Links { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using TestSitecore.Repositories;
namespace TestSitecore.Controllers
{
public class MainSectionMVCController : Controller
{
// GET: MainSectionMVC
public ActionResult Index()
{
var repository = new MainSectionMVCRepository();
var mainSectionMVC = repository.GetMainSectionMVC();
var mainSectionMVCViewModel = repository.GetMainSectionMVCViewModel(mainSectionMVC);
return View(mainSectionMVCViewModel);
}
}
}
私はリポジトリMainSectionMVCRepository.csを持っている:私は、コントローラMainSectionMVCController.csを持っているとそう
を開始します
私はViewModel MainSectionMVCViewModel.csを持っています:
using Sitecore.Data.Items;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace TestSitecore.Models.MVCEmailModels
{
public class MainSectionMVCViewModel
{
public MainSectionMVC MainSectionMVC { get; set; }
public string Background { get; set; }
public Item ContextItem { get; set; }
}
}
、最終的に私は、コントローラのindexアクションにリンクされてIndex.cshtmlあります
@using Sitecore.Mvc
@using Sitecore.Data.Items
@using Sitecore.Web.UI.WebControls;
@using TestSitecore.Models
@using TestSitecore.Models.MVCEmailModels
@model MainSectionMVCViewModel
<div class="highlight">
<div class="row">
<div class="col-md-2 col-lg-2"></div>
<div class="col-md-5 col-lg-5">
<h2>@Model.MainSectionMVC.Title</h2>
</div>
<div class="col-md-3 col-lg-3" style="align-content: center">
@Model.MainSectionMVC.Image
</div>
<div class="col-md-2 col-lg-2"></div>
</div>
<div class="row">
<div class="col-md-8 col-lg-8">
<h2>@Model.MainSectionMVC.Text</h2>
</div>
<div class="col-md-4 col-lg-4"></div>
</div>
<div class="row">
<!--DISPLAY THE LINKS HERE-->
</div>
</div>
私の問題は私のリポジトリ内のリンクのリストを移入して、レンダリングする方法であります私のコンポーネントの出力。
Sitecoreのリンクアイテムからテンプレートを見ると、データ定義にテキストと宛先の2つのフィールドが含まれていることがわかります。
したがって、テキストフィールドはリンクの表示テキストとして使用され、宛先は実際にはItemPath/ItemIDです。
私は試してみましたvar children = dataSource.GetChildren();
これは私に親アイテム(メインセクション)のすべての子を取得します。現時点では、リンクのみがメインセクションアイテムの子アイテムになることができますが、コンポーネントテンプレートが変更されている場合は変更される可能性があります。
子供のアイテムがリンクかどうかをテストするのに適した方法を見つけるのに苦労しました。したがって、アイテムタイプをテストする上でのヒントも理解できます。
すべてのアイデア?