new: [single view] updated, allows for child indeces to be loaded in an accordion

remotes/origin/main
iglocska 2020-06-21 21:34:15 +02:00
parent 3a16eac89a
commit 5f51668e81
No known key found for this signature in database
GPG Key ID: BEA224F1FEF113AC
3 changed files with 68 additions and 13 deletions

View File

@ -12,6 +12,10 @@ echo $this->element(
'key' => __('UUID'),
'path' => 'uuid'
],
[
'key' => __('Username'),
'path' => 'username'
],
[
'key' => __('Email'),
'path' => 'individual.email'
@ -37,6 +41,17 @@ echo $this->element(
'scope' => 'individuals'
]
],
'children' => []
'children' => [
[
'url' => '/AuthKeys/index?users_id={{0}}',
'url_params' => ['id'],
'title' => __('Authentication keys')
],
[
'url' => '/EncryptionKeys/index?users_id={{0}}',
'url_params' => ['id'],
'title' => __('Encryption keys')
]
]
]
);

View File

@ -4,22 +4,60 @@
*
*/
$randomId = Cake\Utility\Security::randomString(8);
sprintf(
'<div class="card">%s</div>',
if (!empty($child['url_params'])) {
if (!is_array($child['url_params'])) {
$child['url_params'] = [$child['url_params']];
}
foreach ($child['url_params'] as $i => $url_param) {
$child['url'] = str_replace('{{' . $i . '}}', $this->Hash->extract($data, $url_param)[0], $child['url']);
}
}
echo sprintf(
'<div class="card">%s%s</div>',
sprintf(
'<div class="card-header" id="heading-%s"><h5 class="mb0">%s</h5></div>',
$randomId,
sprintf(
'<button class="btn btn-link" data-toggle="collapse" data-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">%s</button>',
h($title)
'<button class="btn btn-link" data-toggle="collapse" data-target="#view-child-%s" aria-expanded="true" aria-controls="collapseOne">%s</button>',
$randomId,
h($child['title'])
)
),
sprintf(
'<div class="collapse %s" id="view-child-%s" data-parent="#accordion" labelledby="heading-%s"><div class="card-body>"%s</div></div>',
empty($collapsed) ? 'show' : 'collapsed',
'<div class="collapse %s" id="view-child-%s" data-parent="#accordion" labelledby="heading-%s"><div id="view-child-body-%s" class="card-body" data-content-url="%s" data-load-on="%s"></div></div>',
!empty($child['collapsed']) ? 'show' : 'collapsed',
$randomId,
$randomId,
h($url)
),
empty($loadOn) ? 'ready' : h($loadOn)
$randomId,
h($child['url']),
empty($child['loadOn']) ? 'ready' : h($child['loadOn'])
)
);
?>
<script type="text/javascript">
$(document).ready(function() {
var url = $('#view-child-body-<?= h($randomId) ?>').data('content-url');
var loadon = $('#view-child-body-<?= h($randomId) ?>').data('load-on');
if (loadon === 'ready') {
$.ajax({
success:function (data, textStatus) {
$('#view-child-body-<?= h($randomId) ?>').html(data);
},
type: "get",
cache: false,
url: url,
});
} else {
$('#view-child-<?= h($randomId) ?>').on('hidden.bs.collapse', function () {
$.ajax({
success:function (data, textStatus) {
$('#view-child-body-<?= h($randomId) ?>').html(data);
},
type: "get",
cache: false,
url: url,
});
})
}
});
</script>

View File

@ -46,10 +46,11 @@
$ajaxLists = '';
if (!empty($children)) {
foreach ($children as $child) {
$listElements .= $this->element(
$ajaxLists .= $this->element(
'/genericElements/SingleViews/child',
array(
'value' => $child
'child' => $child,
'data' => $data
)
);
}
@ -58,10 +59,11 @@
__('{0} view', \Cake\Utility\Inflector::singularize(\Cake\Utility\Inflector::humanize($this->request->getParam('controller')))) :
$title;
echo sprintf(
'<div><h2>%s</h2>%s%s<table class="table table-striped col-sm-8">%s</table><div id="accordion">%s</div></div>',
'<div><h2>%s</h2>%s%s<div class="px-3"><table class="table table-striped col-sm-8">%s</table></div><div id="accordion">%s</div></div>',
h($title),
empty($description) ? '' : sprintf('<p>%s</p>', h($description)),
empty($description_html) ? '' : sprintf('<p>%s</p>', $description_html),
$listElements,
$ajaxLists
);
?>