modx getResources - 偏移/限制问题?

时间:2015-07-19 19:49:40

标签: php modx

我已对此进行了设置,以便主博客页面显示最初的3个帖子,并在完全加载时显示标记。

            [[!getResourcesTag? 
                &element=`getResources` 
                &elementClass=`modSnippet`
                &tpl=`blog-item`
                &tplFirst=`blog-item-featured`
                &limit=`3`
                &hideContainers=`1` 
                &parents=`5` 
                &tagKey=`blog-tags`
                &includeTVs=`1`
                &tvPrefix=``
            ]]

显示的最初3个帖子按主要着陆页上的日期顺序排序(最近的第一个),例如第1条,第2条和第2条第3条。

点击显示的3个帖子下方的“更多帖子”按钮,无限滚动分页(已设置)启动。

<button class="load-more" data-parent="5" data-current-page="1">More Posts</button>

但点击更多帖子 - 第3条(再次)&amp;第4条归还 - 而不是第4条和第4条。第5条。

 $method   = $modx->getOption('method', $scriptProperties, 'initial');
 $limit    = $modx->getOption('limit', $scriptProperties, 3);
 $parent   = $modx->getOption('parent', $scriptProperties);
 $tpl      = $modx->getOption('tpl', $scriptProperties);
 $tplFirst = $modx->getOption('tplFirst', $scriptProperties);

 $load   = (int) $_GET['page'];
$offset = 0;

if($method == "initial") {
    if($load != 0) {
        $limit = $limit * $load;
    }
} elseif($method == "pagination") {
    $offset = $limit * ($load - 1);
}

$page = $modx->runSnippet('getResources', array(
    'parents'        => $parent,
    'limit'          => $limit,
    'offset'         => $offset,
    'includeTVs'     => '1',
    'tvPrefix'       => '',
    'includeContent' => '1',
    'tpl'            => $tpl,
    'tplFirst'       => $tplFirst
));

我玩过参数&amp;尝试改变处理offset的代码,但似乎无法弄明白。

一些帮助会很棒。

1 个答案:

答案 0 :(得分:1)

已添加更新代码

我曾经做过类似的事情,几乎完全是[必须用Google搜索]

我的初始getResources调用的唯一区别是我使用了0

的偏移量
<div id="posts">
<!-- get first few articles -->
[[!getResources?
     &parents=`10,22`
     &depth=`999`
     &limit=`6`
     &offset=`0`
     &includeTVs=`1`
     &processTVs=`1`
     &includeContent=`1`
     &tpl=`infiniteHomePageTpl`
     &sortby=`publishedon`
     &showHidden=`1`
     &hideContainers=`1`
]]

</div>

<button id="scroller" class="btn btn-primary load-more" data-parents="10,22" data-offset="6" data-posts="3">Show More Articles</button>
<button id="scolltotop" class="btn btn-primary scrollToTop" style="display:none;">Back to Top</button>

仅为了简洁,这里是片段和js:

<?php
    $output = array(
      'status' => 'success',
      'msg' => 'message',
      'data' => 'blaaaaaaaah',
      'lastpost' => FALSE,
    );

    $properties = $scriptProperties['data'];

    $modx->log(modX::LOG_LEVEL_ERROR,'Running processor: ajax.generic, scriptProperties = '. print_r($properties, TRUE));

    $limit  = $properties['limit'];
    $parents = $properties['parents'];
    $tpl    = $properties['tpl'];
    $offset = $properties['offset'];
    $depth = $properties['depth'];
    $sortby = $properties['sortby'];
    $debug = $properties['debug'];
    $showHidden = $properties['showHidden'];
    $hideContainers = $properties['hideContainers'];

    $modx->log(modX::LOG_LEVEL_ERROR, 'tpl = ' . $tpl);

    $posts = $modx->runSnippet('getResources', array(
        'parents'       => $parents,
        'depth'         => $depth,
        'limit'         => $limit,
        'offset'        => $offset,
        'includeTVs'    => '1',
        'processTVs'    => '1',
        'includeContent' => '1',
        'tpl'           => $tpl,
        'debug'         => $debug,
        'sortby'        => $sortby,
        'showHidden'    => $showHidden,
        'hideContainers'=> $hideContainers,
    ));

   $output['posts'] = '<div class="post-group" style="display:none" >' . $posts . '</div>';

   if(strlen($posts) == 0){

   $output['lastpost'] = TRUE;

   }

   $output = $modx->toJSON($output);

    return $output;

和JS:

// infinite scrolling on homepage
    // use: <button id="scroller" class="btn btn-primary load-more" data-parents="10,22" data-offset="0" data-posts="5">Show More Articles</button>
    $('.load-more').click(function(e) {

        var $this = $(this);

        var offset = $this.data('offset'); // the current offset for get resources

        var posts = $this.data('posts'); // the number of posts to get

        var parents = $this.data('parents'); // the parent ids to pull resources from

        var myProperties = {
            snippet: 'infiniteScroll',
            limit: posts,
            offset: offset,
            parents: parents,
            depth: 999,
            sortby: 'publishedon',
            showHidden: 1,
            debug: 1,
            tpl: 'infiniteHomePageTpl',
            hideContainers: 1
            };
console.log('props = ' + JSON.stringify(myProperties));
        $.ajax({
            type: "POST",
            url: "/ajax.processor",
            data: myProperties,
            dataType: "json",

            success: function(response) {

                var newposts = response.posts;

                var $div = $("div#posts");

                $div.append(newposts);

                $div.find(".post-group:last").fadeIn();

                $('body').stop().animate({scrollTop:$div.prop("scrollHeight") + $div.height()},1000);

                if(response.lastpost){
                    console.log('nodata');
                    $this.attr('disabled', 'disabled');
                    $this.html('no more posts');
                    $('.scrollToTop').show();
                }

                $this.data('offset', (offset + posts));

            },

            error: function(response){
                console.log(response);
            },

        }).fail(function(jqXHR,textStatus,errorThrown) {
            console.log(errorThrown);
        }); // ajax

    }); // load more

    // scroll back to top on finished resources.

    $('.scrollToTop').click(function(){
        $('html, body').animate({scrollTop : 0},800);
        return false;
    });

Ajax处理器

<?php
//$modx->log(modX::LOG_LEVEL_ERROR,'Running processor: ajax.generic, snippet = '. print_r($_POST, TRUE));

$output = $modx->runSnippet($_POST['snippet'], array('data' => $_POST));

header('Content-type: application/json');

return $output;