Я бы рекомендовал использовать шаблон команды для выполнения того, что вы просите. Шаблон команды — это, по сути, часть пользовательской логики, которую можно назначить параметрам вставки.
В вашем случае вы можете создать шаблон команды с именем «MyPaymentForm» (или что-то еще, что вы придумаете), а затем назначить этот шаблон команды в поле «Параметры вставки» любого шаблона/элемента, который вы хотите. Когда пользователь щелкает правой кнопкой мыши «Вставить->» и ваш шаблон команды доступен, пользователь может щелкнуть ваш шаблон команды «MyPaymentForm», и ваш пользовательский код будет выполнен.
Действие вашего шаблона команды может быть таким же простым, как создание копии вашей базовой формы и вставка ее в дерево содержимого, где пользователь выполнил шаблон команды.
Вот пример кода шаблона команды, который может выполнить то, что вы хотите. Это совершенно не проверено, но концепция есть.
namespace MyNameSpace
{
public class CopyPaymentFormCommand : Sitecore.Shell.Framework.Commands.Command
{
public override void Execute(Sitecore.Shell.Framework.Commands.CommandContext context)
{
if (context.Items.Length == 0)
return;
Sitecore.Data.Items.Item destinationItem = context.Items[0];
if (destinationItem == null)
return;
//retrieve the base MyPaymentForm item
Sitecore.Data.Items.Item myPaymentForm = destinationItem.Database.GetItem("MyPaymentForm GUID");
if (myPaymentForm == null)
return; // instead of just exiting here, you may want to log an error first
//copy the MyPaymentForm item to the location in the content tree from which the command template was triggered
Sitecore.Data.Items.Item copyOfMyPaymentForm = myPaymentForm.CopyTo(destinationItem, "MyPaymentForm");
//perform any necessary post-processing of your newly copied item
}
}
}
После создания пользовательского кода вам необходимо подключить Sitecore для распознавания и использования вашей команды.
1. Добавьте элемент "команда" в файл /App_Config/Commands.config, например:
<command name="mycustomcommands:forms:copypaymentform" type="MyNamespace.CopyPaymentFormCommand, MyAssemblyName" />
2. Затем создайте элемент шаблона команды в разделе /sitecore/Templates. Вы можете сделать это, щелкнув правой кнопкой мыши соответствующую папку в /sitecore/Templates и выбрав Insert->Insert From Template, затем выберите шаблон данных «/sitecore/Templates/System/Branches/Command Template».
3. Затем во вновь созданном элементе "Шаблон команды" заполните поле "Команда" (содержащееся в разделе "Данные") следующим текстом: mycustomcommands:forms:copypaymentform(id=$ParentID) примечание: имя команды совпадает с именем команды, определенным в файле Commands.config
4. Теперь у вас есть шаблон команды, который можно назначить в качестве параметра вставки. Для этого просто отредактируйте элемент __Стандартные значения любого выбранного вами шаблона и выберите «Назначить параметры вставки». В диалоговом окне «Параметры вставки» перейдите к созданному вами элементу «Шаблон команды» и добавьте его в «Выбранный» список параметров вставки.
Теперь, когда пользователь пытается вставить новый элемент под элемент с шаблоном, содержащим параметр вставки вашего шаблона команды, у него будет возможность щелкнуть ваш шаблон команды. Это приведет к срабатыванию кода вашего шаблона команды, который, в свою очередь, создаст копию вашей платежной формы в месте, из которого пользователь выполнил команду.
Дополнительные сведения о шаблонах команд см. в этом документе по SDN (в частности, в главе 4): http://sdn.sitecore.net/upload/sitecore6/datadefinitioncookbook-usletter.pdf
Надеюсь это поможет!
person
Adam Weber
schedule
27.03.2012