• 06-11-2020, 01:21:58
    #1
    Herkese merhaba php ile kodlarığım e-ticaret sitesinde peket ürün mantığı yapmak istiyorum.
    Örneğin yemek odası diye bir ürün var bunun alt ürünleri olarak tv ünitesi vs var bu şekilde bişey yapmak istiyorum
  • 06-11-2020, 01:46:14
    #2
    Alt ürün diye bir tablo açarsın, standart değeri 0 olur eğer id alırsa alt ürün olarak yazdırırsın.
  • 06-11-2020, 13:50:01
    #3
    Tüm parçaları birer ürün olarak girersin. Takımlar için ayrı bir tablo yaparsın product id leri eklersin. Composite design pattern ile yemek odası takımını oluşturursun. Zevklide bir iş olur.

    Yemek Odası Takımları, Yatak Odası Takımları gibi kategorilerin var diyelim.
    Takımlar için tablonun adının product_group olduğunu varsayalım. id, category_id, name... gerisini sen bilirsin priority, status vs ne eklemek istersen.
    (ek olarak group images vs gibi ayrı tablolarında görsellerin için olabilir. product images dan ayrı olarak.)
    Group product ları için product_group_products diye bir tablon olduğunu düşünelim birde. id, product_group_id, product_id... Takımı oluşturan her product için bir kayıt buraya.

    Şimdi Yemek Takımları kategorisine tıkladığında product_group ları çekersin ve listelersin. Destek Yemek Odası takımı adında bir takımın var diyelim. Bunun detayına tıkladığında product_group_products tablosundan productları çekersin.

    Şimdi çokomelli kısmına gelelim;

    Sepette, kargoda vs her yerde normalde methdoların Product diye bir class alıyor değil mi? Bunun yerine tüm takımı bir ürün gibi sepete atmak istiyorsun.

    Aşağıda kabataslak r10 editöründen class ları yazıyorum. Tabi tamamını değilde konuyu anlatabileceğim kadarını.

    class Cart
    {
         public function addProduct(ProductInterface $product){}
    }
    class Product implements ProductInterface
    {
        private $name;
        private $price;
    
       public function getName()
       {
          return $this->name;
       }
    
       public function setName(string $name)
       {
          $this->name = $name;
    
          return $this;
       }
    
       public function getPrice()
       {
          return $this->name;
       }
    
       public function setPrice(float $price) // money class kullanılabilir şimdilik float $price olsun.
       {
          $this->price = $price;
    
          return $this;
       }
    }
    
    class ProductGroup implements ProductInterface
    {
        private $name; // group name
    
        private $products = [];
    
       public function addProduct(ProductInterface $product)    
       {        
          if (!array_search($product, $this->products)) {            
             $this->products[] = $product;        
          }    
       }
       public function removeProduct(ProductInterface $product)    
       {        
           if ($key = array_search($product, $this->products)) {            
              unset($this->products[$key]);        
           }    
       }
    
       public function getProducts()
       {
          return $this->products;
       }
    
       //Şimdi product interface de mesela getAmount var diyelim. Burada tek product amount u yerine takımın parasını hesaplaman lazım.
       public function getAmount()
       {
          $amount = 0;
          foreach($this->products as $product) {
             $amount += $product->getAmount();
          }
    
          return $amount;
       }
    
    }
    Şimdi sepete eklerken, kargo hesaplarken vs her yere bu ProductGroup class ını verebilirsin. ProductInterface buralarda kullanacağın methodları içermeli. getAmount gibi. DB den çektiğin takıma ait tüm ürünleri addProduct ile ekleyebilirsin. İstersen removeProduct methodunu kullanarak takımdan istediğin parçayı çıkarabilirsin.

    Kolaylıklar dilerim.