kaynewilder
kaynewilder

Reputation: 853

Yii2 Display Recently Added Members

I have a "Latest Staff Members" panel where it should display my recently added users. All I have is a static display of these users:

<div class="box box-danger <?= !User::isBizAdmin() ? 'hidden' : '' ?>">
    <div class="box-header with-border">
      <h3 class="box-title">Latest Staff Members</h3>
      <div class="box-tools pull-right">
        <span class="label label-danger">8 New Members</span>
        <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
        <button class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
      </div>
    </div><!-- /.box-header -->
    <div class="box-body no-padding">
      <ul class="users-list clearfix">
        <li>
          <img src="https://cdn2.iconfinder.com/data/icons/avatar-2/512/frank_man-128.png" alt="User Image"/>
          <a class="users-list-name" href="#">Alexander Pierce</a>
          <span class="users-list-date">Today</span>
        </li>
        <li>
          <img src="https://cdn2.iconfinder.com/data/icons/avatar-2/512/Ben_man-128.png" alt="User Image"/>
          <a class="users-list-name" href="#">Norman</a>
          <span class="users-list-date">Yesterday</span>
        </li>
        <li>
          <img src="https://cdn2.iconfinder.com/data/icons/avatar-2/512/iri_girl_face-128.png" alt="User Image"/>
          <a class="users-list-name" href="#">Jane</a>
          <span class="users-list-date">12 Jan</span>
        </li>
        <li>
          <img src="https://cdn2.iconfinder.com/data/icons/avatar-2/512/Jay_man-128.png" alt="User Image"/>
          <a class="users-list-name" href="#">John</a>
          <span class="users-list-date">12 Jan</span>
        </li>
        <li>
          <img src="https://cdn2.iconfinder.com/data/icons/avatar-2/512/Fred_man-128.png" alt="User Image"/>
          <a class="users-list-name" href="#">Alexander</a>
          <span class="users-list-date">13 Jan</span>
        </li>
        <li>
          <img src="https://cdn2.iconfinder.com/data/icons/avatar-2/512/michela_face_young-128.png" alt="User Image"/>
          <a class="users-list-name" href="#">Sarah</a>
          <span class="users-list-date">14 Jan</span>
        </li>
        <li>
          <img src="https://cdn2.iconfinder.com/data/icons/avatar-2/512/carla_girl-128.png" alt="User Image"/>
          <a class="users-list-name" href="#">Nora</a>
          <span class="users-list-date">15 Jan</span>
        </li>
        <li>
          <img src="https://cdn2.iconfinder.com/data/icons/avatar-2/512/hena_woman_face-128.png" alt="User Image"/>
          <a class="users-list-name" href="#">Nadia</a>
          <span class="users-list-date">15 Jan</span>
        </li>
      </ul><!-- /.users-list -->
    </div><!-- /.box-body -->
    <div class="box-footer text-center">
        <a href="javascript::" class="uppercase">View All Users</a>
    </div><!-- /.box-footer -->
</div>

Something like that. Now, in the user table in my database, I added a date_added column and I manually put dates in row.

Do I loop the data? Or use a widget? I don't know how else I should implement this.

EDIT

My controller:

public function actionIndex()
{
    if(Yii::$app->user->isGuest){
        return $this->render('../site/index');
    }
    else{  
        $latestStaffMembers = User::find()->orderBy(['date_added' => SORT_DESC])->limit(8);   
        return $this->render('dashboard', [
            'latestStaffMembers' => $latestStaffMembers,
        ]);
    }        
}

In my view:

<?php foreach ($latestStaffMembers as $user) { ?>
  <li>
      <img src="<?php echo $user->avatar; ?>" alt="User Image"/>
      <a href="#"><?= $user->username ?></a>
      <span ><?= $user->date_added ?></span>
  </li>
<?php } ?> 

Then I get this error:

Trying to get property of non-object

I tried var-dumping $user and it says null.

Upvotes: 0

Views: 263

Answers (1)

robsch
robsch

Reputation: 9728

I'm not sure if this is what you want. I hope it helps somehow.

In your controller action:

$latestStaffMembers = User::find()->orderBy(['date_added' => SORT_DESC])->limit(8)->all();
return $this->render('some-view-file', [
    'latestStaffMembers' => $latestStaffMembers,
]);

In your view:

<?php foreach ($latestStaffMembers as $user) { ?>
    <li>
        <img src="<?= $user->imagePath ?>" alt="User Image"/>
        <a class="users-list-name" href="#"><?= $user->name ?></a>
        <span class="users-list-date"><?= Yii::$app->formatter->asDate($user->dateAdded, 'd m'); ?></span>
    </li>
<?php } ?>

Btw: I saw !User::isBizAdmin() in your code. Is it yours? I would not just hide the list if it is important that only admins may see that. Just don't print it if user is not admin.

Upvotes: 1

Related Questions