Как использовать Sitecore ShowControlPopup для диалоговых взаимодействий с пользователем? - PullRequest
3 голосов
/ 29 июля 2011

Я создал несколько простых команд, основанных на том, что находится в «Книге определений данных», в которой пользователь взаимодействует с правой кнопкой мыши на элементе -> insert -> MyCommand, за которым следует простое диалоговое окно с надписью «Вы действительно хотите это сделать?»».Замечательно.

Теперь я хочу команду, которая позволит мне немного больше взаимодействовать с пользователем в диалоговом окне.Мне нужно добавить пару списков переключателей, чтобы пользователь мог выбрать параметры, а затем кнопку для запуска команды.Я думаю, что мне нужно использовать ShowControlPopup для этого.Я создал элемент управления (ascx), чтобы определить, как будет выглядеть всплывающее окно (и опубликовал тестовую версию, чтобы убедиться, что он работает как базовый элемент управления в Sitecore).Тем не менее, я не уверен, какие именно параметры для ShowControlPopup.

Первый параграф называется "Id". Какой идентификатор я должен указать здесь?Идентификатор элемента, который использует всплывающий элемент управления?

Второй параметр называется "where" - я предполагаю, что это URL, который будет иметь всплывающее окно.Должен ли элемент контента существовать здесь, или это просто фиктивный URL?

Третий параметр называется "controlId". Какой идентификатор я должен указать здесь?Я пробовал идентификатор моего элемента управления, который определяет всплывающее окно, но я получаю сообщение об ошибке, говорящее о том, что элемент управления не может быть найден.

Когда пользователь выбрал свои параметры в диалоговом окне и нажимает «ОК», который обрабатывает событие?Метод Run класса команд или обработчик событий в коде для всплывающего элемента управления?

Пока это мой код.Если происходит сбой, когда он пытается создать элемент управления с ошибкой о невозможности найти элементы с предоставленным идентификатором.Я только что угадал, о каких элементах хочет знать всплывающий элемент управления.

protected void Run(Sitecore.Web.UI.Sheer.ClientPipelineArgs args)
{
 if (args.IsPostBack)
 {
  if (args.HasResult)
  { // normally code here would run when the dialog box is completed by the user.  Is that so in this case?

  }
 }
 else
 {
  Sitecore.Context.ClientPage.ClientResponse.ShowControlPopup("F3684C4C-D9EF-4796-A471-5B05553119B6",
                 "http://mysite/dummy.aspx",
                 "B8D503D0-AEBE-43AE-B924-C3849F03E90D");

  args.WaitForPostBack();
 }
}

Приветствия,

Джеймс.

Sitecore 6.2 rev 091012 / Win7 32bit / IIS7 / SQLExpress 2008 (только для локальных разработчиков)

1 Ответ

4 голосов
/ 08 августа 2011

Только для справки, поддержка Sitecore вернулась с некоторыми ответами

1) "Id" - это идентификатор элемента, который запускает всплывающее окно

2) "Где" - эторасположение относительно "Id".например, выше, ниже, справа-внизу

3) «controlId» - это идентификатор элемента, который является всплывающим

Примерами из Sitecore, которые используют ShowPopupControl, являются главное меню и контекстное меню.

Кроме того, SheerUI все еще недокументирован, и мне сказали просто искать примеры в базе кода Sitecore.Здорово, что мы можем взглянуть на код Sitecore, но небольшое направление было бы здорово.Даже если документ просто сказал: «Для использования ShowPopupControl пример пользовательского интерфейса x может быть найден в классе y в dll z».

Жизнь команды & popup может закончиться кодом в всплывающем окне илисама командаЭто зависит от окончательной args.WaitForPostBack(), которая также может быть 'args.WaitForPostBack (true) or 'args.WaitForPostBack(false).

В конце концов, я выбрал ShowModalDialog (), потому что это было именно то, что я хотел, а не всплывающее окночто пользователь может кликнуть подальше.

Так что мой код в итоге выглядел так

protected void Run(Sitecore.Web.UI.Sheer.ClientPipelineArgs args)
{
    if (args.IsPostBack)
    {
        ;// we never come here becuase we have set waitforpostback to false.  all processing is handled by the popup control
    }
    else
    {
        Sitecore.Text.UrlString popUpUrl = new Sitecore.Text.UrlString("/sitecore/content/MYSITE/MyControlPageItem.aspx");
        popUpUrl.Append("id", args.Parameters["id"]);
        popUpUrl.Append("database", args.Parameters["database"]);
        popUpUrl.Append("language", args.Parameters["language"]);
        Sitecore.Context.ClientPage.ClientResponse.ShowModalDialog(popUpUrl.ToString(),"400", "600", "", true);

        args.WaitForPostBack(false);    // if this is true this command will wait for the modal dialog created above to close
                                        // at which time the Run method will check for postback & args
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...