Merge pull request #49 from thelia/frontend

Frontend
This commit is contained in:
Manuel Raynaud
2013-10-24 08:07:18 -07:00
56 changed files with 1396 additions and 1036 deletions

View File

@@ -1,6 +1,6 @@
{* Update an Address *}
{form name="thelia.address.update"}
{form name="thelia.admin.address.update"}
{* Capture the dialog body, to pass it to the generic dialog *}
{capture "edit_address_dialog"}

View File

@@ -29,7 +29,7 @@
<div class="form-container">
<div class="col-md-12">
{form name="thelia.customer.modification"}
{form name="thelia.admin.customer.modification"}
<form method="POST" action="{url path="/admin/customer/update/{$ID}"}" {form_enctype form=$form} class="clearfix">
<div class="row inner-toolbar clearfix">
@@ -261,7 +261,7 @@
<div id="address-update-modal"></div>
{* Add an Address *}
{form name="thelia.address.create"}
{form name="thelia.admin.address.create"}
{* Capture the dialog body, to pass it to the generic dialog *}
{capture "address_creation_dialog"}

View File

@@ -162,7 +162,7 @@
{* Adding a new Category *}
{form name="thelia.customer.creation"}
{form name="thelia.admin.customer.create"}
{* Capture the dialog body, to pass it to the generic dialog *}
{capture "customer_creation_dialog"}

View File

@@ -0,0 +1,42 @@
{extends file="layout.tpl"}
{* Body Class *}
{block name="body-class"}page-404{/block}
{* Breadcrumb *}
{block name='no-return-functions' append}
{$breadcrumbs = [
['title' => {intl l="404"}, 'url'=>{url path="/404"}]
]}
{/block}
{block name="main-content"}
<div class="main">
<article id="cart" class="col-main" role="main" aria-labelledby="main-label">
<h1 id="main-label" class="page_404">
404
<span>{intl l="The page cannot be found"}</span>
</h1>
{ifloop rel="product_upsell"}
<aside id="products-upsell" role="complementary" aria-labelledby="products-upsell-label">
<div class="products-heading">
<h3 id="products-upsell-label">{intl l="Upsell Products"}</h3>
</div>
<div class="products-content">
<ul class="products-grid product-col-5 hover-effect">
{loop name="product_upsell" type="product" promo="yes" limit="5"}
{include file="includes/single-product.html" product_id=$ID hasBtn=true hasDescription=true width="218" height="146"}
{/loop}
</ul>
</div>
</aside><!-- #products-upsell -->
{/ifloop}
</div>
{/block}

View File

@@ -0,0 +1,89 @@
{extends file="layout.tpl"}
{* Body Class *}
{block name="body-class"}page-account-password{/block}
{* Breadcrumb *}
{block name='no-return-functions' append}
{$breadcrumbs = [['title' => {intl l="Account"}, 'url'=>{url path="/account"}]]}
{$breadcrumbs = [
['title' => {intl l="Account"}, 'url'=>{url path="/account"}],
['title' => {intl l="Change Password"}, 'url'=>{url path="/account/password"}]
]}
{/block}
{block name="main-content"}
<div class="main">
<article class="col-main" role="main" aria-labelledby="main-label">
<h1 id="main-label" class="page-header">{intl l="Change Password"}</h1>
{form name="thelia.front.customer.password.update"}
<form id="form-register" class="form-horizontal" action="{url path="/account/password"}" method="post" role="form">
{form_field form=$form field='success_url'}
<input type="hidden" name="{$name}" value="{url path="/account"}" />
{/form_field}
{form_hidden_fields form=$form}
{if $form_error}<div class="alert alert-danger">{$form_error_message}</div>{/if}
<fieldset id="register-info" class="panel">
<div class="panel-heading">
{intl l="Login Information"}
</div>
<div class="panel-body">
{form_field form=$form field="password_old"}
<div class="form-group group-password_old {if $error}has-error{elseif $isPost && $value != "" && !$error}has-success{/if}">
<label class="control-label" for="{$label_attr.for}">{$label}{if $required} <span class="required">*</span>{/if}</label>
<div class="control-input">
<input type="password" name="{$name}" id="{$label_attr.for}" class="form-control" value="{$value}" {if $required} aria-required="true" required{/if}{if $error} autofocus{/if}>
{if $error }
<span class="help-block"><i class="icon-remove"></i> {$message}</span>
{assign var="error_focus" value="true"}
{/if}
</div>
</div><!--/.form-group-->
{/form_field}
{form_field form=$form field="password"}
<div class="form-group group-password {if $error}has-error{elseif $isPost && $value != "" && !$error}has-success{/if}">
<label class="control-label" for="{$label_attr.for}">{$label}{if $required} <span class="required">*</span>{/if}</label>
<div class="control-input">
<input type="password" name="{$name}" id="{$label_attr.for}" class="form-control" value="{$value}" {if $required} aria-required="true" required{/if}{if !isset($error_focus) && $error} autofocus{/if}>
{if $error }
<span class="help-block"><i class="icon-remove"></i> {$message}</span>
{assign var="error_focus" value="true"}
{/if}
</div>
</div><!--/.form-group-->
{/form_field}
{form_field form=$form field="password_confirm"}
<div class="form-group group-password_confirm {if $error}has-error{elseif $value != "" && !$error}has-success{/if}">
<label class="control-label" for="{$label_attr.for}">{$label}{if $required} <span class="required">*</span>{/if}</label>
<div class="control-input">
<input type="password" name="{$name}" id="{$label_attr.for}" class="form-control" autocomplete="off"{if $required} aria-required="true" required{/if}{if !isset($error_focus) && $error} autofocus{/if}>
{if $error }
<span class="help-block"><i class="icon-remove"></i> {$message}</span>
{assign var="error_focus" value="true"}
{/if}
</div>
</div><!--/.form-group-->
{/form_field}
</div>
</fieldset>
<div class="form-group group-btn">
<div class="control-btn">
<button type="submit" class="btn btn-register">{intl l="Change Password"}</button>
</div>
</div><!--/.form-group-->
</form>
{/form}
</article>
</div><!-- /.layout -->
{/block}

