Php Laravel Yorum ve Oylama Sistemi

İyi günler bu yazımda sizlere kısaca yorum yapma ve puanlama sistemi nasıl olur onu anlatacağım.Bu yazımda Php programlama dilinin Laravel framework’ünü kullandım.Laravel ile ilgili detaylara girmiyorum onu başka yazılarımda anlatabilirim.

Laravel framework MVC programlama mantığında Php yazılımları yapmaya ve kendine has özellikleri ile çok sevdiğim bir frameworktür.Bu örneği uygulayabilmek için bilgisayarınızda composer ve Laravel yüklü olmalıdır.İsterseniz salt Php ile de örneği uygulayabilirsiniz.

Laravel Kurulumu

Mysql’de ‘yorumlar’ adında bir tablo oluşturalım.Tabloda created_at ve updated_at kolonlarını Laravel standart olarak istiyor.Eğer istemezseniz silip model içinde $timestamp=false yapabilirsiniz.

CREATE TABLE `yorumlar` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `yorum` text NOT NULL,
  `yildiz` int(11) NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

Daha sonra Laravel projemizde Yorum modeli oluşturuyoruz.

YorumModel.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class YorumModel extends Model
{
    protected $table="yorumlar";
    protected $fillable=["yorum","yildiz"];
}

Daha sonra ise routes/web.php içine yönlendirmelerimizi ekliyoruz.

Route::get("/yorum","YorumController@getYorum");
Route::post("/yorum","YorumController@postYorum");

yorum.blade.php

<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Php Yorum - Fatih Demirağ</title>
</head>
<body>
<form action="" method="post">
    {{csrf_field()}}
    <textarea cols="50" rows="10" name="yorum"></textarea>
    <br>
    <select name="yildiz">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
    </select>
    <br>
    <input value="Yorum Yap" type="submit">
</form>


<div>
    <div>
        <h1>
            {{$yorumOrtalama}} / 5</h1>
        <div>
            Toplam {{$yorumToplam}} Yorum
        </div>
    </div>
    <div>
        5  <span >{{$yildizlar[4]}}%</span>
    </div>
    <div>
        4  <span >{{$yildizlar[3]}}%</span>
    </div>
    <div>
        3  <span >{{$yildizlar[2]}}%</span>
    </div>
    <div>
        2  <span >{{$yildizlar[1]}}%</span>
    </div>
    <div >
        1  <span >{{$yildizlar[0]}}%</span>
    </div>
</div>
</body>
</html>

Yönlendirmeleri eklendikten sonra ise controller dosyası içinde metodlarımızı oluşturuyoruz.

public function getYorum()
{
    $yildizToplam=DB::table("yorumlar as a")
        ->sum("a.yildiz");

    $yorumToplam=DB::table("yorumlar as a")
        ->count("a.id");

    $yildizlar=array();
    for ($i=1;$i<=5;$i++)
    {
        $yildizOran=DB::table("yorumlar as a")
            ->where("a.yildiz","=",$i)
            ->count("a.id");
        array_push($yildizlar,intval(($yildizOran/$yorumToplam)*100));
    }

    return view("yorum")->with("yorumOrtalama",number_format($yildizToplam/$yorumToplam,1,',',','))->with("yorumToplam",$yorumToplam) ->with("yildizlar",$yildizlar);
}
public function postYorum(Request $request)
{
    $yorumEkle=YorumModel::create(["yorum"=>$request->yorum,"yildiz"=>$request->yildiz]);
    if ($yorumEkle)
        return "Yorum eklendi.";
    else
        return "Yorum eklenemedi.";
}

getYorum fonksiyonunda sayfamızı çağırdık,postYorum sayfasında ise yorumumuzu ekledim.Blade dosyası içinde görünümlerizi ayarladık ve yorumların ortalaması için hesaplama yaptım.

Sonuç olarak yorum sistemi yapmış bulunduk.Kullanıcı işlemli bir web sitesiniz varsa ve kullanıcı yorum ve oylama yapmanı gerekirse işinize yarayacak bir örnek olacaktır.

Özetlemek gerekirse yorumlar tablosuna yorum ve yıldız sayısını ekledim.Daha sonra eklediğimiz yıldız sayısını ve ortalamasını aldım.Daha sonra ise hangi yıldızdan kaç tane verilmiş onu döngü içine alarak yazdırdım.

Yukarı Çık
Size nasıl yardımcı olabilirim ?