Page 1 of 1
Howto add "view cart" button to ajax Shopping Cart preview
Posted: Mon Aug 08, 2011 5:08 pm
by efp
Hi.
Could someone tell me how i could add an extra button to the drop down cart preview in the header so it would link to main shopping cart page? (I know there is a separate link providing this functionality but i would like it to be in the cart preview, giving the option of viewing the full cart page or going to checkout)
I've searched the forum but havent found anything besides one other post exactly like mine which hasn't been answered.
Re: Howto add "view cart" button to ajax Shopping Cart previ
Posted: Tue Aug 09, 2011 6:46 pm
by efp
UP!
Re: Howto add "view cart" button to ajax Shopping Cart previ
Posted: Tue Aug 09, 2011 10:02 pm
by uksitebuilder
open: catalog/language/english/english.php
Find:
Code: Select all
$_['button_checkout'] = 'Checkout';
replace with:
Code: Select all
$_['button_checkout'] = 'Checkout';
$_['button_viewcart'] = 'View Cart';
open: catalog/controller/checkout/cart.php
find 2nd occurrence of:
Code: Select all
$this->data['button_checkout'] = $this->language->get('button_checkout');
replace with:
Code: Select all
$this->data['button_viewcart'] = $this->language->get('button_viewcart');
$this->data['button_checkout'] = $this->language->get('button_checkout');
find 2nd occurrence of:
Code: Select all
$this->data['checkout'] = $this->url->link('checkout/checkout', '', 'SSL');
replace with:
Code: Select all
$this->data['checkout'] = $this->url->link('checkout/checkout', '', 'SSL');
$this->data['cart'] = $this->url->link('checkout/cart', '');
open: catalog/view/theme/default/template/common/cart.tpl
find:
Code: Select all
<div class="checkout"><a href="<?php echo $checkout; ?>" class="button"><span><?php echo $button_checkout; ?></span></a></div>
replace with:
Code: Select all
<div class="checkout"><a href="<?php echo $cart; ?>" class="button"><span><?php echo $button_viewcart; ?></span></a> <a href="<?php echo $checkout; ?>" class="button"><span><?php echo $button_checkout; ?></span></a></div>
vQmod file attached:
Re: Howto add "view cart" button to ajax Shopping Cart previ
Posted: Wed Aug 10, 2011 5:32 am
by efp
I did everything as instructed(checked 3 times) however its not quite working.
There is a button thats appeared in the dropdown but with in it it gives the following error:
Code: Select all
Notice: Undefined variable: button_viewcart in /Applications/MAMP/htdocs/SHOP/catalog/view/theme/default/template/common/cart.tpl on line 37
Re: Howto add "view cart" button to ajax Shopping Cart previ
Posted: Wed Aug 10, 2011 5:41 am
by uksitebuilder
Did you do it manually or did you use the vQmod file?
If you manually edited the files, please post the contents of your catalog/controller/checkout/cart.php file
My reason for asking is that the manual instructions clearly define 'button_viewcart'
$this->data['button_viewcart'] = $this->language->get('button_viewcart');
---
$this->data['button_checkout'] = $this->language->get('button_checkout');
is in the above file twice, as per the instructions, it is the 2nd occurrence of this line you need to edit.
Re: Howto add "view cart" button to ajax Shopping Cart previ
Posted: Wed Aug 10, 2011 5:57 am
by efp
uksitebuilder wrote:Did you do it manually or did you use the vQmod file?
If you manually edited the files, please post the contents of your catalog/controller/checkout/cart.php file
I did it manually.
Although i've just tried it via the xml script and it works beautifully! (however i would still preffer to not use vqmod)
Here is mycatalog/controller/checkout/cart.php (part1)
Code: Select all
<?php
class ControllerCheckoutCart extends Controller {
public function index() {
$this->language->load('checkout/cart');
if ($this->request->server['REQUEST_METHOD'] == 'POST') {
if (isset($this->request->post['quantity'])) {
if (!is_array($this->request->post['quantity'])) {
if (isset($this->request->post['option'])) {
$option = $this->request->post['option'];
} else {
$option = array();
}
$this->cart->add($this->request->post['product_id'], $this->request->post['quantity'], $option);
} else {
foreach ($this->request->post['quantity'] as $key => $value) {
$this->cart->update($key, $value);
}
}
}
if (isset($this->request->post['remove'])) {
foreach ($this->request->post['remove'] as $key) {
$this->cart->remove($key);
}
}
if (isset($this->request->post['voucher']) && $this->request->post['voucher']) {
foreach ($this->request->post['voucher'] as $key) {
if (isset($this->session->data['vouchers'][$key])) {
unset($this->session->data['vouchers'][$key]);
}
}
}
if (isset($this->request->post['redirect'])) {
$this->session->data['redirect'] = $this->request->post['redirect'];
}
if (isset($this->request->post['quantity']) || isset($this->request->post['remove']) || isset($this->request->post['voucher'])) {
unset($this->session->data['shipping_methods']);
unset($this->session->data['shipping_method']);
unset($this->session->data['payment_methods']);
unset($this->session->data['payment_method']);
unset($this->session->data['reward']);
$this->redirect($this->url->link('checkout/cart'));
}
}
$this->document->setTitle($this->language->get('heading_title'));
$this->data['breadcrumbs'] = array();
$this->data['breadcrumbs'][] = array(
'href' => $this->url->link('common/home'),
'text' => $this->language->get('text_home'),
'separator' => false
);
$this->data['breadcrumbs'][] = array(
'href' => $this->url->link('checkout/cart'),
'text' => $this->language->get('heading_title'),
'separator' => $this->language->get('text_separator')
);
if ($this->cart->hasProducts() || (isset($this->session->data['vouchers']) && $this->session->data['vouchers'])) {
$this->data['heading_title'] = $this->language->get('heading_title');
$this->data['text_select'] = $this->language->get('text_select');
$this->data['text_weight'] = $this->language->get('text_weight');
$this->data['column_remove'] = $this->language->get('column_remove');
$this->data['column_image'] = $this->language->get('column_image');
$this->data['column_name'] = $this->language->get('column_name');
$this->data['column_model'] = $this->language->get('column_model');
$this->data['column_quantity'] = $this->language->get('column_quantity');
$this->data['column_price'] = $this->language->get('column_price');
$this->data['column_total'] = $this->language->get('column_total');
$this->data['button_update'] = $this->language->get('button_update');
$this->data['button_shopping'] = $this->language->get('button_shopping');
$this->data['button_viewcart'] = $this->language->get('button_viewcart');
$this->data['button_checkout'] = $this->language->get('button_checkout');
if ($this->config->get('config_customer_price') && !$this->customer->isLogged()) {
$this->data['attention'] = sprintf($this->language->get('text_login'), $this->url->link('account/login'), $this->url->link('account/register'));
} else {
$this->data['attention'] = '';
}
if (!$this->cart->hasStock() && (!$this->config->get('config_stock_checkout') || $this->config->get('config_stock_warning'))) {
$this->data['error_warning'] = $this->language->get('error_stock');
} elseif (isset($this->session->data['error'])) {
$this->data['error_warning'] = $this->session->data['error'];
unset($this->session->data['error']);
} else {
$this->data['error_warning'] = '';
}
if (isset($this->session->data['success'])) {
$this->data['success'] = $this->session->data['success'];
unset($this->session->data['success']);
} else {
$this->data['success'] = '';
}
$this->data['action'] = $this->url->link('checkout/cart');
if ($this->config->get('config_cart_weight')) {
$this->data['weight'] = $this->weight->format($this->cart->getWeight(), $this->config->get('config_weight_class_id'), $this->language->get('decimal_point'), $this->language->get('thousand_point'));
} else {
$this->data['weight'] = false;
}
$this->load->model('tool/image');
$this->data['products'] = array();
foreach ($this->cart->getProducts() as $result) {
if ($result['image']) {
$image = $this->model_tool_image->resize($result['image'], $this->config->get('config_image_cart_width'), $this->config->get('config_image_cart_height'));
} else {
$image = '';
}
$option_data = array();
foreach ($result['option'] as $option) {
if ($option['type'] != 'file') {
$option_data[] = array(
'name' => $option['name'],
'value' => (strlen($option['option_value']) > 20 ? substr($option['option_value'], 0, 20) . '..' : $option['option_value'])
);
} else {
$this->load->library('encryption');
$encryption = new Encryption($this->config->get('config_encryption'));
$file = substr($encryption->decrypt($option['option_value']), 0, strrpos($encryption->decrypt($option['option_value']), '.'));
$option_data[] = array(
'name' => $option['name'],
'value' => (strlen($file) > 20 ? substr($file, 0, 20) . '..' : $file)
);
}
}
if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
$price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')));
} else {
$price = false;
}
if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
$total = $this->currency->format($this->tax->calculate($result['total'], $result['tax_class_id'], $this->config->get('config_tax')));
} else {
$total = false;
}
$this->data['products'][] = array(
'key' => $result['key'],
'thumb' => $image,
'name' => $result['name'],
'model' => $result['model'],
'option' => $option_data,
'quantity' => $result['quantity'],
'stock' => $result['stock'],
'points' => ($result['points'] ? sprintf($this->language->get('text_points'), $result['points']) : ''),
'price' => $price,
'total' => $total,
'href' => $this->url->link('product/product', 'product_id=' . $result['product_id'])
);
}
// Gift Voucher
$this->data['vouchers'] = array();
if (isset($this->session->data['vouchers']) && $this->session->data['vouchers']) {
foreach ($this->session->data['vouchers'] as $key => $voucher) {
$this->data['vouchers'][] = array(
'key' => $key,
'description' => $voucher['description'],
'amount' => $this->currency->format($voucher['amount'])
);
}
}
$total_data = array();
$total = 0;
$taxes = $this->cart->getTaxes();
if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
$this->load->model('setting/extension');
$sort_order = array();
$results = $this->model_setting_extension->getExtensions('total');
foreach ($results as $key => $value) {
$sort_order[$key] = $this->config->get($value['code'] . '_sort_order');
}
array_multisort($sort_order, SORT_ASC, $results);
foreach ($results as $result) {
if ($this->config->get($result['code'] . '_status')) {
$this->load->model('total/' . $result['code']);
$this->{'model_total_' . $result['code']}->getTotal($total_data, $total, $taxes);
}
}
$sort_order = array();
foreach ($total_data as $key => $value) {
$sort_order[$key] = $value['sort_order'];
}
array_multisort($sort_order, SORT_ASC, $total_data);
}
$this->data['totals'] = $total_data;
// Modules
$this->data['modules'] = array();
if (isset($results)) {
foreach ($results as $result) {
if ($this->config->get($result['code'] . '_status') && file_exists(DIR_APPLICATION . 'controller/total/' . $result['code'] . '.php')) {
$this->data['modules'][] = $this->getChild('total/' . $result['code']);
}
}
}
if (isset($this->session->data['redirect'])) {
$this->data['continue'] = $this->session->data['redirect'];
unset($this->session->data['redirect']);
} else {
$this->data['continue'] = $this->url->link('common/home');
}
$this->data['checkout'] = $this->url->link('checkout/checkout', '', 'SSL');
$this->data['cart'] = $this->url->link('checkout/cart', '');
if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/checkout/cart.tpl')) {
$this->template = $this->config->get('config_template') . '/template/checkout/cart.tpl';
} else {
$this->template = 'default/template/checkout/cart.tpl';
}
$this->children = array(
'common/column_left',
'common/column_right',
'common/content_top',
'common/content_bottom',
'common/footer',
'common/header'
);
$this->response->setOutput($this->render());
} else {
$this->data['heading_title'] = $this->language->get('heading_title');
$this->data['text_error'] = $this->language->get('text_empty');
$this->data['button_continue'] = $this->language->get('button_continue');
$this->data['continue'] = $this->url->link('common/home');
if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/error/not_found.tpl')) {
$this->template = $this->config->get('config_template') . '/template/error/not_found.tpl';
} else {
$this->template = 'default/template/error/not_found.tpl';
}
$this->children = array(
'common/column_left',
'common/column_right',
'common/content_top',
'common/content_bottom',
'common/footer',
'common/header'
);
$this->response->setOutput($this->render());
}
}
public function update() {
$this->language->load('checkout/cart');
$json = array();
if (isset($this->request->post['product_id'])) {
$this->load->model('catalog/product');
$product_info = $this->model_catalog_product->getProduct($this->request->post['product_id']);
if ($product_info) {
// Minimum quantity validation
if (isset($this->request->post['quantity'])) {
$quantity = $this->request->post['quantity'];
} else {
$quantity = 1;
}
$product_total = 0;
foreach ($this->session->data['cart'] as $key => $value) {
$product = explode(':', $key);
if ($product[0] == $this->request->post['product_id']) {
$product_total += $value;
}
}
if ($product_info['minimum'] > ($product_total + $quantity)) {
$json['error']['warning'] = sprintf($this->language->get('error_minimum'), $product_info['name'], $product_info['minimum']);
}
Have i missed out on something?

Re: Howto add "view cart" button to ajax Shopping Cart previ
Posted: Wed Aug 10, 2011 5:58 am
by efp
(Part 2)
Code: Select all
// Option validation
if (isset($this->request->post['option'])) {
$option = array_filter($this->request->post['option']);
} else {
$option = array();
}
$product_options = $this->model_catalog_product->getProductOptions($this->request->post['product_id']);
foreach ($product_options as $product_option) {
if ($product_option['required'] && (!isset($this->request->post['option'][$product_option['product_option_id']]) || !$this->request->post['option'][$product_option['product_option_id']])) {
$json['error'][$product_option['product_option_id']] = sprintf($this->language->get('error_required'), $product_option['name']);
}
}
}
if (!isset($json['error'])) {
$this->cart->add($this->request->post['product_id'], $quantity, $option);
$json['success'] = sprintf($this->language->get('text_success'), $this->url->link('product/product', 'product_id=' . $this->request->post['product_id']), $product_info['name'], $this->url->link('checkout/cart'));
unset($this->session->data['shipping_methods']);
unset($this->session->data['shipping_method']);
unset($this->session->data['payment_methods']);
unset($this->session->data['payment_method']);
} else {
$json['redirect'] = str_replace('&', '&', $this->url->link('product/product', 'product_id=' . $this->request->post['product_id']));
}
}
if (isset($this->request->post['remove'])) {
$this->cart->remove($this->request->post['remove']);
}
if (isset($this->request->post['voucher'])) {
if ($this->session->data['vouchers'][$this->request->post['voucher']]) {
unset($this->session->data['vouchers'][$this->request->post['voucher']]);
}
}
$this->load->model('tool/image');
$this->data['text_empty'] = $this->language->get('text_empty');
$this->data['button_checkout'] = $this->language->get('button_checkout');
$this->data['button_remove'] = $this->language->get('button_remove');
$this->data['products'] = array();
foreach ($this->cart->getProducts() as $result) {
if ($result['image']) {
$image = $this->model_tool_image->resize($result['image'], 40, 40);
} else {
$image = '';
}
$option_data = array();
foreach ($result['option'] as $option) {
if ($option['type'] != 'file') {
$option_data[] = array(
'name' => $option['name'],
'value' => (strlen($option['option_value']) > 20 ? substr($option['option_value'], 0, 20) . '..' : $option['option_value'])
);
} else {
$this->load->library('encryption');
$encryption = new Encryption($this->config->get('config_encryption'));
$file = substr($encryption->decrypt($option['option_value']), 0, strrpos($encryption->decrypt($option['option_value']), '.'));
$option_data[] = array(
'name' => $option['name'],
'value' => (strlen($file) > 20 ? substr($file, 0, 20) . '..' : $file)
);
}
}
if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
$price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')));
} else {
$price = false;
}
if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
$total = $this->currency->format($this->tax->calculate($result['total'], $result['tax_class_id'], $this->config->get('config_tax')));
} else {
$total = false;
}
$this->data['products'][] = array(
'key' => $result['key'],
'thumb' => $image,
'name' => $result['name'],
'model' => $result['model'],
'option' => $option_data,
'quantity' => $result['quantity'],
'stock' => $result['stock'],
'price' => $price,
'total' => $total,
'href' => $this->url->link('product/product', 'product_id=' . $result['product_id'])
);
}
// Gift Voucher
$this->data['vouchers'] = array();
if (isset($this->session->data['vouchers']) && $this->session->data['vouchers']) {
foreach ($this->session->data['vouchers'] as $key => $voucher) {
$this->data['vouchers'][] = array(
'key' => $key,
'description' => $voucher['description'],
'amount' => $this->currency->format($voucher['amount'])
);
}
}
// Calculate Totals
$total_data = array();
$total = 0;
$taxes = $this->cart->getTaxes();
if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
$this->load->model('setting/extension');
$sort_order = array();
$results = $this->model_setting_extension->getExtensions('total');
foreach ($results as $key => $value) {
$sort_order[$key] = $this->config->get($value['code'] . '_sort_order');
}
array_multisort($sort_order, SORT_ASC, $results);
foreach ($results as $result) {
if ($this->config->get($result['code'] . '_status')) {
$this->load->model('total/' . $result['code']);
$this->{'model_total_' . $result['code']}->getTotal($total_data, $total, $taxes);
}
}
$sort_order = array();
foreach ($total_data as $key => $value) {
$sort_order[$key] = $value['sort_order'];
}
array_multisort($sort_order, SORT_ASC, $total_data);
}
$json['total'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total));
$this->data['totals'] = $total_data;
$this->data['checkout'] = $this->url->link('checkout/checkout', '', 'SSL');
if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/common/cart.tpl')) {
$this->template = $this->config->get('config_template') . '/template/common/cart.tpl';
} else {
$this->template = 'default/template/common/cart.tpl';
}
$json['output'] = $this->render();
$this->load->library('json');
$this->response->setOutput(Json::encode($json));
}
}
?>
Re: Howto add "view cart" button to ajax Shopping Cart previ
Posted: Wed Aug 10, 2011 6:05 am
by uksitebuilder
You had changed the 1st occurrences on both changes, not the 2nd occurrences.
Fixed file and attached.
Re: Howto add "view cart" button to ajax Shopping Cart previ
Posted: Wed Aug 10, 2011 6:13 am
by efp

ye, i must be smoking something! Its working like a dream!
Thank you so much for taking the time to help me out with this!
Top man!
Thanks again!!!!
Re: Howto add "view cart" button to ajax Shopping Cart previ
Posted: Thu Aug 25, 2011 10:38 am
by palomarpillien09
thanks!!!
this is great..
no problem with coding..
Re: Howto add "view cart" button to ajax Shopping Cart previ
Posted: Fri Feb 03, 2012 10:54 pm
by jussi
Hi!
How to make this work for 1.5.1.3! I´ve checked everything and it still gives undefined variable-error for button_viewcart.
Re: Howto add "view cart" button to ajax Shopping Cart previ
Posted: Sun Apr 08, 2012 4:25 am
by Agatha172
The XML worked like a charm..v1.5.1.3...thanks much
Re: Howto add "view cart" button to ajax Shopping Cart previ
Posted: Mon Mar 25, 2013 7:31 pm
by nothin
Thanks alot uksitebuilder. You save my life.
