. * */ namespace Vvveb\Controller\Cart; use \Vvveb\Sql\AttributeSQL; use \Vvveb\Sql\ProductSQL; use Vvveb\Controller\Base; use function Vvveb\session as sess; use Vvveb\System\Cart\Currency; use Vvveb\System\Cart\Tax; use Vvveb\System\Images; use function Vvveb\url; class Compare extends Base { function index() { $product_id = $compare = sess('compare'); //[18, 19, 17, 16]; $results = []; $names = []; $specs = []; if ($product_id) { $names = []; $prod = new ProductSQL(); $results = $prod->getAll(['product_id' => $product_id] + $this->global); $category = new AttributeSQL(); $attributes = $category->getAll(['product_id' => $product_id] + $this->global); if (isset($attributes['attribute'])) { foreach ($attributes['attribute'] as $attr) { $attrs[$attr['product_id']][$attr['attribute_id']] = $attr['value']; $names[$attr['attribute_id']] = $attr['name']; } } if ($results && isset($results['product'])) { $tax = Tax::getInstance($this->global); $currency = Currency::getInstance($this->global); foreach ($results['product'] as $id => &$product) { if (isset($product['image']) && $product['image']) { $product['image'] = Images::image($product['image'], 'product', 'thumb'); } $url = ['slug' => $product['slug'], 'product_id' => $product['product_id']]; $product['url'] = url('product/product/index', $url); $product['add_cart_url'] = url('cart/cart/add', ['product_id' => $product['product_id']]); $product['remove_url'] = url('cart/compare/remove', ['product_id' => $product['product_id']]); $product['buy_url'] = url('checkout/checkout/index', ['product_id' => $product['product_id']]); $product['price_tax'] = $tax->addTaxes($product['price'], $product['tax_type_id']); $product['price_tax_formatted'] = $currency->format($product['price_tax']); $product['price_formatted'] = $currency->format($product['price']); } $specs = []; foreach ($names as $attribute_id => $name) { foreach ($results['product'] as $prod) { $id = $prod['product_id']; $specs[$attribute_id][$id] = $attrs[$id][$attribute_id] ?? '-'; } } } } $this->view->products = $results; $this->view->names = $names; $this->view->specs = $specs; } private function action($action) { $productId = (int)($this->request->get['product_id'] ?? $this->request->post['product_id'] ?? false); if ($productId) { $compare = sess('compare'); switch ($action) { case 'add': $compare[$productId] = $productId; break; case 'remove': unset($compare[$productId]); break; } sess(['compare' => $compare]); } $this->index(); } function add() { return $this->action('add'); } function remove() { return $this->action('remove'); } }