示例#1
0
 /**
  * @param Variable\Variation $variation Variation to add.
  */
 public function addVariation(Product\Variable\Variation $variation)
 {
     $this->variations[$variation->getId()] = $variation;
 }
示例#2
0
 /**
  * @param $product VariableProduct Product to fetch variations for.
  *
  * @return array List of variations.
  */
 public function getVariations($product)
 {
     $wpdb = $this->wp->getWPDB();
     $query = $wpdb->prepare("\n\t\t\tSELECT pv.ID, pva.* FROM {$wpdb->posts} pv\n\t\t\t\tLEFT JOIN {$wpdb->prefix}jigoshop_product_variation_attribute pva ON pv.ID = pva.variation_id\n\t\t\t\tWHERE pv.post_parent = %d AND pv.post_type = %s\n\t\t", array($product->getId(), \Jigoshop\Core\Types\Product\Variable::TYPE));
     $results = $wpdb->get_results($query, ARRAY_A);
     $variations = array();
     $results = array_filter($results, function ($item) {
         return $item['attribute_id'] !== null;
     });
     for ($i = 0, $endI = count($results); $i < $endI;) {
         $variation = new VariableProduct\Variation();
         $variation->setId((int) $results[$i]['ID']);
         $variation->setParent($product);
         /** @var Product $variableProduct */
         $variableProduct = $this->productService->find($results[$i]['ID']);
         $variation->setProduct($variableProduct);
         // TODO: Maybe some kind of fetching together?
         while ($i < $endI && $results[$i]['ID'] == $variation->getId()) {
             $attribute = new VariableProduct\Attribute(VariableProduct\Attribute::VARIATION_ATTRIBUTE_EXISTS);
             $attribute->setVariation($variation);
             $attribute->setAttribute($product->getAttribute($results[$i]['attribute_id']));
             $attribute->setValue($results[$i]['value']);
             if ($attribute->getAttribute() !== null) {
                 $variation->addAttribute($attribute);
             }
             $i++;
         }
         $variations[$variation->getId()] = $variation;
     }
     return $variations;
 }