View File

@@ -19,7 +19,7 @@
<h1 id="main-label" class="page-header">{intl l="Update Profil"}</h1>
{form name="thelia.customer.update"}
{form name="thelia.front.customer.profil.update"}
{assign var="isPost" value="{$smarty.post|count}"}
<form id="form-register" class="form-horizontal" action="{url path="/account/update"}" method="post" role="form">
{form_field form=$form field='success_url'}
@@ -30,7 +30,7 @@
{if $form_error}<div class="alert alert-danger">{$form_error_message}</div>{/if}
<fieldset id="register-info" class="panel panel">
<fieldset id="register-info" class="panel">
<div class="panel-heading">
{intl l="Personal Informations"}
</div>

View File

@@ -21,7 +21,7 @@
<article class="col-main" role="main" aria-labelledby="main-label">
<h1 id="main-label" class="page-header">{intl l="Create New Address"}</h1>
{form name="thelia.address.update"}
{form name="thelia.front.address.update"}
{loop name="customer.update" type="address" customer="current" id="{$address_id}"}
<form id="form-address" class="form-horizontal" action="{url path="/address/update/{$address_id}"}" method="post" role="form">
{form_field form=$form field='success_url'}

View File

@@ -21,7 +21,7 @@
<article class="col-main" role="main" aria-labelledby="main-label">
<h1 id="main-label" class="page-header">{intl l="Create New Address"}</h1>
{form name="thelia.address.create"}
{form name="thelia.front.address.create"}
<form id="form-address" class="form-horizontal" action="{url path="/address/create"}" method="post" role="form">
{form_field form=$form field='success_url'}
<input type="hidden" name="{$name}" value="{url path="/account"}" /> {* the url the user is redirected to on login success *}

View File

@@ -27,9 +27,19 @@
$(this).addClass('open');
})
.on('mouseleave.subnav', '.dropdown', function(){
if(!$(this).hasClass('open'))
var $this = $(this);
if(!$this.hasClass('open'))
return;
$(this).removeClass('open');
//This will check if an input child has focus. If no then remove class open
if ($this.find(":input:focus").length == 0){
$this.removeClass('open');
} else {
$this.find(":input:focus").one('blur', function(){
$this.trigger('mouseleave.subnav');
});
}
});
// Tooltip
@@ -65,7 +75,6 @@
if($category_products.size() > 0){
var $parent = $category_products.parent();
$parent.on('click.view-mode', '[data-toggle=view]', function(){
if( ($(this).hasClass('btn-grid') && $parent.hasClass('grid')) || ($(this).hasClass('btn-list') && $parent.hasClass('list')))
return;
@@ -89,6 +98,32 @@
}).find(':radio:checked').trigger('change.account');
}
// Mini Newsletter Subscription
var $form_newsletter = $('#form-newsletter-mini');
if($form_newsletter.size() > 0) {
$form_newsletter.on('submit.newsletter', function(){
$.ajax({
url: $(this).attr('action'),
type: $(this).attr('method'),
data: $(this).serialize(),
dataType: 'json',
success: function(json) {
var $msg = '';
if(json.success){
$msg = json.message;
}else{
$msg = json.message;
}
bootbox.alert($msg);
}
});
return false;
});
}
// Forgot Password
/*
var $forgot_password = $('.forgot-password', $form_login);
@@ -159,6 +194,25 @@
}).filter(':has(:checked)').addClass('active');
});
// Apply validation
$('#form-contact, #form-register').validate({
highlight: function(element) {
$(element).closest('.form-group').addClass('has-error');
},
unhighlight: function(element) {
$(element).closest('.form-group').removeClass('has-error');
},
errorElement: 'span',
errorClass: 'help-block',
errorPlacement: function(error, element) {
if(element.parent('.input-group').length || element.prop('type') === 'checkbox' || element.prop('type') === 'radio'){
error.prepend('<i class="icon-remove"></i> ').insertAfter(element.parent());
}else{
error.prepend('<i class="icon-remove"></i> ').insertAfter(element);
}
}
});
if($("body").is(".page-product")){
@@ -174,10 +228,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");
@@ -229,7 +285,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){
$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()

View File

@@ -22,6 +22,7 @@
&.btn-checkout,
&.btn-checkout-next,
&.btn-checkout-home,
&.btn-contact,
&.btn-forgot,
&.btn-login,
&.btn-proceed-checkout,

View File

@@ -50,7 +50,6 @@
// Form Register
#form-address,
#form-contact,
#form-register {
.panel-body {
.control-label { .make-sm-column(3); }
@@ -65,3 +64,8 @@
.control-btn { .make-sm-column-offset(3); .make-sm-column(5); }
}
}
// Form Contact
#form-contact {
}

View File

@@ -3,6 +3,19 @@
// Main Title
.page-header { margin-top: 0; }
// 404 Page
.page_404{
color: @brand-primary;
font-size: 9em; font-weight: bold;
text-align: center;
span{
color : #CCC;
display: block;
font-size: 15px; font-weight: normal;
}
}
// Collapse
.no-js .collapse { display: block!important; }
@@ -101,3 +114,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;
}
}

View File

@@ -4,6 +4,11 @@
float: right;
font-size: .6em;
}
h3{
top: -14px !important;
margin: 0;
}
}
@@ -140,6 +145,7 @@
border: 1px solid @nav-tabs-border-color;
border-radius: 0 0 @border-radius-base @border-radius-base;
padding: 30px 15px;
min-height: 180px; height: auto!important; height: 180px;
}
}
}
}

View File

@@ -148,7 +148,7 @@ label { font-weight: 600; }
}
// Align the navbar with carousel
.container > .navbar-collapse { margin-left: -15px; }
.container > .navbar-collapse { margin-left: -15px; margin-right: -15px; }
// Search
header {
@@ -164,7 +164,7 @@ header {
/* Custom button */
.page .btn-primary {
.btn-primary {
border-left: 3px solid lighten(@brand-primary, 20%);
.border-radius(0);
color: #fff;
@@ -1214,3 +1214,14 @@ td.product,
}
}
}
// Page Contact
#google-map {
margin-bottom: @line-height-computed;
@filter-map: ~"grayscale(100%)";
-webkit-filter: @filter-map;
-moz-filter: @filter-map;
-ms-filter: @filter-map;
-o-filter: @filter-map;
filter: @filter-map;
}

