For example, I have this in components/controller.php:
class Controller extends CController {
public $sidebar_content = '';
public $users_online = null;
public $visitorTableName = '{{visitor}}';
protected function beforeAction($action) {
if (isset(Yii::app()->user->id)) {
$user_id = Yii::app()->user->id;
//TODO: Don't do this every time the app runs??
$sql = "SELECT user_id FROM {$this->visitorTableName} WHERE user_id=:user_id";
if (Yii::app()->db->createCommand($sql)->bindValue(':user_id', $user_id)->queryScalar() === false)
$sql = "INSERT INTO {$this->visitorTableName} (user_id, last_activity) VALUES (:user_id, :last_activity)";
else
$sql = "UPDATE {$this->visitorTableName} SET last_activity=:last_activity WHERE user_id=:user_id";
Yii::app()->db->createCommand($sql)->bindValue(':user_id', $user_id)->bindValue(':last_activity', date('Y-m-d H:i:s'))->execute();
}
$users = Yii::app()->db->createCommand()
->select('u.id, username, TIMESTAMPDIFF(MINUTE, last_activity, UTC_TIMESTAMP())')
->from('{{usergroups_user}} u')
->join("{$this->visitorTableName} v", 'u.id=v.user_id')
->where('TIMESTAMPDIFF(MINUTE, last_activity, UTC_TIMESTAMP()) < 5')
->queryAll();
$this->users_online = $users;
$this->beginWidget('system.web.widgets.CClipWidget', array('id' => 'users_online'));
if (isset($this->users_online)) {
foreach ($this->users_online as $user)
if (isset($user)) {
echo '<b>' . ucfirst($user['username']) . '</b> <small>(';
echo 'Idle for ' . $user['TIMESTAMPDIFF(MINUTE, last_activity, UTC_TIMESTAMP())'] . ' minutes)</small><br/>';
}
} else {
echo 'none';
}
$this->endWidget();
$this->beginWidget('system.web.widgets.CClipWidget', array('id' => 'site_statistics'));
echo CHtml::openTag('p');
echo 'online: ' . Yii::app()->usercounter->getOnline() . '<br />';
echo 'today: ' . Yii::app()->usercounter->getToday() . '<br />';
echo 'yesterday: ' . Yii::app()->usercounter->getYesterday() . '<br />';
echo 'total: ' . Yii::app()->usercounter->getTotal() . '<br />';
echo 'maximum: ' . Yii::app()->usercounter->getMaximal() . '<br />';
echo 'date for maximum: ' . date("Y-m-d H:i:s", Yii::app()->usercounter->getMaximalTime()) . '<br />';
echo CHtml::closeTag('p');
$this->endWidget();
return true;
}
Maybe not a prime example of good coding practices, but at least it makes it possible to use those two clips anywhere.

Without cluttering up controllers/views.