Así que agregué este contador de vistas de página a mi aplicación que cuenta cada visita en una página de artista. En este momento, si actualiza la página, el contador es +1 por cada actualización.
Mi pregunta es ¿cómo puedo contar las visitas únicas solo por día?
Mi controlador:
if ( $artist ) {
$getartist = $this->_artist->get($artist, "slug");
if ( $getartist ) {
$getsongs = $this->_song->collections($input, $getartist->id, "ASC");
$this->_artist->updateVisits($getartist->id);
$data = [
"is_artist" => true,
"artist" => $getartist,
"songs" => $getsongs,
"randomsongs" => $this->randomsongs,
];
return $this->view("index", $data);
}
}
El código de contador es:
$this->_artist->updateVisits($getartist->id);
Luego, en mi ArtistRepository:
public function updateVisits($artist_id)
{
$artist = $this->model->where("id",$artist_id)->first();
$artist->visits = $artist->visits+1;
$artist->save();
}
Entonces, ¿cómo puedo evitar que el contador cuente si el usuario actualiza la página?
Respuestas
0 para la respuesta № 1Ok, encontré una solución a esto con cookies Aquí está mi código.
public function updateVisits($artist_id)
{
$artist = $this->model->where("id",$artist_id)->first();
// Check if cookies exist
if(!isset($_COOKIE["visited_id" . $artist_id])) {
// If not set cookie and pass counter
setcookie("visited_id" . $artist_id, $artist_id, time()+30); /* expire in seconds */
$artist->visits = $artist->visits+1;
$artist->save();
// If cookie exist on user computer
} else {
//do nothing
}
}
0 para la respuesta № 2
Primero agrega un date
campo encendido DB table
. Luego cambie su función a la siguiente-
public function updateVisits($artist_id)
{
$artist = $this->model->firstOrCreate(["id" => $artist_id,"your_date_field_name"=>date("Y-m-d")]);
$artist->visits = $artist->visits+1;
$artist->save();
}
Y no te olvides de añadir id, your_date_field_name
en fillable
matriz para ser mass
asignable.