View File

@@ -154,7 +154,7 @@
<div class="products-content">
<ul class="products-grid product-col-5 hover-effect">
{loop name="product_upsell" type="product" promo="yes" limit="5"}
{include file="includes/single-product.html" product_id=$ID hasBtn=true hasDescription=true width="218" height="146"}
{include file="includes/single-product.html" product_id=$ID hasBtn=false hasDescription=true width="218" height="146"}
{/loop}
</ul>

View File

@@ -18,24 +18,31 @@
{$product_page={$smarty.get.page|default:1}}
{$product_order={$smarty.get.order|default:'alpha'}}
<article class="col-main {$smarty.get.mode|default:"grid"}" role="main">
{include file="includes/toolbar.html" toolbar="top" limit=$limit order=$product_order}
<div id="category-products">
<div class="products-content">
<ul class="product-col-4">
{loop type="product" name="product_list" category={category attr="id"} limit=$limit page=$product_page order=$product_order}
{include file="includes/single-product.html" product_id=$ID hasBtn=true hasDescription=true width="218" height="146"}
{/loop}
</ul>
{ifloop rel="product_list"}
{include file="includes/toolbar.html" toolbar="top" limit=$limit order=$product_order}
<div id="category-products">
<div class="products-content">
<ul class="product-col-4">
{loop type="product" name="product_list" category={category attr="id"} limit=$limit page=$product_page order=$product_order}
{include file="includes/single-product.html" product_id=$ID hasBtn=true hasDescription=true width="218" height="146"}
{/loop}
</ul>
</div>
</div><!-- /#category-products -->
{include file="includes/toolbar.html" toolbar="bottom"}
{/ifloop}
{elseloop rel="product_list"}
<div class="address-warning">
{intl l="No products available in this category"}
</div>
</div><!-- /#category-products -->
{include file="includes/toolbar.html" toolbar="bottom"}
{/elseloop}
</article>
<aside class="col-left" role="complementary" itemscope itemtype="http://schema.org/WPSideBar">
{include file="includes/menu.html"}
{include file="includes/categories-filters.html"}
{*include file="includes/categories-filters.html"*}
</aside>

View File

@@ -1,15 +1,8 @@
{extends file="layout.tpl"}
{extends file="contact.html"}
{* Breadcrumb *}
{block name='no-return-functions' append}
{$breadcrumbs = [['title' => {intl l="Thanks !"}, 'url'=>{url path="/contact/success"}]]}
{/block}
{block name="main-content"}
<div class="main">
<article class="col-main" role="main" aria-labelledby="main-label">
<h1 id="main-label" class="page-header">{intl l="Thanks !"}</h1>
<p>{intl l="Thanks for your message, we will contact as soon as possible"}</p>
</article>
{block name="contact-form"}
<div class="contact-success alert alert-success" style="text-align: center">
<h2 class="icon-comments">{intl l="Thanks !"}</h2>
<p>{intl l="Thanks for your message, we will contact as soon as possible."}</p>
</div>
{/block}

View File

