ILIAS  trunk Revision v11.0_alpha-1761-g6dbbfa7b760
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
show_popover_with_dynamic_changing_content.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
22 
24 
38 {
39  global $DIC;
40  $factory = $DIC->ui()->factory();
41  $renderer = $DIC->ui()->renderer();
42  $refinery = $DIC->refinery();
43  $request_wrapper = $DIC->http()->wrapper()->query();
44 
45  // This example shows how to change the content of a popover dynamically with ajax requests.
46  // Each popover offers a signal to replace its content, similar to the show signal which shows the popover.
47  // The replace signal will load the new content via ajax from a given URL and insert it into the popover.
48 
49  // The popover in this example initially shows three buttons. Each button will replace the content
50  // of the popover with a new "page" showing some text. Each page also contains a back button which
51  // again replaces the content of the popover with the overview page.
52 
53  $url = $_SERVER['REQUEST_URI'];
54 
55  // This is an ajax request to render the overview page showing the three buttons
56  if ($request_wrapper->has('page') && $request_wrapper->retrieve('page', $refinery->kindlyTo()->string()) == 'overview') {
57  // Note: The ID of the replace signal is sent explicitly as GET parameter. This is a proof of concept
58  // and may be subject to change, as the framework could send such parameters implicitly.
59  $signalId = $request_wrapper->retrieve('replaceSignal', $refinery->kindlyTo()->string());
60  $replaceSignal = new ReplaceContentSignal($signalId);
61  $button1 = $factory->button()->standard('Go to page 1', '#')
62  ->withOnClick($replaceSignal->withAsyncRenderUrl($url . '&page=1&replaceSignal=' . $signalId));
63  $button2 = $factory->button()->standard('Go to page 2', '#')
64  ->withOnClick($replaceSignal->withAsyncRenderUrl($url . '&page=2&replaceSignal=' . $signalId));
65  $button3 = $factory->button()->standard('Go to page 3', '#')
66  ->withOnClick($replaceSignal->withAsyncRenderUrl($url . '&page=3&replaceSignal=' . $signalId));
67  $list = $factory->listing()->unordered([$button1, $button2, $button3]);
68  echo $renderer->renderAsync($list);
69  exit();
70  }
71 
72  // This is an ajax request to render a page
73  if ($request_wrapper->has('page')) {
74  $page = $request_wrapper->retrieve('page', $refinery->kindlyTo()->int());
75  $signalId = $request_wrapper->retrieve('replaceSignal', $refinery->kindlyTo()->string());
76  $replaceSignal = new ReplaceContentSignal($signalId);
77  $button = $factory->button()->standard('Back to Overview', '#')
78  ->withOnClick($replaceSignal->withAsyncRenderUrl($url . '&page=overview&replaceSignal=' . $signalId));
79  $intro = $factory->legacy()->content("<p>You are viewing page $page</p>");
80  echo $renderer->renderAsync([$intro, $button]);
81  exit();
82  }
83 
84  // This is the "normal" request to render the popover. Any content of the popover is rendered async.
85  $popover = $factory->popover()->standard($factory->legacy()->content(''))->withTitle('Pages');
86  $asyncUrl = $url . '&page=overview&replaceSignal=' . $popover->getReplaceContentSignal()->getId();
87  $popover = $popover->withAsyncContentUrl($asyncUrl);
88  $button = $factory->button()->standard('Show Popover', '#')
89  ->withOnClick($popover->getShowSignal());
90  return $renderer->render([$popover, $button]);
91 }
$renderer
$url
Definition: shib_logout.php:66
$_SERVER['HTTP_HOST']
Definition: raiseError.php:26
global $DIC
Definition: shib_login.php:22
show_popover_with_dynamic_changing_content()
description: > Example for rendering a standard popover with dynamic changing content.
exit
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...