Владимир

Владимир

Был в сети 30 апреля 2025, 08:19
Заказы не принимаю
Юрий
Юрий
Тоже пытался заставить работать masonry с подгруппой через pdoPage, но по непонятным причинам, не хотел инициализироваться плагин стандартным способом:
$(document).on('pdopage_load', function (e, config, response) {
      var $grid = $(".masonry");
      $grid.masonry('reloadItems');
      $grid.masonry( 'layout' );
  });
Давая небольшую задержку через setTimeout, заработало на ура.
Вот финальный код:
$(document).ready(function () {
  /* masonry */
  var $grid = $('.masonry').masonry({
    itemSelector      : '.masonry-item',
    columnWidth       : '.masonry-item',
    gutter            : 15,
    percentPosition   : true,
    transitionDuration: '0'
  });
  
  /* pdopage_load */
  $(document).on('pdopage_load', function (e, config, response) {
    function masonryUpd () {
      var $grid = $(".masonry");
      $grid.masonry('reloadItems');
      $grid.masonry( 'layout' );
    }
    setTimeout(masonryUpd, 300);
  });
});
Что странно. По идее не нужно никакой задержки.
Володя
Володя
с шаблонизатором все проще, можно писать прям в шаблоне все
{extends 'file:templates/category.tpl'}

{block 'initialize'}
    {parent}

    {var $tag = $_modx->getPlaceholder('vp.tag')}
    {var $_modx->resource.longtitle = $tag}

    {var $crumbs = 0}
    {var $parents = 0}
    {var $resources = '!msProducts'|snippet:[
    'parents' => 0,
    'optionFilters' => json_encode([
    'tags' => $tag
    ]),
    'returnIds' => 1
    ]}

    {if $resources is empty}
        {var $url = ('site_start'|option) | url : ['scheme' => 'full'] : []}
        {$_modx->sendRedirect($url, ['responseCode' => 'HTTP/1.1 404 Not Found'])}
    {/if}

{/block}
Максим Кузнецов
Максим Кузнецов
Конкретно по данному баннеру не подскажу, но в целом можно сделать так:

Если разметка под баннеры (через tpl_n) грузится, но сам баннер не подгружается, то нужно вешать его реинициализацию на
$(document).ajaxStop(function(){
	
});
Также будет не лишним вешать на уже подгруженный баннер какой-либо класс (допустим, .ready), и при последующей реинициализации обновлять только новые позиции через .not('.ready').

Если разметка под баннеры не подгружается, то нужно самостоятельно считать нужную позицию для размещения баннера и вставлять сами баннеры на событие
$(document).on('mse2_load', function(e, data) {

});
Сергей Шлоков
Сергей Шлоков
Я бы создал коллекцию объектов (можно через pdoResources) таким запросом
select Res.* from `modx_site_content` as Parent
inner join `modx_site_content` as Res on Res.parent = Parent.id
where Parent.parent = 12
ORDER BY Res.parent ASC, Res.id DESC
А затем пробежался по массиву и сформировал требуемую коллекцию с одним дочерним ресурсом.
Итого всего один запрос к БД.
Александр Янк
Александр Янк