我们的Sitecore内容树通常分为全球和本地(或特定于国家/地区)页面,以服务我们分支机构的客户。如您所料,无论页面的地理位置如何,都会向我们网站的所有查看者显示全局页面,但是我们在全局页面上实现了可本地化的某些字段,例如横幅广告,特色内容等。
我们已经设置了安全性,以便对于多列表,给定的内容编辑器仅在左侧可以访问的项目中看到它们。我们遇到的事情是,其他分支内容编辑器选择的项目显示在多列表的右侧“选定”区域中,如果当前正在查看该项目的内容编辑器对此没有权限,它们显示为[找不到项目]。我们有好主意的内容编辑器错误地双击了这些内容以将其删除,而没有意识到他们正在删除其他编辑器故意放置在其中的内容。下面是使用我们的德语内容编辑器的视图截屏的屏幕截图:
我要确定的是,是否存在一种使用安全性或其他方法来完全抑制当前内容编辑器没有权限的项目的[找不到项目]消息的方法。任何提示这样做的好方法(如果可行)将不胜感激。
您可以创建Multilist
继承自Sitecore.Shell.Applications.ContentEditor.MultilistEx
该类的类,并重写该类的DoRender()
方法。在[Item Not Found]
显示文本的地方,检查项目是否存在,但用户没有访问权限(通过尝试使用检索项目SecurityDisabler
),并显示正确的消息。
然后,您需要进入core
数据库并注册您的字段类型:
最后将您的字段类型切换为新创建的类型-您的字段将如下所示:
以下代码是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] 删除。
我来说两句