@@ -10,96 +10,88 @@
<article class="col-main" role="main" aria-labelledby="main-label">
<h1 id="main-label" class="page-header">{intl l="Contact us"}</h1>
{form name="thelia.contact"}
<form id="form-contact" class="form-horizontal" action="{url path="/contact"}" method="post" role="form">
{form_hidden_fields form=$form}
<fieldset id="contact-info" class="panel panel">
<div class="panel-heading">
1. {intl l="Personal Informations"}
</div>
<div class="panel-body">
{form_field form=$form field="firstname"}
<div class="form-group group-firstname {if $error}has-error{elseif $value != "" && !$error}has-success{/if}">
<label class="control-label" for="{$label_attr.for}">{$label}{if $required} <span class="required">*</span>{/if}</label>
<div class="control-input">
<input type="text" name="{$name}" id="{$label_attr.for}" class="form-control" placeholder="John" value="{$value}" {if $required} aria-required="true" required{/if}{if !isset($error_focus) && $error} autofocus{/if}>
{if $error }
<span class="help-block"><i class="icon-remove"></i> {$message}</span>
{assign var="error_focus" value="true"}
{elseif $value != "" && !$error}
<span class="help-block"><i class="icon-ok"></i></span>
{/if}
</div>
</div><!--/.form-group-->
{/form_field}
{form_field form=$form field="lastname"}
<div class="form-group group-firstname {if $error}has-error{elseif $value != "" && !$error}has-success{/if}">
<label class="control-label" for="{$label_attr.for}">{$label}{if $required} <span class="required">*</span>{/if}</label>
<div class="control-input">
<input type="text" name="{$name}" id="{$label_attr.for}" class="form-control" placeholder="John" value="{$value}" {if $required} aria-required="true" required{/if}{if !isset($error_focus) && $error} autofocus{/if}>
{if $error }
<span class="help-block"><i class="icon-remove"></i> {$message}</span>
{assign var="error_focus" value="true"}
{elseif $value != "" && !$error}
<span class="help-block"><i class="icon-ok"></i></span>
{/if}
</div>
</div><!--/.form-group-->
{/form_field}
{form_field form=$form field="email"}
<div class="form-group group-firstname {if $error}has-error{elseif $value != "" && !$error}has-success{/if}">
<label class="control-label" for="{$label_attr.for}">{$label}{if $required} <span class="required">*</span>{/if}</label>
<div class="control-input">
<input type="email" name="{$name}" id="{$label_attr.for}" class="form-control" placeholder="johndoe@domain.com" value="{$value}" {if $required} aria-required="true" required{/if}{if !isset($error_focus) && $error} autofocus{/if}>
{if $error }
<span class="help-block"><i class="icon-remove"></i> {$message}</span>
{assign var="error_focus" value="true"}
{elseif $value != "" && !$error}
<span class="help-block"><i class="icon-ok"></i></span>
{/if}
</div>
</div><!--/.form-group-->
{/form_field}
{form_field form=$form field="subject"}
<div class="form-group group-firstname {if $error}has-error{elseif $value != "" && !$error}has-success{/if}">
<label class="control-label" for="{$label_attr.for}">{$label}{if $required} <span class="required">*</span>{/if}</label>
<div class="control-input">
<input type="text" name="{$name}" id="{$label_attr.for}" class="form-control" placeholder="contact subject" value="{$value}" {if $required} aria-required="true" required{/if}{if !isset($error_focus) && $error} autofocus{/if}>
{if $error }
<span class="help-block"><i class="icon-remove"></i> {$message}</span>
{assign var="error_focus" value="true"}
{elseif $value != "" && !$error}
<span class="help-block"><i class="icon-ok"></i></span>
{/if}
</div>
</div><!--/.form-group-->
{/form_field}
{form_field form=$form field="message"}
<div class="form-group group-firstname {if $error}has-error{elseif $value != "" && !$error}has-success{/if}">
<label class="control-label" for="{$label_attr.for}">{$label}{if $required} <span class="required">*</span>{/if}</label>
<div class="control-input">
<textarea name="{$name}" id="{$label_attr.for}" class="form-control">
{$value}
</textarea>
{if $error }
<span class="help-block"><i class="icon-remove"></i> {$message}</span>
{assign var="error_focus" value="true"}
{elseif $value != "" && !$error}
<span class="help-block"><i class="icon-ok"></i></span>
{/if}
</div>
</div><!--/.form-group-->
{/form_field}
<div id="google-map">
<iframe class="map" width="100%" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.co.uk/maps?f=q&source=s_q&hl=en&geocode=&q=london&aq=&sll=52.8382,-2.327815&sspn=9.377429,22.126465&ie=UTF8&hq=&hnear=London,+United+Kingdom&t=m&z=10&ll=51.511214,-0.119824&output=embed&iwloc=near"></iframe>
</div><!-- / #google-map-->
<div class="form-group group-btn">
<div class="control-btn">
<button type="submit" class="btn btn-register">{intl l="Send"}</button>
{block name="contact-form"}
{form name="thelia.front.contact"}
<form id="form-contact" action="{url path="/contact"}" method="post" role="form">
{form_hidden_fields form=$form}
<fieldset id="contact-info" class="panel">
<div class="panel-heading">
{intl l="Send us a message"}
</div>
<div class="panel-body">
<div class="row">
{form_field form=$form field="name"}
<div class="form-group group-name col-sm-6 {if $error}has-error{elseif $value != "" && !$error}has-success{/if}">
<label class="control-label" for="{$label_attr.for}">{$label}{if $required} <span class="required">*</span>{/if}</label>
<div class="control-input">
<input type="text" name="{$name}" id="{$label_attr.for}" class="form-control" placeholder="{intl l="What's your name?"}" value="{$value}" {if $required} aria-required="true" required{/if}{if !isset($error_focus) && $error} autofocus{/if}>
{if $error }
<span class="help-block"><i class="icon-remove"></i> {$message}</span>
{assign var="error_focus" value="true"}
{elseif $value != "" && !$error}
<span class="help-block"><i class="icon-ok"></i></span>
{/if}
</div>
</div><!--/.form-group-->
{/form_field}
{form_field form=$form field="email"}
<div class="form-group group-email col-sm-6 {if $error}has-error{elseif $value != "" && !$error}has-success{/if}">
<label class="control-label" for="{$label_attr.for}">{$label}{if $required} <span class="required">*</span>{/if}</label>
<div class="control-input">
<input type="email" name="{$name}" id="{$label_attr.for}" class="form-control" placeholder="{intl l="So I can get back to you."}" value="{$value}" {if $required} aria-required="true" required{/if}{if !isset($error_focus) && $error} autofocus{/if}>
{if $error }
<span class="help-block"><i class="icon-remove"></i> {$message}</span>
{assign var="error_focus" value="true"}
{elseif $value != "" && !$error}
<span class="help-block"><i class="icon-ok"></i></span>
{/if}
</div>
</div><!--/.form-group-->
{/form_field}
</div>
</div><!--/.form-group-->
</div>
</fieldset>
</form>
{/form}
{form_field form=$form field="subject"}
<div class="form-group group-firstname {if $error}has-error{elseif $value != "" && !$error}has-success{/if}">
<label class="control-label" for="{$label_attr.for}">{$label}{if $required} <span class="required">*</span>{/if}</label>
<div class="control-input">
<input type="text" name="{$name}" id="{$label_attr.for}" class="form-control" placeholder="{intl l="The subject of your message."}" value="{$value}" {if $required} aria-required="true" required{/if}{if !isset($error_focus) && $error} autofocus{/if}>
{if $error }
<span class="help-block"><i class="icon-remove"></i> {$message}</span>
{assign var="error_focus" value="true"}
{elseif $value != "" && !$error}
<span class="help-block"><i class="icon-ok"></i></span>
{/if}
</div>
</div><!--/.form-group-->
{/form_field}
{form_field form=$form field="message"}
<div class="form-group group-message {if $error}has-error{elseif $value != "" && !$error}has-success{/if}">
<label class="control-label" for="{$label_attr.for}">{$label}{if $required} <span class="required">*</span>{/if}</label>
<div class="control-input">
<textarea name="{$name}" id="{$label_attr.for}" placeholder="{intl l='And your message...'}" rows="6" class="form-control"{if $required} aria-required="true" required{/if}>{$value}</textarea>
{if $error }
<span class="help-block"><i class="icon-remove"></i> {$message}</span>
{assign var="error_focus" value="true"}
{elseif $value != "" && !$error}
<span class="help-block"><i class="icon-ok"></i></span>
{/if}
</div>
</div><!--/.form-group-->
{/form_field}
<div class="form-group group-btn">
<div class="control-btn">
<button type="submit" class="btn btn-contact">{intl l="Send"}</button>
</div>
</div><!--/.form-group-->
</div>
</fieldset>
</form>
{/form}
{/block}
</article>
</div>
{/block}
{/block}

