Выборка "других" ресурсов с вычетом текущих (Ajax) Новый

Дополнение: pdoPage

Задача: требуется вывести что-то типо «Другое в блоге».
На странице используется pdoPage с Ajax навигацией. Каким образом можно получать список id ресурсов, которые выведены на текущей странице?
Каким образом можно просто решить задачу?

Мысль есть повесить обработку на
$(document).on('pdopage_load', function(e, config, response) {
    console.log(e, config, response);
});
После загрузки получать ID из атрибутов блоков, и делать ajax запрос на обновление данные в блоке «Другое»

Но вопрос с первой загрузкой страницы остается актуальным(
Пробовал перед вызовом pdoPage использовать
{set $_articlesIds = []}
, а в чанках непосредственно вызывать
{set $_articlesIds[] = $id}
, но
{$_articlesIds|join:","}
все равно выдает пустоту(

{set $_articlesIds = []}
{set $articles = $_modx->runSnippet('!pdoPage', [
    'parents' => $_modx->resource.id,
    'showLog' => 0,
    'element' => 'pdoResources',
    'limit' => 4,
    'where' => ['published' => 1],
    'ajax' => 1,
    'includeContent' => 1,
    'includeTVs' => 'tags',
    'ajaxMode' => 'default',
    'sortby' => '{"createdon":"DESC"}',
    'tpl' => 'blog_article.item',
])}
19 august 2016, 15:00    lexikon   
2    310 0

Comments (4)

  1. lexikon 20 august 2016, 12:41 # 0
    Реализовать подгрузку ajax и обновление удалось. Остался вопрос как получить массив ID ресурсов которые отображаются на первой странице. Делать дополнительный запрос нет желания( Есть у кого какие мысли?

    PS
    Вот сниппет для подгрузки ресурсов.
    <?php
    if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) || $_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') {return;}
    
    if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
        $modx->resource->set('cacheable', 0);
        $modx->resource->set('template', 0); 
        header('Content-Type: application/json');
    
        $response = array('status' => false);
        
        if (empty($_POST['action'])) {
            $response['message'] = 'Action requeired';
        } else {
            switch ($_POST['action']) {
            	case 'getAriclesWithout':
            	    $ids = $_POST['ids'];
            	    $resources = array();
            	    if(is_array($ids)){
            	        foreach($ids as $value) {
            	            $resources[] = '-'.(int)$value;
            	        }
            	    } else {
            	        $response['message'] = 'IDs not given';
            	        break;
            	    }
    
            		$result = $modx->runSnippet('pdoResources', array(
            		    'resources' => implode($resources,","),
            		    'tpl' => 'sidebar_articles.item',
            		    'limit' => 2,
            		    'where' => array('published' => 1, 'isfolder' => 0),
            		    'includeTVs' => 'image,image2',
            		    'sortby' => 'RAND()'
        		    ));
        		    if($result)
            		    $response = array('status' => true, 'output' => $result, 'resourcesValue' => implode($resources,","));
        		    else
        		        $response = array('status' => true, 'output' => '');
            		break;
            }
        }
        
        die(json_encode($response));
    
    }
    Вот клиентский код.
    $(document).on('pdopage_load', function(e, config, response) {
    			console.log(e, config, response);
    			var wrapper = $('<div/>');
    			var output = $(response.output);
    			wrapper.append(output);
    			var ids = [];
    			if(output.length > 0) {
    				wrapper.find('div.blog-feed__item').each(function() {
    					ids.push($(this).data('id'))
    				})
    			}
    
    			$.ajax({
    				url: window.location.pathname,
    				type: 'post',
    				data: {action: 'getAriclesWithout', ids: ids},
    				success: function(data) {
    					console.log(data);
    					if(data.status == true) {
    						var others = $('#others');
    						others.html('');
    						others.append(data.output);
    					}
    				}
    			});
    		});
    1. lexikon 20 august 2016, 13:05 # 0
      Василий, прошу помощи. В документации по Fenom явно указано:
      Если массив $arr еще не существует, он будет создан. Таким образом, это еще один способ определить массив. Однако такой способ применять не рекомендуется, так как если переменная $arr уже содержит некоторое значение (например, строку), то это значение останется на месте и [] может на самом деле означать доступ к символу в строке. Лучше инициализировать переменную путем явного присваивания значения.
      относительно данного кода:
      {set $arr.key = value}
      {set $arr[] = value} {* будет взят максимальный целочисленый ключ, увеличенный на 1 *}
      Я пытаюсь использовать такой же метод с pdoPage, внутри чанков использую код для отладки:
      {set $_articlesIds[] = $id}
          {$_articlesIds|length}
      и вижу что мой массив каждый раз создается новый(
    2. Кирилл 20 august 2016, 13:26 # 0
      Что ты будешь делать, после того, как получишь список ID ресурсов?
      1. lexikon 20 august 2016, 13:30 # 0
        я сделаю из них строку типо "-12,-10,-8" и подставлю в сниппет в параметр &resources, чтобы исключить их из выборки.
        Их нужно исключить из выборки в блоке «Другое в блоге»… то есть имеем страницу блога, открывается первая страница с 5 записями, на этой же странице имеется блок «Другое в блоге», туда должны вывестись именно другие записи из блога.
      You need to login to create comments.