diff --git a/common/modules/banners/BannersModule.php b/common/modules/banners/BannersModule.php index 657f209..9809133 100644 --- a/common/modules/banners/BannersModule.php +++ b/common/modules/banners/BannersModule.php @@ -35,6 +35,11 @@ class BannersModule extends \yii\base\Module implements ModuleInterface $app->params['search_rules'][] = "SELECT title, title as content, CONCAT('/banners/manage/banner/view/', id) AS url FROM {{banners}}"; $app->getUrlManager()->addRules([ + 'banner/view' => 'banners/banner/view', + 'banner/click' => 'banners/banner/click', + ]); + + $app->getUrlManager()->addRules([ 'banners/manage/banner/view/' => 'banners/manage/banner/view', ]); diff --git a/common/modules/banners/controllers/BannerController.php b/common/modules/banners/controllers/BannerController.php new file mode 100644 index 0000000..466b659 --- /dev/null +++ b/common/modules/banners/controllers/BannerController.php @@ -0,0 +1,49 @@ +service = $service; + } + + public function actionView() + { + $id = filter_input(INPUT_POST, 'id', FILTER_VALIDATE_INT); + if (\Yii::$app->request->isAjax && $id) { + $banner = $this->findModel( $id ); + $this->service->addView( $banner ); + } + } + + public function actionClick() + { + $id = filter_input(INPUT_POST, 'id', FILTER_VALIDATE_INT); + if (\Yii::$app->request->isAjax && $id) { + $banner = $this->findModel( $id ); + $this->service->addClick( $banner ); + } + } + + protected function findModel($id): Banner + { + if (($model = Banner::findOne($id)) !== null) { + return $model; + } + throw new NotFoundHttpException('The requested banner does not exist.'); + } +} \ No newline at end of file diff --git a/common/modules/banners/services/BannerManageService.php b/common/modules/banners/services/BannerManageService.php index 8d33153..c617dc0 100644 --- a/common/modules/banners/services/BannerManageService.php +++ b/common/modules/banners/services/BannerManageService.php @@ -79,4 +79,16 @@ class BannerManageService $banner = $this->repository->get($id); $this->repository->remove($banner); } + + public function addView(Banner $banner) + { + $banner->views++; + $this->repository->save($banner); + } + + public function addClick(Banner $banner) + { + $banner->clicks++; + $this->repository->save($banner); + } } diff --git a/common/modules/banners/widgets/views/banner.php b/common/modules/banners/widgets/views/banner.php index 5104645..76c1eb5 100644 --- a/common/modules/banners/widgets/views/banner.php +++ b/common/modules/banners/widgets/views/banner.php @@ -5,14 +5,35 @@ */ use yii\helpers\Html; +use yii\helpers\Url; /** * @var $this \yii\web\View * @var $banner \common\modules\banners\entities\Banner; */ +$banner_id = 'banner_' . $banner->id; +$view_url = Url::to(['/banner/view']); +$click_url = Url::to(['/banner/click']); +$js = <<id}" } + }); + }); + + $.ajax({ + method: "POST", + url: "{$view_url}", + data: { id: "{$banner->id}" } + }); +JS; +$this->registerJs($js, $this::POS_READY); ?> image), $banner->url, [ - 'target' => $banner->target + 'target' => $banner->target, + 'id' => $banner_id, ]) ?>