Contorizare click-uri

laravel

(Andreiasi Marian) #1

Salutări, am o platformă de genul PTC și aș dorii să contorizez click-urile date pe o reclamă și adresa IP a utilizatorului, salvând informațiile în baza de date. Cum aș putea face lucrul acesta?

Codul paginii de reclame

@extends('layouts.dashboard')
@section('title', 'View All Available Ads')
@section('content')



    <div class="row">
        <div class="col-md-12">
            <div class="card">
                <div class="card-header card-header-icon" data-background-color="green">
                    <i class="material-icons">important_devices</i>
                </div>
                <br>
                <h4 class="card-title">All Available Ads</h4>
                <div class="card-content">
                    <br>

                    @if(count($adverts) > 0)
                        <div class="table-responsive">

                            <table class="table">
                                <thead>
                                <tr>
                                    <th class="text-center">ID</th>
                                    <th>Ad Title</th>
                                    <th>Ad Rewards</th>
                                    <th>Status</th>
                                    <th>Action</th>

                                </tr>
                                </thead>
                                <tbody>

                                @php $id=0;@endphp
                                @foreach($adverts as $advert)
                                    @php $id++;@endphp

                                    <tr>
                                        <td>{{ $id }}</td>
                                        <td>{{ $advert->ptc->title }}</td>
                                        <td>{{config('app.currency_symbol')}} {{ $advert->ptc->rewards +0 }}</td>
                                        <td>
                                            @if($advert->status == 0)
                                                <span class="btn btn-danger"><i class="material-icons">edit</i> Not Show</span>
                                            @else
                                                <span class="btn btn-primary"><i class="material-icons">edit</i> Viewed</span>
                                            @endif
                                        </td>

                                        <td >
                                            @if($advert->status == 0)
                                                <a href="{{route('userCashLinks.show', $advert->id)}}" type="button" rel="tooltip" class="btn btn-info">
                                                    <i class="material-icons">edit</i>
                                                    View Ads
                                                </a>
                                            @else
                                                <span class="btn btn-primary"><i class="material-icons">edit</i> Viewed</span>
                                            @endif
                                        </td>



                                    </tr>

                                @endforeach


                                </tbody>

                            </table>



                        </div>
					@else

                        <h1 class="text-center">No Advertisement Right Now</h1>
                    @endif
                    <div class="row">
                        <div class="col-sm-6 col-sm-offset-5">

                            {{$adverts->render()}}

                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>



@endsection

Baza de date:


(Marian Popescu) #2

Păi spune-ne cum salvezi IP-urile, ai făcut o tabelă pivot sau cum?
Poți rezolva tot cu o tabelă, gen user_clicks cu user_id, ad_id, ip_address, clicks, timestamps


(Andreiasi Marian) #3

Fix așa am și acum, pe mine mă interesează partea de PHP de data asta, cum aș putea face să contorizez click-urile în coloana clicks


(Floki) #4
  1. capturezi evenimentul click în browser (javascript)
  2. transmiți informația la server (ajax)
  3. înregistrezi informația în db

Tu întrebi de pasul 3. Ai făcut pașii 1-2?


(Cristian Nebunu) #5

Folosesti blade deci presupun ca lucrezi cu Laravel. Exista pe request metoda care iti returneaza ip-ul:

request()->ip()

(Andreiasi Marian) #6

Dacă aș scrie tot codul necesar în partea de view fără să mă mai folosesc de altă rută ar fi ok?


(Dumi Mars) #7

NU, nu este ok


(Andrei Avram) #8

De ce nu este?


(Dumi Mars) #9

Daca am inteles bine e in laravel, practic poti face asta, dar ca structura a codului nu e frumos.


(Andrei Avram) #10

Poti da detalii, te rog?


(Dumi Mars) #11

Nu, vreu sa dau detalii, e opinia mea si fac ce vreau cu ea :smiley: :smiley:


(cosmos) #12

Sincer nu cred ca ar fi ok.

View ar fin partea de afisare a informatiilor si numai aia ar trebui sa faca. Tot ce tine de backend, ar trebui sa fie treaba back-enddului


(Andreiasi Marian) #13

Până la urmă toată treabă se face cu increment, ideea e că nu știu exact cum aș putea începe.


(Andrei Avram) #14

Poate pe unii ii ajuta sa-ti argumentezi opinia, sa inteleaga si DE CE, nu doar DA/NU.


(Serghei Amelian) #15

Păi ce rost mai are să foloseşti framework-uri cu denumiri care mai de care mai fancy dacă tot le faci varză? :slight_smile: Bănuiesc că “view” nu se cheamă aşa doar pentru că nu au găsit altă rimă, ci că pur şi simplu aia e partea de afişare, nu de efectuat operaţii cu baza de date.


(Dumi Mars) #16

Daca a studiat framework-ul laravel, cred ca a invatat MVC pentru a aplica.

Iar pe tine @msd te am inteles, mi-ai dat in obraz, ca fiecare raspuns oferit de mine sa fie si explicat. Multumesc pentru feedback :smiley:


(Andreiasi Marian) #17

Inca ma bate grav problema asta :))


(cosmos) #18

pai bate-o si tu pe ea !

in alta ordine de idei

  1. pe acel link pui onclick=clicks()
  2. initializezi o variabila cu 0 si apoi o incrementezi
  3. trimiti variabila click care are nr de click-uri la baza de date. Poti folosi ori fetch ori alt ceva

Pt ip poate trebuie sa folosesti ce stie acel Blade din Laravel. Cred ca ce a zis @Cristi_Nebunu, te ajuta pt partea de ip. Cred ca ar fi bine ca mai intai sa setezi o sesiune pt user-ul logat.

Edit: Am adaugat si partea de trimitere la server. De chestiile comentate este posibil, sau nu, sa ai nevoie. Cauti si tu pe mdn ce fac

Atat


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    let clicks = 0;
    const url = `your_url`;
    function clickMe() {
        clicks += 1;
        document.getElementById("clicks").innerHTML = clicks;
        sendClicks(url, {nr_clicks: clicks, ip: "192.168.0.45"})

    }

    function sendClicks(url = ``, data = {}){
        return fetch(url, {

            method: "post",
            //mode: "cors",
            //cache: "no-cache",
            //credentials: "same-origin",
            headers: {
                'Content-Type': 'application/json'
            },
            //redirect: "follow",
            //referrer: "no-referrer",
            body: JSON.stringify(data),

        })
        .then(response => response.json())
            .then(data => console.log(data))
            .catch(err => console.error(err));

    }
</script>
<a href="https://stackoverflow.com/questions/22402777/html-javascript-button-click-counter" onclick="clickMe()" target="_blank">Click</a>
<p>Clicks: <a id="clicks">0</a></p>
</body>


</html>

Contorizare număr click-uri și salvare adresă ip
(eduard) #19

Eu personal nu as reinventa roata, Piwik e super ok si te scuteste de implementarea rapoartelor uzuale.


(Stanciu Bogdan Mircea) #20

Este recomandad ca View-urile și Controler-ele să își păstreze scopul. View afișează, controler procesează. Un prim beneficiu al acestei reguli ar fi faptul că astfel se evită codul de tip legacy: testele sunt mai ușor de scris, codul mai ușor de citit/interpretat/modificat.