diff --git a/core/lib/Thelia/Config/Resources/routing/front.xml b/core/lib/Thelia/Config/Resources/routing/front.xml index 3531487ce..c3dc0fdcf 100755 --- a/core/lib/Thelia/Config/Resources/routing/front.xml +++ b/core/lib/Thelia/Config/Resources/routing/front.xml @@ -4,12 +4,15 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd"> - diff --git a/core/lib/Thelia/Controller/Front/CartController.php b/core/lib/Thelia/Controller/Front/CartController.php index ae116b40a..afbcfaf7f 100755 --- a/core/lib/Thelia/Controller/Front/CartController.php +++ b/core/lib/Thelia/Controller/Front/CartController.php @@ -61,6 +61,13 @@ class CartController extends BaseFrontController $message = $e->getMessage(); } + // If Ajax Request + if ($this->getRequest()->isXmlHttpRequest()) { + $request = $this->getRequest(); + $request->attributes->set('_view', "includes/mini-cart"); + } + + if ($message) { $cartAdd->setErrorMessage($message); $this->getParserContext()->addForm($cartAdd); diff --git a/core/lib/Thelia/Core/Template/Loop/Cart.php b/core/lib/Thelia/Core/Template/Loop/Cart.php index 5dc40218b..be39371ad 100755 --- a/core/lib/Thelia/Core/Template/Loop/Cart.php +++ b/core/lib/Thelia/Core/Template/Loop/Cart.php @@ -12,8 +12,11 @@ namespace Thelia\Core\Template\Loop; use Thelia\Core\Template\Element\BaseLoop; use Thelia\Core\Template\Element\LoopResult; use Thelia\Core\Template\Element\LoopResultRow; +use Thelia\Core\Template\Loop\Argument\Argument; use Thelia\Core\Template\Loop\Argument\ArgumentCollection; use Thelia\Model\CountryQuery; +use Thelia\Type; +use Thelia\Type\TypeCollection; class Cart extends BaseLoop { @@ -40,7 +43,8 @@ class Cart extends BaseLoop protected function getArgDefinitions() { return new ArgumentCollection( - + Argument::createIntTypeArgument('limit'), + Argument::createAnyTypeArgument('position') ); } @@ -74,6 +78,7 @@ class Cart extends BaseLoop { $cart = $this->getCart($this->request); + $cartItems = $cart->getCartItems(); $result = new LoopResult($cartItems); @@ -81,9 +86,32 @@ class Cart extends BaseLoop return $result; } + $limit = $this->getLimit(); + + $countCartItems = count($cartItems); + + if($limit <= 0 || $limit >= $countCartItems){ + $limit = $countCartItems; + } + + $position = $this->getPosition(); + + if(isset($position)){ + if($position == "first"){ + $limit = 1; + $cartItems = array($cartItems[0]); + }else if($position == "last"){ + $limit = 1; + $cartItems = array(end($cartItems)); + } + + // @TODO : if the position is a number + } + $taxCountry = CountryQuery::create()->findPk(64); // @TODO : make it magic; - foreach ($cartItems as $cartItem) { + for ($i=0; $i<$limit; $i ++) { + $cartItem = $cartItems[$i]; $product = $cartItem->getProduct(); $productSaleElement = $cartItem->getProductSaleElements(); diff --git a/templates/default/assets/js/script.js b/templates/default/assets/js/script.js index 2c8333ef2..d53795261 100644 --- a/templates/default/assets/js/script.js +++ b/templates/default/assets/js/script.js @@ -223,10 +223,12 @@ var $old_price_container = $(".old-price", $("#product-details")); + var $select_quantity = $(this).find(":selected").attr("data-quantity"); + // Switch Quantity in product page $("select", $(".product-options")).change(function(){ - var $select_quantity = $(this).find(":selected").attr("data-quantity"); + $select_quantity = $(this).find(":selected").attr("data-quantity"); var $old_price = $(this).find(":selected").attr("data-old-price"); var $best_price = $(this).find(":selected").attr("data-price"); @@ -278,7 +280,31 @@ }); } + $(".form-product").submit(function(){ + var url_action = $(this).attr("action"); + var $cartContainer = $(".cart-container"); + $.ajax({type:"POST", data: $(this).serialize(), url:url_action, + success: function(data){ + console.log($(data).html()); + $cartContainer.html($(data).html()); + + $.ajax({url:"ajax/addCartMessage", + success: function(data){ + bootbox.dialog({ + message : data, + buttons : {} + }); + } + }); + }, + error: function(){ + console.log('Error.'); + } + }); + + return false; + }); $('#limit-top').change(function(e){ window.location = $(this).val() diff --git a/templates/default/assets/less/thelia/global.less b/templates/default/assets/less/thelia/global.less index ec2eb793a..b890fe310 100755 --- a/templates/default/assets/less/thelia/global.less +++ b/templates/default/assets/less/thelia/global.less @@ -101,3 +101,22 @@ ul { } } } + + +.modal-dialog{ + td{vertical-align: middle} + + .close{ + margin: 10px; + position: relative; z-index: 10; + } + + .btn{ + margin-left: 10px; + } +} +@media screen and (min-width: 768px){ + .modal-dialog{ + width: 800px; + } +} diff --git a/templates/default/assets/less/thelia/product.less b/templates/default/assets/less/thelia/product.less index 6e65932f8..44965ed2a 100755 --- a/templates/default/assets/less/thelia/product.less +++ b/templates/default/assets/less/thelia/product.less @@ -4,6 +4,11 @@ float: right; font-size: .6em; } + h3{ + top: -14px !important; + margin: 0; + } + } @@ -143,4 +148,4 @@ min-height: 180px; height: auto!important; height: 180px; } } -} \ No newline at end of file +} diff --git a/templates/default/category.html b/templates/default/category.html index 5ed71ddf4..53a0e74eb 100644 --- a/templates/default/category.html +++ b/templates/default/category.html @@ -33,7 +33,7 @@ {/ifloop} {elseloop rel="product_list"}
- No products + {intl l="No products available in this category"}
{/elseloop} diff --git a/templates/default/includes/addedToCart.html b/templates/default/includes/addedToCart.html new file mode 100644 index 000000000..3159f1141 --- /dev/null +++ b/templates/default/includes/addedToCart.html @@ -0,0 +1,50 @@ + {loop type="cart" name="cartloop" position="last"} + + + + + + +
+ {loop name="product_thumbnail" type="image" product=$PRODUCT_ID width="218" height="146" resize_mode="borders" limit="1"} + Product #{$LOOP_COUNT} + {/loop} + +

