0

Sitecore.NET 6.4.1 で構築された銀行の既存の Web サイトに取り組んでおり、エイリアスに関するいくつかの問題に遭遇しています。彼らはエイリアスを使用して、銀行員の個人ページによりわかりやすい URL を設定します。例: www.domain.com/bankername は、www.domain.com/About/People/Banker-ID に解決されます。私が抱えている問題は、実際のページにリンクするエイリアス ページがセクション内のすべてのメタ データを継承していないことです。したがって、個々の銀行家 (つまり、タイトルの銀行家名) のパーソナライズされたメタ タグではなく、すべてのサイト全体の既定のメタ タグを取得しています。メタ データは実際の銀行員のページに設定されており、www.domain.com/About/People/Banker-ID にアクセスすると正しく機能します。

リンクされたページのページ コンテンツに加えて、メタ データをエイリアスに継承させる方法はありますか?

public List<string> getmetaDetails()
        {
            List<string> metaDetails = new List<string>();
            string metaTitle = String.Empty;
            string metaDesc = String.Empty;
            string metaKeyword = String.Empty;
            try
            {
                // get root home item
                Sitecore.Data.Items.Item homeItem = Sitecore.Context.Database.GetItem("/sitecore/content/Home");
                Sitecore.Data.Items.Item Item = homeItem;
                // get Page array by url
                string pageUrl = Sitecore.Web.WebUtil.GetRawUrl().TrimStart('/');
                string[] pageArr = pageUrl.Split('/');
                //Removes '?...' after the actual path.
                for(int i=0; i<pageArr.Length; i++) 
                    if (pageArr[i].Contains("?")) pageArr[i] = pageArr[i].Substring(0, pageArr[i].LastIndexOf('?'));


                if (pageArr[0] == "Advice")
                {
                    Sitecore.Data.Items.Item AdviceItem = Sitecore.Context.Database.GetItem("/sitecore/content/Home/Advice");
                    if (AdviceItem != null)
                    {
                        metaTitle = FieldRenderer.Render(AdviceItem, "Meta Title");
                        metaDesc = FieldRenderer.Render(AdviceItem, "Meta Description");
                        metaKeyword = FieldRenderer.Render(AdviceItem, "Meta Keywords");
                    }
                    if (pageArr.Length > 1)
                    {
                        if(!String.IsNullOrEmpty(pageArr[1]))
                        {
                            Feeds feed = new Feeds();
                            List<FeedItem> adviceFeed = new List<FeedItem>();
                            string sql = "SELECT * FROM  `web_feeds` WHERE url='" + pageArr[1] + "'";
                            adviceFeed = feed.getFeedFromDB(sql);
                            if(adviceFeed.Count >0)
                            {
                                metaTitle = adviceFeed[0].title;
                                metaDesc = adviceFeed[0].description;
                                metaKeyword +=","+ adviceFeed[0].tag;
                            }
                        }
                    }
                }
                else
                {
                    // loop threw page array to find the item
                    foreach (string page in pageArr)
                    {
                        Item = getCurrentHomeItem(page, Item);
                        if (Item != null)
                        {
                            metaTitle = FieldRenderer.Render(Item, "Meta Title");
                            metaDesc = FieldRenderer.Render(Item, "Meta Description");
                            metaKeyword = FieldRenderer.Render(Item, "Meta Keywords");

                        }
                    }
                }
                if (String.IsNullOrEmpty(metaTitle)) metaTitle = FieldRenderer.Render(homeItem, "Meta Title");
                if (String.IsNullOrEmpty(metaDesc)) metaDesc = FieldRenderer.Render(homeItem, "Meta Description");
                if (String.IsNullOrEmpty(metaKeyword)) metaKeyword = FieldRenderer.Render(homeItem, "Meta Keywords");
            }
            catch (Exception ex)
            {
                metaTitle = DEFAULT_TITLE;
                metaDesc = DEFAULT_DESC;
                metaKeyword = DEFAULT_KEYWORDS;

            }
            metaDetails.Add(metaTitle);
            metaDetails.Add(metaDesc);
            metaDetails.Add(metaKeyword);

            return metaDetails;

        }
4

1 に答える 1

0

興味のある人のために私が思いついた解決策を次に示します。

        if (Sitecore.Configuration.Settings.AliasesActive &&
            Sitecore.Context.Database.Aliases.Exists(HttpContext.Current.Request.RawUrl))
        {
            //Is an alias
            Item targetItem = Sitecore.Context.Database.GetItem(Sitecore.Context.Database.Aliases.GetTargetID(HttpContext.Current.Request.RawUrl));
            metaTitle = FieldRenderer.Render(targetItem, "Meta Title");
            metaDesc = FieldRenderer.Render(targetItem, "Meta Description");
            metaKeyword = FieldRenderer.Render(targetItem, "Meta Keywords");
        }
于 2013-07-19T21:27:54.393 に答える