View File

@@ -0,0 +1,52 @@
<div class="clearfix">
{loop type="cart" name="cartloop" position="last"}
<table>
<tr>
<td class="col-md-4">
{loop name="product_thumbnail" type="image" product=$PRODUCT_ID width="218" height="146" resize_mode="borders" limit="1"}
<img itemprop="image" src="{$IMAGE_URL}" alt="Product #{$LOOP_COUNT}">
{/loop}
</td>
<td class="col-md-4">
<h2>{$TITLE}</h2>
{loop type="attribute_combination" name="product_options" product_sale_elements="$PRODUCT_SALE_ELEMENTS_ID"}
<p>{$ATTRIBUTE_TITLE}</p>
<p>{$ATTRIBUTE_AVAILABILITY_TITLE}</p>
{/loop}
</td>
<td class="col-md-4">
{if $IS_PROMO == 1}
{assign "real_price" $PROMO_TAXED_PRICE}
<div class="special-price"><span class="price">{currency attr="symbol"} {$PROMO_TAXED_PRICE}</span></div>
<small class="old-price"> <span class="price">{currency attr="symbol"} {$TAXED_PRICE}</span></small>
{else}
{assign "real_price" $TAXED_PRICE}
<div class="special-price"><span class="price">{currency attr="symbol"} {$TAXED_PRICE}</span></div>
{/if}
</td>
</tr>
</table>
{/loop}
<a href="{url path="/cart"}" role="button" class="btn btn_add_to_cart pull-right"><span>{intl l="View cart"}</span></a>
<button type="button" class="btn btn-checkout pull-right" data-dismiss="modal"><span>{intl l="Continue Shopping"}</span></button>
</div>
{ifloop rel="product_upsell"}
<aside id="products-upsell" role="complementary" aria-labelledby="products-upsell-label">
<div class="products-heading">
<h3 id="products-upsell-label">{intl l="Upsell Products"}</h3>
</div>
<div class="products-content">
<ul class="products-grid product-col-3 hover-effect">
{loop name="product_upsell" type="product" promo="yes" limit="3"}
{include file="includes/single-product.html" product_id=$ID hasBtn=false hasDescription=true width="218" height="146"}
{/loop}
</ul>
</div>
</aside><!-- #products-upsell -->
{/ifloop}

View File

@@ -2,29 +2,45 @@
<div class="block-heading"><h3 class="block-title" id="categories-label">{intl l="Categories"}</h3></div>
<div class="block-content">
<nav class="nav-categories">
<ul id="category" class="accordion">
{assign "previousLevel" 0}
{loop name="cat-parent" type="category-tree" category="0"}
{for $foo=1 to $previousLevel-$LEVEL}
</ul>
</li>
{/for}
{if $CHILD_COUNT > 0 }
<li>
<a class="accordion-toggle" data-toggle="collapse" data-parent="#category" href="{$URL}#collapse{$ID}">{$TITLE} <span class="amount">({$CHILD_COUNT})</span></a>
<ul id="collapse{$ID}" class="collapse">
{else}
<li><a href="{$URL}">{$TITLE} <span class="amount">(0)</span></a></li>
{/if}
{assign "previousLevel" $LEVEL}
{* define current ID *}
{loop name="current_cat" type="category" current="yes"}
{assign var="current_category_id" value="{$PARENT}"}
{/loop}
{for $i=$previousLevel to 1 step -1}
{* define the function *}
{function menu level=0}
{if $level == 0}
<ul id="category" class="accordion">
{else}
{if $parent == $current_category_id}
<ul id="collapse{$parent}" class="in">
{else}
<ul id="collapse{$parent}" class="collapse">
{/if}
{/if}
{loop name="cat-parent-$level" type="category" parent=$parent}
{assign var="product_count" value="0"}
{loop name="product_count" type="product" category="{$ID}"}
{if $LOOP_COUNT == 1}
{assign var="product_count" value="{$LOOP_TOTAL}"}
{/if}
{/loop}
{if $CHILD_COUNT> 0}
<li><a href="{$URL}#collapse{$ID}" class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#collapse{$ID}">{$TITLE} ({$PRODUCT_COUNT})</a>
{menu parent=$ID level=$level+1}
</li>
{else}
<li><a href="{$URL}">{$TITLE} ({$product_count})</a></li>
{/if}
{/loop}
</ul>
</li>
{/for}
</ul>
{/function}
{menu parent='0'}
</nav>
</div>
</section>

