Повторное использование переменной после вызова сниппета
Добрый день!
Как хранить на странице и использовать значение, переданное от сниппета.
Сниппет выбирает произвольный (rand) дочерний объект родителя, поэтому его лучше вызвать один раз.
Но переданное значение используется в нескольких местах на странице.
Как хранить на странице и использовать значение, переданное от сниппета.
Сниппет выбирает произвольный (rand) дочерний объект родителя, поэтому его лучше вызвать один раз.
Но переданное значение используется в нескольких местах на странице.
Комментарии: 4
Сниппет вызывается на странице некэшируемо. В этом случае он выдаёт разные id. Но getImageList его не видит.
И наоборот кэшируемый вызов. GetImageList тогда видит значение, но это значение не рандомное.
Сниппет getChildsOne
И наоборот кэшируемый вызов. GetImageList тогда видит значение, но это значение не рандомное.
[[!getChildsOne]]
<div class="tab-content" id="myTabContent">
<div class="tab-pane fade show active" id="land" role="tabpanel" aria-labelledby="home-tab">
<!-- галерея masonry -->
<div class="grid">
[[getImageList?
&tvname=`album-photo`
&limit=`20`
&docid=`[[+album-land]]`
&tpl=`@CODE:
<div class="grid-item">
<div class="wrapper">
<a href="#" data-toggle="modal" data-target="#photo-modal">
<img src="assets/photos/[[+photoTV]]">
</a>
<div class="some-text">
[[+desc]]
</div>
</div>
</div>
`
]]
</div>
</div>Сниппет getChildsOne
<?php
$query = $modx->newQuery('modResource', array('parent' => 12, 'deleted' => false, 'published' => true));
$children = $modx->getCollection('modResource', $query);
$input = array();
$resourceId = "";
foreach ($children as $child) {
$resourceId = $child->get('id');
array_push($input, $resourceId);
}
$i = array_rand($input, 1);
$out = $input[$i];
$modx->setPlaceholder('album-land',$out);
return;
Попробуйте некешированный плейсхолдер и я бы убрал шаблон в чанк:
Либо формируйте вызов в самом сниппете, заодно можно упростить:
Ну а на странице:
[[!getImageList?
&tvname=`album-photo`
&limit=`20`
&tvname=`album-photo`
&docid=`[[!+album-land]]`
&tpl=`grid-item`
]]Либо формируйте вызов в самом сниппете, заодно можно упростить:
<?php
//Получаем рандомный ID
$input = array();
foreach ($modx->getIterator('modResource', array('parent' => 12, 'deleted' => false, 'published' => true)) as $resource) {
$input[] = $resource->get('id');
}
$i = array_rand($input, 1);
// Вызываем getImageList
$out = $modx->runSnippet('getImageList', array(
'limit' => 20,
'tvname' => 'album-photo',
'docid' => $input[$i],
'tpl' => 'grid-item'
));
// Помещаем вызов в плейсхолдер "album"
$modx->setPlaceholder('album',$out);
return;Ну а на странице:
[[!getChildsOne]]
<div class="tab-content" id="myTabContent">
<div class="tab-pane fade show active" id="land" role="tabpanel" aria-labelledby="home-tab">
<!-- галерея masonry -->
<div class="grid">
[[+album]]
</div>
</div>
</div>
благодарю, Павел!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.