- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Sitecore 页面编辑器和预览界面具有语言选择器按钮,可触发“下拉”/覆盖菜单,用户可以在其中选择语言。我如何复制这种行为?
(我开始回答这个问题,并提出了一个解决方案。发布到 SOF 以进行评论/增强。)
最佳答案
您可以在 Sitecore.Client
中了解 Sitecore 如何做到这一点。组装,Sitecore.Shell.Applications.WebEdit.Commands.ChangeLanguage
和 Sitecore.Shell.Applications.WebEdit.Commands.SetLanguage
.
您需要为此创建两个自己的命令。一个命令与按钮相关联,一个在选择子项时执行。该示例基于更改国家/地区 cookie 的场景。
更改国家/地区命令
首先是显示菜单的命令。你可以看到它显示了 Menu
带有动态选项。覆盖 GetHeader
和 GetIcon
允许按钮本身基于用户的当前选择是动态的。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sitecore.Shell.Applications.WebEdit.Commands;
using Sitecore.Diagnostics;
using Sitecore.Data.Items;
using Sitecore.Web.UI.Sheer;
using Sitecore.Web.UI.HtmlControls;
using Sitecore.StringExtensions;
using System.Web;
namespace Prototype.Commands
{
public class ChangeCountry : WebEditCommand
{
protected Dictionary<string, CountryOption> _countries = new Dictionary<string, CountryOption>
{
{"US", new CountryOption {
ID = "US",
Name = "United States",
Icon = "Flags/32x32/flag_usa.png"
}},
{"CA", new CountryOption {
ID = "CA",
Name = "Canada",
Icon = "Flags/32x32/flag_canada.png"
}},
{"MX", new CountryOption {
ID = "MX",
Name = "Mexico",
Icon = "Flags/32x32/flag_mexico.png"
}},
{"DE", new CountryOption {
ID = "DE",
Name = "Germany",
Icon = "Flags/32x32/flag_germany.png"
}}
};
public override void Execute(Sitecore.Shell.Framework.Commands.CommandContext context)
{
Assert.ArgumentNotNull(context, "context");
if (context.Items.Length == 1)
{
Item item = context.Items[0];
SheerResponse.DisableOutput();
Menu control = new Menu();
//replace with lookup and loop of available values
foreach (var key in _countries.Keys)
{
var country = _countries[key];
string id = country.ID;
string header = country.Name;
string icon = country.Icon;
string click = "prototype:setcountry(country={0})".FormatWith(key);
control.Add(id, header, icon, string.Empty, click, false, string.Empty, MenuItemType.Normal);
}
SheerResponse.EnableOutput();
SheerResponse.ShowPopup("ChangeCountryButton", "below", control);
}
}
public override string GetHeader(Sitecore.Shell.Framework.Commands.CommandContext context, string header)
{
HttpCookie country = HttpContext.Current.Request.Cookies["country"];
if (country != null && _countries.ContainsKey(country.Value))
{
return _countries[country.Value].Name;
}
return base.GetHeader(context, header);
}
public override string GetIcon(Sitecore.Shell.Framework.Commands.CommandContext context, string icon)
{
HttpCookie country = HttpContext.Current.Request.Cookies["country"];
if (country != null && _countries.ContainsKey(country.Value))
{
return _countries[country.Value].Icon;
}
return base.GetIcon(context, icon);
}
protected class CountryOption
{
public string ID { get; set; }
public string Name { get; set; }
public string Icon { get; set; }
}
}
}
<command name="prototype:changecountry" type="Prototype.Commands.ChangeCountry,Prototype" />
/sitecore/content/Applications/WebEdit/Ribbons/WebEdit/Experience
下创建一个新的块和按钮.此色带条也在预览模式下被引用/复制。该按钮将使用以下属性:
SheerResponse.ShowPopup
中提供的元素 ID 匹配。调用上面。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sitecore.Shell.Applications.WebEdit.Commands;
using System.Net;
using Sitecore.Diagnostics;
using Sitecore.Web.UI.Sheer;
using System.Web;
namespace Prototype.Commands
{
public class SetCountry : WebEditCommand
{
public override void Execute(Sitecore.Shell.Framework.Commands.CommandContext context)
{
Assert.ArgumentNotNull(context, "context");
var country = context.Parameters["country"];
Assert.IsNotNullOrEmpty(country, "Country not found");
HttpCookie cookie = new HttpCookie("country", country);
HttpContext.Current.Response.Cookies.Add(cookie);
WebEditCommand.Reload(WebEditCommand.GetUrl());
}
}
}
ChangeCountry
中的菜单项关联的点击事件。 .同样,配置时命令的名称需要匹配
ChangeCountry
中使用的名称。单击事件。
<command name="prototype:setcountry" type="Prototype.Commands.SetCountry,Prototype" />
关于sitecore - 如何使用下拉菜单创建 Sitecore 功能区按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10855152/
如何在 WPF 的功能区中隐藏快速访问工具栏? 最佳答案 对于 Microsoft Ribbon for WPF ,您可以使用 VisualTreeHelper 隐藏它.关于 Loaded事件处理程序
我尝试做一个功能区工具栏。我的问题是它没有找到 ImageSource。这是我的简单代码:
如何尽可能快速、简单地添加自定义宏 XLAM 文件? 我有一个保存为 XLAM 文件的宏。我希望我工作的其他不懂 Excel 的人员能够下载 XLAM 文件,像使用任何其他加载项(例如 Solver)
我在带有 EditBox 的 excel 功能区上有一个自定义选项卡。用户应在 EditBox 中输入 100 到 200 之间的数字。如果用户输入除此之外的任何内容,则应弹出错误消息,并且 Edit
我想在 ggplot2 中绘制一个图 多行, 每个都有一个环绕的丝带, 用户指定颜色, 并带有显示线条颜色和色带颜色的图例。 (向下滚动以查看几乎实现我所寻求的情节的示例。) 我看过相关的问题,但没有
.xlsm > customUI > customUI.xml 当我为下面的菜单元素使用 size="large"时,我看到带有大图标的按钮。 但是当我将属性 size="large"的按钮放在菜单
我正在开发 PowerPoint 加载项,并希望在加载项应用程序运行时暂时禁用某些功能区控件。 我开发了一个解决方案,可以在启用加载项时按预期工作,但这还不够,因为它禁用了一些常用的控件,如 Slid
如何为 Excel 功能区中的每个组合框项目设置 ID? 下面的代码是我为每个项目设置文本(标签)的地方,我想为每个项目设置一个 ID,以便以后识别它。我怎样才能做到这一点? Private Sub
我有一个应用程序,我是第一次在其中使用功能区。我可以填充自己的控件并使子例程的回调没有问题。我现在正处于开发阶段,我希望动态隐藏/显示一些组以提供更好的用户体验。 我可以通过更改 CallbackGe
我正在为 Office(2007 年和 2010 年)编写一个插件,到目前为止,我已经使用 Fluent Ribbon XML 来自定义不同的功能区。 我现在使用这种方法时遇到的问题是,我想在我的代码
我刚开始玩 Microsoft 的 08/2010 WPF Ribbon发布。基础知识看起来非常简单,但我如何创建一个 RibbonToggleButton 组,一次只允许选择组中的一个按钮,类似于单
我引用CSS3-Tricks Ribbon tutorial的教程. 我想用 CSS3 调整表格内的第 th 元素,使其看起来像教程中的功能区。 我设置了一个 JSFiddle测试它,但不幸的是我做不
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎是题外话,因为它缺乏足够的信息来诊断问题。 更详细地描述您的问题或include a mi
我正在设计一个网站,该网站的左上角悬挂着一条 CSS 丝带。当我将图像放在色带下方时,色带会与图像重叠,这就是我想要的外观。 但是,当我实现 J-Query 幻灯片放映技术时,会发生以下情况。 我的问
我试图在 Div 的右上角放置一个“三 Angular 形”。不知何故,我每次都搞砸了。 That's the Fiddle 那是我的 div: Test Module
我是 VSTO 的新手,我正在尝试创建一个带有一些简单控件的 Excel 功能区。我知道在 Visual Studio 中有两种方法可以做到这一点。功能区 XML 和功能区设计器,据我所知,大多数人更
我听说 Microsoft 允许使用商用 Office UI 控件,但竞争产品除外,例如文字处理器或电子表格应用等。 这有多真实? 此外,如果这不是真的,您是否知道任何免费功能区控件? 最佳答案 你应
如何更改 WPF 功能区 ApplicationMenu 中 AuxilaryPane 的大小?我已将最近的文件列表添加到该区域,但它被截断了。理想情况下,我希望辅助 Pane 像 Word/Exce
我正在学习 Micronaut 框架。我的 gradle.build 文件 dependencies { annotationProcessor "io.micronaut:micronaut-inj
我正在考虑在我的一个应用程序中实现功能区 GUI,当然希望遵守 MS 指南,因此感觉就像一个普通的功能区,等等。但我正在尝试找出解决特定问题的方法动态改变功能区。 我正在创建一个概念游戏编辑器,请不要
我是一名优秀的程序员,十分优秀!