View File

@@ -1,5 +1,5 @@
{ifloop rel="cartloop"}
<li class="dropdown pull-right cart-not-empty">
<li class="dropdown pull-right cart-not-empty cart-container">
<a href="{url path="/cart"}" rel="nofollow" class="cart">
{intl l="Cart"} <span class="badge">{cart attr="count_item"}</span>
</a>
@@ -60,7 +60,7 @@
</li>
{/ifloop}
{elseloop rel="cartloop"}
<li class="dropdown pull-right">
<li class="dropdown pull-right cart-container">
<a href="{url path="/cart"}" rel="nofollow" class="cart">
{intl l="Cart"} <span class="badge">0</span>
</a>

View File

@@ -56,9 +56,9 @@
{/if}
</div>
{if $hasBtn == true}
{form name="thelia.cart.add" }
<form id="form-product-details" action="{url path="/cart/add" }" method="post" role="form">
<form id="form-product-details" action="{url path="/cart/add" }" method="post" role="form" class="form-product">
{form_hidden_fields form=$form}
<input type="hidden" name="view" value="product">
<input type="hidden" name="product_id" value="{$ID}">
@@ -115,11 +115,12 @@
</div>
<div>
<div class="product-btn">
{if $hasSubmit == true}
<button type="submit" class="btn btn-cart">{intl l="Add to cart"}</button>
{else}
<a href="{$URL}" class="btn btn-cart">{intl l="View product"}</a>
{/if}
{if $hasSubmit == true}
<button type="submit" class="btn btn-cart">{intl l="Add to cart"}</button>
{else}
<a href="{$URL}" class="btn btn-cart">{intl l="View product"}</a>
{/if}
</div>
</div>
@@ -127,7 +128,7 @@
</fieldset>
</form>
{/form}
{/if}
</div>
</article><!-- /product -->
</li>

View File

@@ -76,7 +76,7 @@ URL: http://www.thelia.net
<li class="dropdown">
<a href="{url path="/login"}" class="login">{intl l="Log In!"}</a>
<div class="dropdown-menu">
{form name="thelia.customer.login"}
{form name="thelia.front.customer.login"}
<form id="form-login-mini" action="{url path="/login"}" method="post" role="form" {form_enctype form=$form}>
{form_hidden_fields form=$form}
{form_field form=$form field="email"}
@@ -297,12 +297,13 @@ URL: http://www.thelia.net
<div class="block-heading"><h3 class="block-title">{intl l="Newsletter"}</h3></div>
<div class="block-content">
<p id="newletter-describe">{intl l="Sign up to receive our latest news."}</p>
{form name="thelia.newsletter"}
<form id="form-newsletter" action="{url path="/newsletter"}" method="post" role="form">
{form name="thelia.front.newsletter"}
<form id="form-newsletter-mini" action="{url path="/newsletter"}" method="post" role="form">
{form_hidden_fields form=$form}
{form_field form=$form field="email"}
<div class="form-group">
<label for="{$label_attr.for}">{intl l="Email address"}</label>
<input type="email" name="{$name}" id="{$label_attr.for}" class="form-control" placeholder="{intl l="Your email address"}" aria-describedby="newletter-describe" {if $required} aria-required="true" required{/if} autocomplete="off">
<label for="{$label_attr.for}-mini">{intl l="Email address"}</label>
<input type="email" name="{$name}" id="{$label_attr.for}-mini" class="form-control" placeholder="{intl l="Your email address"}" aria-describedby="newletter-describe" {if $required} aria-required="true" required{/if} autocomplete="off">
</div>
{/form_field}
<button type="submit" class="btn btn-subscribe">{intl l="Subscribe"}</button>
@@ -348,9 +349,9 @@ URL: http://www.thelia.net
{loop name="footer_links" type="content" folder="2"}
<li><a href="{$URL}">{$TITLE}</a></li>
{/loop}
<li><a href="#">Site Map</a></li>
<li><a href="#">Terms & Conditions</a></li>
<li><a href="#">Contact Us</a></li>
{*<li><a href="#">Site Map</a></li>
<li><a href="#">Terms & Conditions</a></li>*}
<li><a href="{url path="/contact"}">Contact Us</a></li>
</ul>
</nav>
@@ -375,6 +376,9 @@ URL: http://www.thelia.net
}
</script>
<script src="//ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>
{javascripts file='assets/js/bootstrap/bootstrap.js'}
<script src="{$asset_url}"></script>
{/javascripts}

View File

