如果由于权限,在Sitecore多列表中选择隐藏[未找到项目]的方法吗?

野性

我们的Sitecore内容树通常分为全球和本地(或特定于国家/地区)页面,以服务我们分支机构的客户。如您所料,无论页面的地理位置如何,都会向我们网站的所有查看者显示全局页面,但是我们在全局页面上实现了可本地化的某些字段,例如横幅广告,特色内容等。

我们已经设置了安全性,以便对于多列表,给定的内容编辑器仅在左侧可以访问的项目中看到它们。我们遇到的事情是,其他分支内容编辑器选择的项目显示在多列表的右侧“选定”区域中,如果当前正在查看该项目的内容编辑器对此没有权限,它们显示为[找不到项目]。我们有好主意的内容编辑器错误地双击了这些内容以将其删除,而没有意识到他们正在删除其他编辑器故意放置在其中的内容。下面是使用我们的德语内容编辑器的视图截屏的屏幕截图:

未找到项目演示的示例

我要确定的是,是否存在一种使用安全性或其他方法来完全抑制当前内容编辑器没有权限的项目的[找不到项目]消息的方法。任何提示这样做的好方法(如果可行)将不胜感激。

马雷克·穆西拉克(Marek Musielak)

您可以创建Multilist继承自Sitecore.Shell.Applications.ContentEditor.MultilistEx该类的类,并重写该类的DoRender()方法。[Item Not Found]显示文本的地方,检查项目是否存在,但用户没有访问权限(通过尝试使用检索项目SecurityDisabler),并显示正确的消息。

然后,您需要进入core数据库并注册您的字段类型:

sitecore我的多名单前

最后将您的字段类型切换为新创建的类型-您的字段将如下所示:

sitecore自定义多列表字段结果

以下代码是MultilistEx您需要更改的原始反映代码:

using System.Collections;
using System.Web.UI;
using Sitecore;
using Sitecore.Data.Items;
using Sitecore.Diagnostics;
using Sitecore.Globalization;
using Sitecore.Resources;
using Sitecore.SecurityModel;