{$TITLE}

+ {loop type="attribute_combination" name="product_options" product_sale_elements="$PRODUCT_SALE_ELEMENTS_ID"} +

{$ATTRIBUTE_TITLE}

+

{$ATTRIBUTE_AVAILABILITY_TITLE}

+ {/loop} +
+ + {if $IS_PROMO == 1} + {assign "real_price" $PROMO_TAXED_PRICE} +
{currency attr="symbol"} {$PROMO_TAXED_PRICE}
+ {currency attr="symbol"} {$TAXED_PRICE} + {else} + {assign "real_price" $TAXED_PRICE} +
{currency attr="symbol"} {$TAXED_PRICE}
+ {/if} + +
+ {/loop} + + {intl l="View cart"} + {intl l="Continue Shopping"} + + {ifloop rel="product_upsell"} + + {/ifloop} diff --git a/templates/default/includes/menu.html b/templates/default/includes/menu.html index 476e3ecd0..de39f9fe6 100644 --- a/templates/default/includes/menu.html +++ b/templates/default/includes/menu.html @@ -2,29 +2,45 @@

{intl l="Categories"}

diff --git a/templates/default/includes/mini-cart.html b/templates/default/includes/mini-cart.html index b3b8de597..6c558233b 100644 --- a/templates/default/includes/mini-cart.html +++ b/templates/default/includes/mini-cart.html @@ -1,5 +1,5 @@ {ifloop rel="cartloop"} - \ No newline at end of file diff --git a/templates/default/product.html b/templates/default/product.html index e3b054566..ab413c236 100644 --- a/templates/default/product.html +++ b/templates/default/product.html @@ -134,7 +134,7 @@ {form name="thelia.cart.add" } -
+ {form_hidden_fields form=$form} @@ -238,4 +238,6 @@ + + {/block} \ No newline at end of file