@@ -15,8 +15,8 @@
<div class="main">
<article class="col-main" role="main" aria-labelledby="main-label">
<h1 id="main-label" class="page-header">{intl l="Login"}</h1>
{form name="thelia.customer.login"}
<form id="form-login" action="{url path="/login"}" method="post" role="form" {form_enctype form=$form}>
{form name="thelia.front.customer.login"}
<form id="form-login" action="{url path="/login"}" method="post" role="form" {form_enctype form=$form} novalidate>
{if $form_error}<div class="alert alert-danger">{$form_error_message}</div>{/if}
{form_field form=$form field='success_url'}
<input type="hidden" name="{$name}" value="{navigate to="return_to"}"> {* the url the user is redirected to on login success *}

View File

@@ -1,15 +0,0 @@
{extends file="layout.tpl"}
{* Breadcrumb *}
{block name='no-return-functions' append}
{$breadcrumbs = [['title' => {intl l="Thanks !"}, 'url'=>{url path="/contact/success"}]]}
{/block}
{block name="main-content"}
<div class="main">
<article class="col-main" role="main" aria-labelledby="main-label">
<h1 id="main-label" class="page-header">{intl l="Thanks for signing up!"}</h1>
<p>{intl l="We'll keep you posted whenever we have any new updates. If you ever wish to unsubscribe, you can easily do so via the link that will be in every email."}</p>
</article>
</div>
{/block}

View File

@@ -8,37 +8,31 @@
{block name="main-content"}
<div class="main">
<article class="col-main" role="main" aria-labelledby="main-label">
<h1 id="main-label" class="page-header">{intl l="Newsletter"}</h1>
<h1 id="main-label" class="page-header">{intl l="Newsletter Subscription"}</h1>
{form name="thelia.newsletter"}
<form id="form-contact" class="form-horizontal" action="{url path="/newsletter"}" method="post" role="form">
{form name="thelia.front.newsletter"}
<form id="form-newsletter" action="{url path="/newsletter"}" method="post" role="form">
{form_hidden_fields form=$form}
<fieldset id="contact-info" class="panel panel">
<div class="panel-heading">
1. {intl l="Personal Informations"}
<p>{intl l="You want to subscribe to the newsletter? Please enter your email address below."}</p>
{form_field form=$form field="email"}
<div class="form-group group-email {if $error}has-error{elseif !$error && $value != ""}has-success{/if}">
<label for="{$label_attr.for}">{$label}{if $required} <span class="required">*</span>{/if}</label>
<div class="control-input">
<input type="email" name="{$name}" id="{$label_attr.for}" value="{$value}" class="form-control" {if $required} aria-required="true" required{/if} autofocus>
{if $error}
<span class="help-block"><span class="icon-remove"></span> {$message}</span>
{elseif !$error && $value != ""}
<span class="help-block"><span class="icon-ok"></span> {intl l="Thanks for signing up! We'll keep you posted whenever we have any new updates."}</span>
{/if}
</div>
</div>
<div class="panel-body">
{form_field form=$form field="email"}
<div class="form-group group-firstname {if $error}has-error{elseif $value != "" && !$error}has-success{/if}">
<label class="control-label" for="{$label_attr.for}">{$label}{if $required} <span class="required">*</span>{/if}</label>
<div class="control-input">
<input type="email" name="{$name}" id="{$label_attr.for}" class="form-control" placeholder="johndoe@domain.com" value="{$value}" {if $required} aria-required="true" required{/if}{if !isset($error_focus) && $error} autofocus{/if}>
{if $error }
<span class="help-block"><i class="icon-remove"></i> {$message}</span>
{assign var="error_focus" value="true"}
{elseif $value != "" && !$error}
<span class="help-block"><i class="icon-ok"></i></span>
{/if}
</div>
</div><!--/.form-group-->
{/form_field}
<div class="form-group group-btn">
<div class="control-btn">
<button type="submit" class="btn btn-register">{intl l="Subscribe"}</button>
</div>
</div><!--/.form-group-->
{/form_field}
<div class="form-group group-btn">
<div class="control-btn">
<button type="submit" class="btn btn-submit">{intl l="Subscribe"}</button>
</div>
</fieldset>
</div><!--/.form-group-->
</form>
{/form}
</article>

View File

@@ -92,15 +92,17 @@
<div class="product-options">
<dl class="dl-horizontal">
<dt>{intl l="Available"} :</dt>
<dd>{intl l="In Stock"}</dd>
{if $STOCK > 0}
<dd>{intl l="In Stock"}</dd>
{else}
<dd>{intl l="Out of Stock"}</dd>
{/if}
<dt>{intl l="No."}</dt>
<dd>{$REF}</dd>
{*<dt>Select Size</dt>
<dd>Large</dd>
<dt>Select Delivery Date</dt>
<dd>Jan 2, 2013</dd>
<dt>Additional Option</dt>
<dd>Option 1</dd>*}
{loop type="attribute_combination" name="product_options" product_sale_elements="$PRODUCT_SALE_ELEMENTS_ID"}
<dt>{$ATTRIBUTE_TITLE}</dt>
<dd>{$ATTRIBUTE_AVAILABILITY_TITLE}</dd>
{/loop}
</dl>
</div>
</td>

View File

@@ -15,7 +15,7 @@
<div class="main">
<article class="col-main" role="main" aria-labelledby="main-label">
<h1 id="main-label" class="page-header">{intl l="Password Forgotten"}</h1>
{form name="thelia.customer.lostpassword"}
{form name="thelia.front.customer.lostpassword"}
<form id="form-forgotpassword" action="{url path="/password"}" method="post" role="form">
<p>{intl l="Please enter your email address below."} {intl l="You will receive a link to reset your password."}</p>
@@ -33,7 +33,7 @@
</div>
{/form_field}
<div class="group-btn">
<a href="{url path="/"}" class="btn btn-cancel">{intl l="Cancel"}</a>
<a href="{url path="/login"}" class="btn btn-cancel">{intl l="Cancel"}</a>
<button type="submit" class="btn btn-forgot">{intl l="Send"}</button>
</div>
</form>

