/** * Просмотр карточки документа * @param $id - ID документа * @return string * @throws NotFoundHttpException */ public function actionView($id) { $model = Document::findOne($id); if ($model == null) { throw new NotFoundHttpException(Yii::t('document', 'Запрашиваемая страница не найдена.')); } $views = Visit::getAll($model->id); // Считаем просмотры $likes = Like::getAll($model->id); // Считаем лайки return $this->render('view', ['model' => $model, 'views' => $views ? $views[0]->count : 0, 'likes' => $likes ? $likes[0]->count : 0]); }
/** * Просмотры документа * @return \yii\db\ActiveQuery */ public function getVisits() { return $this->hasMany(Visit::className(), ['document_id' => 'id']); }
/** * Публичное отображение документа * @param $alias - Url-адрес документа * @return string * @throws NotFoundHttpException */ public function actionShow($alias) { // Отображаем только опубликованные документы $model = Document::find()->where(['alias' => $alias, 'status' => Document::STATUS_ACTIVE])->one(); if ($model == null) { throw new NotFoundHttpException(Yii::t('document', 'Запрашиваемая страница не найдена.')); } Visit::check($model->id); // Фиксируем просмотр $views = Visit::getAll($model->id); // Считаем просмотры $likes = Like::getAll($model->id); // Считаем лайки // Если задан шаблон отображения, то отображаем согласно нему, иначе стандартное отображение статьи $template = isset($model->template) && $model->template->path ? $model->template->path : '@vendor/lowbase/yii2-document/views/document/template/default'; return $this->render($template, ['model' => $model, 'views' => $views ? $views[0]->count : 0, 'likes' => $likes ? $likes[0]->count : 0]); }
/** * Получить просмотры документа/ов * при shedule = flase - общее количество за все время * при shedule = true - количество просмотров, сгруппированные по дням * * @param null $document_ids - ID документа (-ов) * @param bool $shedule - включить расписание просмотров? * @return array|\yii\db\ActiveRecord[] - возвращает только дату, id документа, кол-во просмотров */ public static function getAll($document_ids = null, $shedule = false) { $table = self::tableName(); $group_by = $shedule ? 'DATE(created_at)' : 'document_id'; if ($document_ids) { $ids = is_array($document_ids) ? implode(',', $document_ids) : $document_ids; $sql = 'SELECT date(created_at) as created_at , document_id, count(document_id) as count FROM ' . $table . ' where document_id IN (' . $ids . ') GROUP BY ' . $group_by; } else { $sql = 'SELECT date(created_at) as created_at , document_id, count(document_id) as count FROM ' . $table . ' GROUP BY ' . $group_by; } $model = Visit::findBySql($sql)->all(); return $model; }