namespace My.Assembly.Namespace
{
    public class MyMultilistEx : Sitecore.Shell.Applications.ContentEditor.MultilistEx
    {
        protected override void DoRender(HtmlTextWriter output)
        {
            Assert.ArgumentNotNull(output, "output");
            ArrayList selected;
            IDictionary unselected;
            GetSelectedItems(GetItems(Sitecore.Context.ContentDatabase.GetItem(ItemID)), out selected, out unselected);
            ServerProperties["ID"] = ID;
            string disabledMessage = string.Empty;
            if (ReadOnly)
                disabledMessage = " disabled=\"disabled\"";
            output.Write("<input id=\"" + ID + "_Value\" type=\"hidden\" value=\"" + StringUtil.EscapeQuote(Value) + "\" />");
            output.Write("<table" + GetControlAttributes() + ">");
            output.Write("<tr>");
            output.Write("<td class=\"scContentControlMultilistCaption\" width=\"50%\">" + Translate.Text("All") + "</td>");
            output.Write("<td width=\"20\">" + Images.GetSpacer(20, 1) + "</td>");
            output.Write("<td class=\"scContentControlMultilistCaption\" width=\"50%\">" + Translate.Text("Selected") + "</td>");
            output.Write("<td width=\"20\">" + Images.GetSpacer(20, 1) + "</td>");
            output.Write("</tr>");
            output.Write("<tr>");
            output.Write("<td valign=\"top\" height=\"100%\">");
            output.Write("<select id=\"" + ID + "_unselected\" class=\"scContentControlMultilistBox\" multiple=\"multiple\" size=\"10\"" + disabledMessage + " ondblclick=\"javascript:scContent.multilistMoveRight('" + ID + "')\" onchange=\"javascript:document.getElementById('" + ID + "_all_help').innerHTML=selectedIndex>=0?options[selectedIndex].innerHTML:''\" >");
            foreach (DictionaryEntry dictionaryEntry in unselected)
            {
                Item unselectedItem = dictionaryEntry.Value as Item;
                if (unselectedItem != null)
                    output.Write("<option value=\"" + GetItemValue(unselectedItem) + "\">" + unselectedItem.DisplayName + "</option>");
            }
            output.Write("</select>");
            output.Write("</td>");
            output.Write("<td valign=\"top\">");
            RenderButton(output, "Core/16x16/arrow_blue_right.png", "javascript:scContent.multilistMoveRight('" + ID + "')");
            output.Write("<br />");
            RenderButton(output, "Core/16x16/arrow_blue_left.png", "javascript:scContent.multilistMoveLeft('" + ID + "')");
            output.Write("</td>");
            output.Write("<td valign=\"top\" height=\"100%\">");
            output.Write("<select id=\"" + ID + "_selected\" class=\"scContentControlMultilistBox\" multiple=\"multiple\" size=\"10\"" + disabledMessage + " ondblclick=\"javascript:scContent.multilistMoveLeft('" + ID + "')\" onchange=\"javascript:document.getElementById('" + ID + "_selected_help').innerHTML=selectedIndex>=0?options[selectedIndex].innerHTML:''\">");
            for (int index = 0; index < selected.Count; ++index)
            {
                Item selectedItem = selected[index] as Item;
                if (selectedItem != null)
                {
                    output.Write("<option value=\"" + GetItemValue(selectedItem) + "\">" + selectedItem.DisplayName + "</option>");
                }
                else
                {
                    string path = selected[index] as string;
                    if (path != null)
                    {
                        string optionDisabled = string.Empty;
                        Item linkedItem = Sitecore.Context.ContentDatabase.GetItem(path);
                        Item notAccessibleItem;
                        using (new SecurityDisabler())
                        {
                            notAccessibleItem = Sitecore.Context.ContentDatabase.GetItem(path);
                        }

                        string text;

                        if (linkedItem == null && notAccessibleItem != null)
                        {
                            text = notAccessibleItem.DisplayName + " [You don't have access rights to this item]";
                            optionDisabled = " disabled=\"disabled\"";
                        }
                        else
                        {
                            text = linkedItem == null
                                              ? path + ' ' + Translate.Text("[Item not found]")
                                              : linkedItem.DisplayName + ' ' + Translate.Text("[Not in the selection List]");
                        }
                        output.Write("<option value=\"" + path + "\"" + optionDisabled + ">" + text + "</option>");
                    }
                }
            }
            output.Write("</select>");
            output.Write("</td>");
            output.Write("<td valign=\"top\">");
            RenderButton(output, "Core/16x16/arrow_blue_up.png", "javascript:scContent.multilistMoveUp('" + ID + "')");
            output.Write("<br />");
            RenderButton(output, "Core/16x16/arrow_blue_down.png", "javascript:scContent.multilistMoveDown('" + ID + "')");
            output.Write("</td>");
            output.Write("</tr>");
            output.Write("<tr>");
            output.Write("<td valign=\"top\">");
            output.Write("<div style=\"border:1px solid #999999;font:8pt tahoma;padding:2px;margin:4px 0px 4px 0px;height:14px\" id=\"" + ID + "_all_help\"></div>");
            output.Write("</td>");
            output.Write("<td></td>");
            output.Write("<td valign=\"top\">");
            output.Write("<div style=\"border:1px solid #999999;font:8pt tahoma;padding:2px;margin:4px 0px 4px 0px;height:14px\" id=\"" + ID + "_selected_help\"></div>");
            output.Write("</td>");
            output.Write("<td></td>");
            output.Write("</tr>");
            output.Write("</table>");
        }