View File

@@ -73,7 +73,7 @@
</div>
{ifloop rel="image.carouselsup"}
<a class="left carousel-control" href="#product-thumbnails" data-slide="prev"><i class="icon-prev"></i></a>
<a class="right carousel-contol" href="#product-thumbnails" data-slide="next"><i class="icon-next"></i></a>
<a class="right carousel-control" href="#product-thumbnails" data-slide="next"><i class="icon-next"></i></a>
{/ifloop}
</div>
</section>
@@ -134,7 +134,7 @@
</div>
{form name="thelia.cart.add" }
<form id="form-product-details" action="{url path="/cart/add" }" method="post" role="form">
<form id="form-product-details" action="{url path="/cart/add" }" method="post" role="form" class="form-product">
{form_hidden_fields form=$form}
<input type="hidden" name="view" value="product">
<input type="hidden" name="product_id" value="{$ID}">
@@ -145,15 +145,7 @@
{if $form_error}<div class="alert alert-error">{$form_error_message}</div>{/if}
{form_field form=$form field='product_sale_elements_id'}
{if $default_product_sale_elements }
<input type="hidden" name="{$name}" value="{$default_product_sale_elements}" {$attr}>
{else}
{loop name="productSaleElements_promo" type="product_sale_elements" product="{$ID}" limit="1"}
<input type="hidden" name="{$name}" value="{$ID}" {$attr}>
{/loop}
{/if}
{/form_field}
{form_field form=$form field="product"}
<input id="{$label_attr.for}" type="hidden" name="{$name}" value="{$ID}" {$attr} >
{/form_field}
@@ -163,13 +155,15 @@
<div class="option">
<label for="options" class="option-heading">Options</label>
<div class="option-content">
<select name="options" class="form-control">
{loop name="stock" type="product_sale_elements" product="$ID" order="min_price"}
{loop name="combi" type="attribute_combination" product_sale_elements="$ID" order="alpha"}
<option value="{$ID}" data-quantity="{$QUANTITY}" data-price="{format_number number="{$BEST_TAXED_PRICE}"} {currency attr="symbol"}" data-old-price="{format_number number="{$TAXED_PRICE}"} {currency attr="symbol"}">{$ATTRIBUTE_AVAILABILITY_TITLE}</small></option>
{form_field form=$form field='product_sale_elements_id'}
<select name="{$name}" class="form-control">
{loop name="stock" type="product_sale_elements" product="$ID" order="min_price"}
{loop name="combi" type="attribute_combination" product_sale_elements="$ID" order="alpha"}
<option value="{$ID}" data-quantity="{$QUANTITY}" data-price="{format_number number="{$BEST_TAXED_PRICE}"} {currency attr="symbol"}" data-old-price="{format_number number="{$TAXED_PRICE}"} {currency attr="symbol"}">{$ATTRIBUTE_AVAILABILITY_TITLE}</option>
{/loop}
{/loop}
{/loop}
</select>
</select>
{/form_field}
</div>
</div>
{/ifloop}
@@ -178,7 +172,7 @@
{form_field form=$form field='quantity'}
<div class="form-group group-qty {if $error}has-error{elseif $value != "" && !$error}has-success{/if}">
<label for="{$label_attr.for}">{$label}</label>
<input type="number" name="{$name}" id="{$label_attr.for}" class="form-control" value="{$value|default:1}" min="0" required>
<input type="number" name="{$name}" id="{$label_attr.for}" class="form-control" value="{$value|default:1}" min="1" required>
{if $error }
<span class="help-block"><i class="icon-remove"></i> {$message}</span>
{elseif $value != "" && !$error}
@@ -221,13 +215,23 @@
</div>
</section>
</article><!-- /product -->
{/loop}
<ul class="pager">
<li class="previous"><a href="#">Previous product</a></li>
<li class="next"><a href="#">Next product</a></li>
</ul
></div>
<ul class="pager">
{if $HAS_PREVIOUS == 1}
{loop type="product" name="prev_product" id="{$PREVIOUS}"}
<li class="previous"><a href="{$URL}">{intl l="Previous product"}</a></li>
{/loop}
{/if}
{if $HAS_NEXT == 1}
{loop type="product" name="next_product" id="{$NEXT}"}
<li class="next"><a href="{$URL}">{intl l="Next product"}</a></li>
{/loop}
{/if}
</ul>
{/loop}
</div>
</div><!-- /.container -->
{/block}

View File

@@ -14,7 +14,7 @@
<article class="col-main" role="main" aria-labelledby="main-label">
<h1 id="main-label" class="page-header">{intl l="Create New Account"}</h1>
{form name="thelia.customer.creation"}
{form name="thelia.front.customer.create"}
<form id="form-register" class="form-horizontal" action="{url path="/register"}" method="post" role="form">
{form_field form=$form field='success_url'}
<input type="hidden" name="{$name}" value="{url path="/account"}" /> {* the url the user is redirected to on registration success *}
@@ -25,7 +25,7 @@
{/form_field}
{form_hidden_fields form=$form}
{if $form_error}<div class="alert alert-danger">{$form_error_message}</div>{/if}
<fieldset id="register-info" class="panel panel">
<fieldset id="register-info" class="panel">
<div class="panel-heading">
1. {intl l="Personal Informations"}
</div>