コード例 #1
0
 /**
  * Просмотр карточки документа
  * @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]);
 }
コード例 #2
0
ファイル: Document.php プロジェクト: lowbase/yii2-document
 /**
  * Просмотры документа
  * @return \yii\db\ActiveQuery
  */
 public function getVisits()
 {
     return $this->hasMany(Visit::className(), ['document_id' => 'id']);
 }
コード例 #3
0
 /**
  * Публичное отображение документа
  * @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]);
 }
コード例 #4
0
ファイル: Visit.php プロジェクト: lowbase/yii2-document
 /**
  * Получить просмотры документа/ов
  * при 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;
 }