        private void RenderButton(HtmlTextWriter output, string icon, string click)
        {
            Assert.ArgumentNotNull(output, "output");
            Assert.ArgumentNotNull(icon, "icon");
            Assert.ArgumentNotNull(click, "click");
            ImageBuilder imageBuilder = new ImageBuilder();
            imageBuilder.Src = icon;
            imageBuilder.Width = 16;
            imageBuilder.Height = 16;
            imageBuilder.Margin = "2px";
            if (!ReadOnly)
                imageBuilder.OnClick = click;
            output.Write((imageBuilder).ToString());
        }

    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何根据下拉列表中选择的项目在隐藏字段中设置值

来自分类Dev

如果在选择框中选择了相关项目,则打开隐藏的div

来自分类Dev

来自多列表中选定项目的Sitecore数据源

来自分类Dev

由于Laravel项目的权限,覆盖文件失败

来自分类Dev

从列表中选择项目

来自分类Dev

在列表中找到项目的ContiguousCount?

来自分类Dev

从列表框中选择一个项目,然后使用该项目的名称

来自分类Dev

用户在emberjs 2中选择项目时隐藏列表

来自分类Dev

从列表中选择随机项目,并给出每个项目的概率

来自分类Dev

在具有DOM的列表中选择项目的最后一个元素

来自分类Dev

如果我的条件匹配,如何从另一个列表中选择项目?

来自分类Dev

如何找到从第一个列表中选择一个项目以及从第二个列表中选择最多n个项目的所有组合

来自分类Dev

从列表中选择特定项目

来自分类Dev

如何找到在列表框中选择的项目数量?

来自分类Dev

从列表中选择的最佳方法

来自分类Dev

如何在vb.net的列表框中选择项目的值和名称

来自分类Dev

在TabHost设置中选择容器,“未找到ID的视图”

来自分类Dev

如果在选择框中选择了相关项目,则打开隐藏的div

来自分类Dev

从变量列表中找到项目的最佳方法

来自分类Dev

用户从列表中选择项目时如何隐藏列表?

来自分类Dev

从包含从自动完成的文本框中选择的项目的列表中删除项目

来自分类Dev

从别名子查询中选择时,“如果选择DISTINCT,则ORDER BY项目必须出现在选择列表中”

来自分类Dev

在列表中找到项目的ContiguousCount?

来自分类Dev

从列表框中选择一个项目,然后使用该项目的名称

来自分类Dev

如果在列表中未找到类别,则为Excel求和值(更好的编码方法)

来自分类Dev

从带有列表的 6 个变量中选择随机项目的最简单方法是什么

来自分类Dev

从列表列表中选择项目

来自分类Dev

对列表框中选择的每个项目调用一个方法。我需要以编程方式调用每个项目的方法,

来自分类Dev

Nginx 未找到文件,但从 mysql 中选择信息

Related 相关文章

  1. 1

    如何根据下拉列表中选择的项目在隐藏字段中设置值

  2. 2

    如果在选择框中选择了相关项目,则打开隐藏的div

  3. 3

    来自多列表中选定项目的Sitecore数据源

  4. 4

    由于Laravel项目的权限,覆盖文件失败

  5. 5

    从列表中选择项目

  6. 6

    在列表中找到项目的ContiguousCount?

  7. 7

    从列表框中选择一个项目,然后使用该项目的名称

  8. 8

    用户在emberjs 2中选择项目时隐藏列表

  9. 9

    从列表中选择随机项目,并给出每个项目的概率

  10. 10

    在具有DOM的列表中选择项目的最后一个元素

  11. 11

    如果我的条件匹配,如何从另一个列表中选择项目?

  12. 12

    如何找到从第一个列表中选择一个项目以及从第二个列表中选择最多n个项目的所有组合

  13. 13

    从列表中选择特定项目

  14. 14

    如何找到在列表框中选择的项目数量?

  15. 15

    从列表中选择的最佳方法

  16. 16

    如何在vb.net的列表框中选择项目的值和名称

  17. 17

    在TabHost设置中选择容器,“未找到ID的视图”

  18. 18

    如果在选择框中选择了相关项目,则打开隐藏的div

  19. 19

    从变量列表中找到项目的最佳方法

  20. 20

    用户从列表中选择项目时如何隐藏列表?

  21. 21

    从包含从自动完成的文本框中选择的项目的列表中删除项目

  22. 22

    从别名子查询中选择时,“如果选择DISTINCT,则ORDER BY项目必须出现在选择列表中”

  23. 23

    在列表中找到项目的ContiguousCount?

  24. 24

    从列表框中选择一个项目,然后使用该项目的名称

  25. 25

    如果在列表中未找到类别,则为Excel求和值(更好的编码方法)

  26. 26

    从带有列表的 6 个变量中选择随机项目的最简单方法是什么

  27. 27

    从列表列表中选择项目

  28. 28

    对列表框中选择的每个项目调用一个方法。我需要以编程方式调用每个项目的方法,

  29. 29

    Nginx 未找到文件,但从 mysql 中选择信息

热门标签

归档