Octobercms组件-关系的限制结果

时间:2019-07-27 23:25:17

标签: php octobercms octobercms-plugins

我有一个包含2个组件的插件。一个用于“职位”,另一个用于“个人资料”。该个人资料属于用户,并且有很多“帖子”。

但是,当我访问该关系时,它将加载每个帖子。我只想加载5个然后分页或延迟加载,该怎么办?

Profile.php模型

class RacingLiveEvent
{
public:
    playerlist  pl;
}

Post.php模型

public $hasMany = [
        'posts' => [
            'Redstone\Membership\Models\Post',
            'table' => 'redstone_membership_profiles_posts',
        ]
    ];

public $belongsTo = [
        'user' => [
            'Rainlab\User\Models\User',
        ]
    ];

Profile.php组件

public $belongsTo = [
        'profile' => ['Redstone\Membership\Models\Profile',
        'table' => 'redstone_membership_profiles_posts',
        ]
    ];

profile / default.htm-组件视图

protected function loadProfile()
    {
        $id = $this->property('profileUsername');

        $profile = new UserProfile

        $profile = $profile->where(['slug' => $id]);

        $profile = $profile->first();
        return $profile;
    }

1 个答案:

答案 0 :(得分:1)

您可以使用OctoberCMS pagination service或php函数执行某些操作,也可以通过细枝构建函数。

使用切片的PHP :这是假设您在调用$profile->posts时获得了一系列帖子。您还可以向网址添加查询,例如example.com/profile?q=15,将5更改为10 15,等等,我添加了if语句来检查输入内容是否为数字并大于5。

protected function loadProfile()
{
    $id = $this->property('profileUsername');

    $profile = UserProfile::where(['slug' => $id])->first();

    if (is_numeric(Input::get('q')) == true && Input::get('q') > 5) {

        $profile->posts = $profile->posts->slice(0, Input::get('q'));

    } else { 

        $profile->posts = $profile->posts->slice(0, 5);

    }

    return $profile;
}

使用slice的树枝:这与PHP的方式非常相似,但是在htm文件中完成。

PHP-

protected function getQuery() 
{

    if (is_numeric(Input::get('q')) == true && Input::get('q') > 5) {
        return Input::get('q');
    } else {
        return 5;
    }

}

嫩枝-

{% set query = __SELF__.getQuery %}
{% set profile = __SELF__.profile %}
{% set posts = __SELF__.profile.posts | slice(0, query) %}

 {% for post in posts %}
      <div class="card">
        <div class="card-header">
            <div class="ml-2">
                <div class="h5 m-0">{{ profile.title }}</div>
                  </div>
                  {{ post.published_at|date('M d') }}  
                </div>
              <div class="card-body  text-left">
                    {{ post.content|raw }}
            </div>
        </div>
 {% else %}

 <h1>This user has not made any posts.</h1>

 {% endfor %}