Pereiti prie turinio

Laravel Recently viewed products :: HELP


Rekomenduojami pranešimai

aš kažkaip įtariu, kad šią klasę, ypač addProduct() f-ją būtų galima tikrai supaprastint, tik jau tiek akys išvarvėjo, kol vien tokią parašiau, kad nebegaliu, prašau Jūsų pagalbos.

 

EDIT: šiek tiek apsitvarkiau, tačiau tik vizualiai

 

<?php

namespace App\Widgets;

use Arrilot\Widgets\AbstractWidget;
use App\Models\Product;

class RecentlyViewedProducts extends AbstractWidget {

   protected $config = [
       'items' => [],
       'item' => null
   ];

   protected $session_key = 'products.recently_viewed';

   protected $show = 4;

   public function run()
   {
       if (!is_null($this->config['item'])) $this->addProduct($this->config['item']);

       return view('widgets.recently_viewed_products', [
           'config' => [
               'items' => $this->getProducts()
           ],
       ]);
   }

   private function addProduct($id) {
       //session()->forget($this->session_key);

       $product = Product::where('id', $id)->with('images')->firstOrFail();
       $products = $this->getProducts();

       if (session()->has($this->session_key)) {
           foreach($products as $index => $item) {
               $exist = false;

               if ($product->id == $item->id) {
                   $exist = true;

                   break;
               }
           }
           if (!$exist) session()->push($this->session_key, $product);
       } else {
           session()->push($this->session_key, $product);
       }

       if (count($products) > $this->show && !$exist) {
           $array = session()->pull($this->session_key, []);
           unset($array[min(array_keys($products))]);
           session()->put($this->session_key, $array);
       }
   }

   private function getProducts() {
       return session()->get($this->session_key);
   }
}

 

product/show.blade.php

@extends('website.layouts.main')

@section('content')
   ...
@endsection

@section('bottom_content')
   @widget('recently-viewed-products', ['item' => $result->id])
@endsection

Redagavo Donatis07
Nuoroda į pranešimą
Dalintis kituose puslapiuose

daugiau minčių nebeturiu :/

<?php

namespace App\Widgets;

use Arrilot\Widgets\AbstractWidget;
use App\Models\Product;

class RecentlyViewedProducts extends AbstractWidget {

   protected $config = [
       'items' => [],
       'item' => null
   ];

   protected $session_key = 'products.recently_viewed';

   protected $show = 4;

   public function run()
   {
       if (!is_null($this->config['item'])) $this->addProduct($this->config['item']);

       return view('widgets.recently_viewed_products', [
           'config' => [
               'items' => $this->getProducts()
           ],
       ]);
   }

   private function addProduct($id) {
       //session()->forget($this->session_key);

       $product = Product::where('id', $id)->with('images')->firstOrFail();
       $session = $this->getProducts();

       $exist = false;
       if (session()->has($this->session_key)) {
           foreach($session as $item) {
               if ($product->id == $item->id) {
                   $exist = true;
                   break;
               }
           }
       }
       if (!$exist) session()->push($this->session_key, $product);

       if (count($session) > $this->show && !$exist) {
           $new_session = session()->pull($this->session_key, []);
           unset($new_session[min(array_keys($session))]);

           session()->put($this->session_key, $new_session);
       }
   }

   private function getProducts() {
       return session()->get($this->session_key);
   }
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose
<?php

namespace App\Widgets;

use Arrilot\Widgets\AbstractWidget;
use App\Models\Product;

class RecentlyViewedProducts extends AbstractWidget {

   protected $config = [
       'items' => [],
       'item' => null
   ];

   protected $session_key = 'products.recently_viewed';

   protected $show = 4;

   public function run()
   {
       if (!is_null($this->config['item']))
           $this->addProduct($this->config['item']);

       return view('widgets.recently_viewed_products', [
           'config' => [
               'items' => $this->getProducts()
           ],
       ]);
   }

   private function addProduct($id) {

       $product = Product::where('id', $id)->with('images')->firstOrFail();
       $products = $this->getProducts();

       // If not Exits
       if (!$products[$product->id]) {
           // Add to array
           $products[$product->id] = $product;
           // If count > of limit
           if (count($products) > $this->show) {
               array_shift($products);
           }
           // Save
           session()->put($this->session_key, $products);
       }
   }

   private function getProducts() {
       $products = session()->get($this->session_key);
       return $products ? $products : [];
   }
}

Redagavo IvanDanilov
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...