fix conflit

This commit is contained in:
Thibault UBUNTU 2016-07-01 10:22:24 +02:00
commit 22e5b24c72
27 changed files with 1949 additions and 255 deletions

View File

@ -0,0 +1 @@
#TODO:

View File

@ -0,0 +1,172 @@
<?php
if (!defined('_CAN_LOAD_FILES_'))
exit;
include_once dirname(__FILE__).'/classes/AdvPictoClass.php';
class AdvPicto extends Module
{
public function __construct()
{
$this->name = 'advpicto';
$this->tab = 'front_office_features';
$this->version = '1.0';
$this->author = 'Antadis';
$this->need_instance = 0;
$this->bootstrap = true;
parent::__construct();
$this->displayName = $this->l('Gestionnaire de pictos');
$this->description = $this->l('Gérez vos pictos');
}
public function install()
{
return parent::install() && $this->registerHook('displayPictogrammesCategory') && $this->registerHook('displayPictogrammesProduct') && $this->createFolder() && $this->installDb() && $this->createTab();
}
public function uninstall()
{
if ( !parent::uninstall() ) {
return false;
}
$this->uninstallDb();
$this->deleteTab();
return true;
}
public function installDb()
{
$sql = array();
$sql[] =
'CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'advpicto` (
`id_advpicto` int(10) unsigned NOT NULL auto_increment,
`active` int(11),
`external` int(10) unsigned NOT NULL,
`selfcategory_display` int(10) unsigned NOT NULL,
PRIMARY KEY (`id_advpicto`)
) ENGINE=' . _MYSQL_ENGINE_ . ' DEFAULT CHARSET=utf8';
$sql[] =
'CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'advpicto_lang` (
`id_advpicto` int(10) unsigned NOT NULL,
`id_lang` int(10) unsigned NOT NULL,
`title` varchar(255) NOT NULL,
`alt` varchar(255) NOT NULL,
`link` varchar(255),
`content` text,
PRIMARY KEY (`id_advpicto`,`id_lang`)
) ENGINE=' . _MYSQL_ENGINE_ . ' DEFAULT CHARSET=utf8';
$sql[] =
'CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'advpicto_shop` (
`id_advpicto` int(10) unsigned NOT NULL,
`id_shop` int(10) unsigned NOT NULL,
PRIMARY KEY (`id_advpicto`,`id_shop`)
) ENGINE=' . _MYSQL_ENGINE_ . ' DEFAULT CHARSET=utf8';
$sql[] =
'CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'advpicto_category` (
`id_advpicto` int(10) unsigned NOT NULL,
`id_category` int(10) unsigned NOT NULL,
PRIMARY KEY (`id_advpicto`,`id_category`)
) ENGINE=' . _MYSQL_ENGINE_ . ' DEFAULT CHARSET=utf8';
$sql[] =
'CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'advpicto_product` (
`id_advpicto` int(10) unsigned NOT NULL,
`id_product` int(10) unsigned NOT NULL,
PRIMARY KEY (`id_advpicto`,`id_product`)
) ENGINE=' . _MYSQL_ENGINE_ . ' DEFAULT CHARSET=utf8';
$sql[] =
'CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'advpicto_product_shop` (
`id_advpicto_product` int(11) NOT NULL,
`id_shop` int(11) NOT NULL,
PRIMARY KEY (`id_advpicto_product`,`id_shop`)
) ENGINE=' . _MYSQL_ENGINE_ . ' DEFAULT CHARSET=utf8';
return $this->uninstallDb() && $this->updateDb($sql);
}
public function uninstallDb()
{
$sql = array();
$sql[] = 'DROP TABLE IF EXISTS `'._DB_PREFIX_.'advpicto` ;';
$sql[] = 'DROP TABLE IF EXISTS `'._DB_PREFIX_.'advpicto_lang` ;';
$sql[] = 'DROP TABLE IF EXISTS `'._DB_PREFIX_.'advpicto_shop` ;';
$sql[] = 'DROP TABLE IF EXISTS `'._DB_PREFIX_.'advpicto_category` ;';
$sql[] = 'DROP TABLE IF EXISTS `'._DB_PREFIX_.'advpicto_product` ;';
return $this->updateDb($sql);
}
public function updateDb( $sqls )
{
foreach ( $sqls as $sql ) {
if ( !Db::getInstance()->execute($sql) ) {
return false;
}
}
return true;
}
public function createFolder()
{
$img_dir = _PS_IMG_DIR_ . 'picto';
$folder = is_dir($img_dir);
if (!$folder)
{
$folder = mkdir($img_dir, 0755, true);
}
return $folder;
}
public function createTab()
{
$languages = Language::getLanguages();
$new_tab = new Tab();
$new_tab->class_name = 'AdminAdvPicto';
$new_tab->id_parent = Tab::getCurrentParentId();
$new_tab->module = $this->name;
foreach ( $languages as $language ) {
$new_tab->name[$language['id_lang']] = 'Pictos';
}
return $new_tab->add();
}
public function deleteTab()
{
$idTab = Tab::getIdFromClassName('AdminAdvPicto');
if ( $idTab ) {
$tab = new Tab($idTab);
$tab->delete();
}
}
public function hookDisplayPictogrammesCategory($params)
{
$id_product = $params['id_product'];
$id_category = Tools::getValue('id_category');
$pictos = AdvPictoClass::getPictosForProductList($id_product, $id_category);
$this->smarty->assign('pictos', $pictos);
return $this->display(__FILE__, 'product-list.tpl');
}
public function hookDisplayPictogrammesProduct($params)
{
$id_product = $params['id_product'];
$pictos = AdvPictoClass::getPictosForProductDetails($id_product);
$this->smarty->assign('pictos', $pictos);
return $this->display(__FILE__, 'product.tpl');
}
}

View File

@ -0,0 +1,217 @@
<?php
class AdvPictoClass extends ObjectModel
{
public $id_advpicto;
public $title;
public $alt;
public $link;
public $external;
public $selfcategory_display;
public $content;
public $active = true;
public $categories;
public static $definition = array(
'table' => 'advpicto',
'primary' => 'id_advpicto',
'multilang' => true,
'fields' => array(
'title' => array(
'type' => ObjectModel :: TYPE_STRING,
'lang' => true,
'validate' => 'isString',
'required' => TRUE
),
'alt' => array(
'type' => ObjectModel :: TYPE_STRING,
'lang' => true,
'validate' => 'isString'
),
'content' => array(
'type' => ObjectModel :: TYPE_HTML,
'lang' => true,
'validate' => 'isString'
),
'link' => array(
'type' => ObjectModel :: TYPE_STRING,
'lang' => true,
'validate' => 'isString'
),
'external' => array(
'type' => ObjectModel :: TYPE_INT,
'validate' => 'isBool'
),
'selfcategory_display' => array(
'type' => ObjectModel :: TYPE_INT,
'validate' => 'isBool'
),
'active' => array(
'type' => ObjectModel :: TYPE_INT,
'validate' => 'isBool'
)
)
);
public function __construct($id = NULL, $id_lang = NULL, $id_shop = NULL) {
parent::__construct($id, $id_lang, $id_shop);
$this->image_dir = _PS_IMG_DIR_ . 'picto/';
}
public static function getAllPictos()
{
$pictos = Db::getInstance()->executeS('
SELECT adv.`id_advpicto` as id, advpl.`title`
FROM `' . _DB_PREFIX_ . 'advpicto` adv
LEFT JOIN `' . _DB_PREFIX_ . 'advpicto_lang` advpl ON adv.`id_advpicto` = advpl.`id_advpicto`
GROUP BY adv.`id_advpicto`
');
return $pictos;
}
public function getCategories()
{
if(!$this->id)
{
return array();
}
if (!isset($this->categories)) {
$this->categories = array();
foreach (Db::getInstance()->executeS('
SELECT `id_category`
FROM `' . _DB_PREFIX_ . 'advpicto_category`
WHERE `id_advpicto` = ' . $this->id . '
') as $category) {
$this->categories[] = $category['id_category'];
}
}
return $this->categories;
}
public function addCategoryAssociation( $categories )
{
Db::getInstance()->execute('
DELETE FROM `'._DB_PREFIX_.'advpicto_category`
WHERE `id_advpicto` = '.(int) $this->id.'
');
if ($categories)
{
foreach ( $categories as $category )
{
Db::getInstance()->execute('
INSERT INTO `'._DB_PREFIX_.'advpicto_category`
(`id_advpicto`,`id_category`)
VALUES ('.(int) $this->id.','.$category.')
');
}
}
}
public static function getPictoName($id_picto, $id_lang)
{
return Db::getInstance()->getValue('
SELECT `title`
FROM `' . _DB_PREFIX_ . 'advpicto_lang`
WHERE `id_advpicto` = ' . $id_picto . '
AND id_lang = ' . $id_lang . '
');
}
public static function getPictosForProductList($id_product, $id_category)
{
$context = Context::getContext();
$categories = Product::getProductCategories($id_product);
if(!empty($categories))
{
$query = '
SELECT *
FROM `'._DB_PREFIX_.'advpicto` adv
INNER JOIN `'._DB_PREFIX_.'advpicto_lang` advl ON adv.`id_advpicto` = advl.`id_advpicto` AND id_lang = '. $context->language->id
;
if(Shop::isFeatureActive())
{
$query .= ' INNER JOIN `'._DB_PREFIX_.'advpicto_shop` advs ON adv.`id_advpicto` = advs.`id_advpicto` AND id_shop = '. $context->shop->id;
}
$query .= '
INNER JOIN `'._DB_PREFIX_.'advpicto_category` advc ON adv.`id_advpicto` = advc.`id_advpicto` AND advc.`id_category` IN ('. implode(',', $categories) . ')
WHERE adv.`active` = 1
GROUP BY adv.`id_advpicto`
ORDER BY adv.`id_advpicto` ASC
';
$pictos = Db::getInstance()->executeS($query);
if (empty($pictos))
{
return false;
}
foreach($pictos as $key => $picto)
{
if(!$picto['selfcategory_display'])
{
$pictoCategories = Db::getInstance()->executeS('
SELECT `id_category`
FROM `' . _DB_PREFIX_ . 'advpicto_category`
WHERE `id_advpicto` = ' . $picto['id_advpicto']
);
$pictoCategories = array_map(function($elem) { return $elem['id_category']; }, $pictoCategories);
if(in_array($id_category, $pictoCategories))
{
unset($pictos[$key]);
}
}
}
return $pictos;
}
}
public static function getPictosForProductDetails($id_product = null)
{
$context = Context::getContext();
if(!empty($id_product) && is_int($id_product))
{
$query = '
SELECT DISTINCT(advp.`id_advpicto`), `title`
FROM `'._DB_PREFIX_.'advpicto_product` advp
INNER JOIN `'._DB_PREFIX_.'advpicto_lang` advl ON advp.`id_advpicto` = advl.`id_advpicto` AND id_lang = '. $context->language->id
;
if(Shop::isFeatureActive())
{
$query .= ' INNER JOIN `'._DB_PREFIX_.'advpicto_shop` advs ON advp.`id_advpicto` = advs.`id_advpicto` AND id_shop = '. $context->shop->id;
}
$pictos = Db::getInstance()->executeS($query);
if (empty($pictos))
{
return false;
}
foreach($pictos as $key => $picto)
{
$pictos[$key]['hasImg'] = file_exists(_PS_IMG_DIR_ .'picto/'. $picto['id_advpicto'] . '.jpg');
}
return $pictos;
}
}
}

View File

@ -0,0 +1,49 @@
<?php
class AdvPictoProductClass extends ObjectModel
{
public $id_advpicto_product;
public $id_advpicto;
public $id_product;
public static $definition = array(
'table' => 'advpicto_product',
'primary' => 'id_advpicto_product',
'multilang' => false,
'fields' => array(
'id_advpicto' => array(
'type' => ObjectModel :: TYPE_INT,
'validate' => 'isInt'
),
'id_product' => array(
'type' => ObjectModel :: TYPE_INT,
'validate' => 'isInt'
)
)
);
public function __construct($id = NULL, $id_lang = NULL, $id_shop = NULL) {
parent::__construct($id, $id_lang, $id_shop);
$this->image_dir = _PS_IMG_DIR_ . 'picto/';
}
public function add($auto_date = true, $null_values = false) {
if(AdvPictoProductClass::exist($this->id_product, $this->id_advpicto, $this->id)) {
throw new PrestaShopException('Existe déjà');
}
return parent::add($auto_date, $null_values);
}
public function update($null_values = false) {
if(AdvPictoProductClass::exist($this->id_product, $this->id_advpicto, $this->id)) {
throw new PrestaShopException('Existe déjà');
}
return parent::update($null_values);
}
public static function exist($id_product, $id_advpicto, $id_advpicto_product = null)
{
return Db::getInstance()->getValue('SELECT id_advpicto_product FROM '._DB_PREFIX_.'advpicto_product WHERE id_product = '.(int)$id_product.' AND id_advpicto = '.(int)$id_advpicto.(!is_null($id_advpicto_product) ? ' AND id_advpicto_product != '.(int)$id_advpicto_product : ''));
}
}

View File

@ -0,0 +1,35 @@
<?php
/*
* 2007-2015 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2015 PrestaShop SA
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8" ?>
<module>
<name>advpicto</name>
<displayName><![CDATA[Gestionnaire de pictos]]></displayName>
<version><![CDATA[1.0]]></version>
<description><![CDATA[G&eacute;rez vos pictos]]></description>
<author><![CDATA[Antadis]]></author>
<tab><![CDATA[front_office_features]]></tab>
<is_configurable>0</is_configurable>
<need_instance>0</need_instance>
<limited_countries></limited_countries>
</module>

View File

@ -0,0 +1,348 @@
<?php
include_once dirname(__FILE__).'/../../classes/AdvPictoClass.php';
class AdminAdvPictoController extends ModuleAdminController
{
public function __construct()
{
$this->table = 'advpicto';
$this->className = 'AdvPictoClass';
$this->identifier = 'id_advpicto';
$this->lang = true;
$this->deleted = false;
$this->bootstrap = true;
$this->explicitSelect = true;
$this->context = Context::getContext();
$this->_defaultOrderBy = 'id_advpicto';
$this->fieldImageSettings = array(
'name' => 'image',
'dir' => 'picto'
);
$this->_group = 'GROUP BY a.`id_advpicto`';
parent::__construct();
$this->fields_list = array(
'id_advpicto' => array(
'title' => $this->l('ID'),
'align' => 'center',
'width' => 25,
'filter_key' => 'a!id_advpicto'
),
'title' => array(
'title' => $this->l('Nom')
),
'active' => array(
'title' => $this->l('Activé'),
'active' => 'status',
'filter_key' => 'a!active',
'align' => 'text-center',
'type' => 'bool',
'class' => 'fixed-width-sm',
'orderby' => false
),
);
$this->actions = array('edit','delete');
$this->bulk_actions = array(
'delete' => array(
'text' => $this->l('Supprimer la liste'),
'icon' => 'icon-trash',
'confirm' => $this->l('Supprimer les blocs selectionné?')
)
);
$this->specificConfirmDelete = false;
}
public function initPageHeaderToolbar()
{
parent::initPageHeaderToolbar();
if ($this->display == 'edit' || $this->display == 'add') {
$this->page_header_toolbar_btn['back_to_list'] = array(
'href' => self::$currentIndex.'&token='.$this->token,
'desc' => $this->l('Retour à la liste', null, null, false),
'icon' => 'process-icon-back'
);
}
$this->page_header_toolbar_btn['new'] = array(
'href' => self::$currentIndex.'&addadvpicto&token='.$this->token,
'desc' => $this->l('Ajouter un nouveau picto', null, null, false),
'icon' => 'process-icon-new'
);
$this->page_header_toolbar_btn['new_product'] = array(
'href' => $this->context->link->getAdminLink('AdminAdvPictoProduct'),
'desc' => $this->l('Association produit', null, null, false),
'icon' => 'process-icon-compress'
);
}
public function renderForm()
{
if (!($obj = $this->loadObject(true))) {
return;
}
$context = Context::getContext();
if ( Tools::isSubmit('id_advpicto') ) {
$id_advpicto = (int)Tools::getValue('id_advpicto');
$image = __PS_BASE_URI__.'img/picto/'.$id_advpicto.'.jpg' ;
} else {
$image = "noimg" ;
}
$selected_categories = $obj->getCategories();
$image = _PS_IMG_DIR_ . 'picto/' . $obj->id.'.jpg';
$image_url = ImageManager::thumbnail($image, $this->table.'_'.(int)$obj->id.'.'.$this->imageType, 350, $this->imageType, TRUE, TRUE);
$image_size = file_exists($image) ? filesize($image) / 1000 : FALSE;
$this->fields_form = array(
'multilang' => true,
'tinymce' => true,
'legend' => array(
'title' => $this->l('Picto'),
),
'submit' => array(
'name' => 'submitBlock',
'title' => $this->l('Enregistrer')
),
'input' => array(
array(
'type' => 'text',
'label' => $this->l('Titre'),
'name' => 'title',
'lang' => true,
'required' => true,
'size' => 255
),
array(
'type' => 'text',
'label' => $this->l('Alt'),
'name' => 'alt',
'lang' => true,
'size' => 255
),
array(
'type' => 'file',
'label' => $this->l('Choisir une image'),
'name' => 'image',
'display_image' => TRUE,
'image' => $image_url,
'size' => $image_size,
'delete_url' => self::$currentIndex.'&'.$this->identifier.'='.$this->object->id.'&token='.$this->token.'&deleteImage=1'
),
array(
'type' => 'text',
'label' => $this->l('Lien'),
'name' => 'link',
'lang' => true,
'size' => 255
),
array(
'type' => 'switch',
'label' => $this->l('Lien externe'),
'name' => 'external',
'required' => false,
'is_bool' => true,
'values' => array(
array(
'id' => 'external_on',
'value' => 1,
'label' => $this->l('Yes')
),
array(
'id' => 'external_off',
'value' => 0,
'label' => $this->l('No')
)
)
),
array(
'type' => 'textarea',
'label' => $this->l('Contenu'),
'name' => 'content',
'autoload_rte' => true,
'lang' => true,
'cols' => 60,
'rows' => 120
),
array(
'type' => 'categories',
'label' => $this->l('Parent category'),
'name' => 'categoryBox',
'tree' => array(
'id' => 'categories-tree',
'selected_categories' => $selected_categories,
'use_checkbox' => true,
'root_category' => $context->shop->getCategory()
),
'col' => '9',
),
array(
'type' => 'switch',
'label' => $this->l('Actif'),
'name' => 'active',
'required' => false,
'class' => 't',
'is_bool' => true,
'values' => array(
array(
'id' => 'active_on',
'value' => 1
),
array(
'id' => 'active_off',
'value' => 0
)
),
),
array(
'type' => 'switch',
'label' => $this->l('Affiché dans sa propre catégorie'),
'name' => 'selfcategory_display',
'required' => false,
'class' => 't',
'is_bool' => true,
'hint' => $this->l('Permet de ne pas affiché le pictogramme dans sa propre catégorie (mais dans les autres catégories associées à un produit par exemple)'),
'values' => array(
array(
'id' => 'selfcategory_display_on',
'value' => 1
),
array(
'id' => 'selfcategory_display_off',
'value' => 0
)
),
)
)
);
if (Shop::isFeatureActive()) {
$this->fields_form['input'][] = array(
'type' => 'shop',
'label' => $this->l('Boutique'),
'name' => 'checkBoxShopAsso',
'form_group_class' => 'fieldhide input_association'
);
}
return parent::renderForm();
}
public function init()
{
parent::init();
if (Shop::getContext() == Shop::CONTEXT_SHOP) {
$this->_join .= ' LEFT JOIN `'._DB_PREFIX_. $this->table .'_shop` sa ON (a.`' . $this->identifier . '` = sa.`' . $this->identifier . '` AND sa.id_shop = '.(int)$this->context->shop->id.') ';
}
if (Shop::getContext() == Shop::CONTEXT_SHOP && Shop::isFeatureActive()) {
$this->_where = ' AND sa.`id_shop` = '.(int)Context::getContext()->shop->id;
}
}
public function postProcess()
{
if (Tools::getValue('deleteImage')) {
$this->processForceDeleteImage();
}
$result = parent::postProcess();
if ( Validate::isLoadedObject($result) ) {
$this->generatePicture($result);
$result->addCategoryAssociation(Tools::getValue('categoryBox'));
}
return $result;
}
public function processForceDeleteImage()
{
$picto = $this->loadObject(TRUE);
if (Validate::isLoadedObject($picto))
{
$picto->deleteImage(TRUE);
}
}
public function generatePicture($object)
{
$namePost = 'image';
if (isset($_FILES[$namePost]) && !empty($_FILES[$namePost]['tmp_name']) ) {
$fileTemp = $_FILES[$namePost]['tmp_name'];
$fileParts = pathinfo($_FILES[$namePost]['name']);
if ( $fileParts['extension'] == 'jpg' || $fileParts['extension'] == 'png' ) {
if(!is_dir(_PS_IMG_DIR_.'picto')) {
mkdir(_PS_IMG_DIR_.'picto', 0775);
}
$res = move_uploaded_file($fileTemp, _PS_IMG_DIR_.'picto/' . $object->id . '.jpg');
if(!$res)
$this->errors[] = sprintf(Tools::displayError('An error occured during upload of file %s'), $object->id . '.jpg');
else
$this->confirmations[] = sprintf($this->l('File %s has been uploaded'), $object->id . '.jpg');
} else
$this->errors[] = sprintf(Tools::displayError('File %s have not good extension, only .jpg or .png'), $object->id . '.jpg');
}
}
protected function updateAssoShop($id_object)
{
if (!Shop::isFeatureActive()) {
return;
}
$assos_data = $this->getSelectedAssoShop($this->table, $id_object);
$exclude_ids = $assos_data;
foreach (Db::getInstance()->executeS('SELECT id_shop FROM ' . _DB_PREFIX_ . 'shop') as $row) {
if (!$this->context->employee->hasAuthOnShop($row['id_shop'])) {
$exclude_ids[] = $row['id_shop'];
}
}
Db::getInstance()->delete($this->table . '_shop', '`' . $this->identifier . '` = ' . (int) $id_object . ($exclude_ids ? ' AND id_shop NOT IN (' . implode(', ', $exclude_ids) . ')' : ''));
$insert = array();
foreach ($assos_data as $id_shop) {
$insert[] = array(
$this->identifier => $id_object,
'id_shop' => (int) $id_shop,
);
}
return Db::getInstance()->insert($this->table . '_shop', $insert, FALSE, TRUE, Db::INSERT_IGNORE);
}
protected function getSelectedAssoShop($table)
{
if (!Shop::isFeatureActive()) {
return array();
}
$shops = Shop::getShops(TRUE, NULL, TRUE);
if (count($shops) == 1 && isset($shops[0])) {
return array($shops[0], 'shop');
}
$assos = array();
if (Tools::isSubmit('checkBoxShopAsso_' . $table)) {
foreach (Tools::getValue('checkBoxShopAsso_' . $table) as $id_shop => $value) {
$assos[] = (int) $id_shop;
}
} else if (Shop::getTotalShops(FALSE) == 1) {
// if we do not have the checkBox multishop, we can have an admin with only one shop and being in multishop
$assos[] = (int) Shop::getContextShopID();
}
return $assos;
}
}

View File

@ -0,0 +1,175 @@
<?php
include_once dirname(__FILE__).'/../../classes/AdvPictoClass.php';
include_once dirname(__FILE__).'/../../classes/AdvPictoProductClass.php';
class AdminAdvPictoProductController extends ModuleAdminController
{
public function __construct()
{
$this->table = 'advpicto_product';
$this->className = 'AdvPictoProductClass';
$this->identifier = 'id_advpicto_product';
$this->lang = false;
$this->multishop_context = false;
$this->deleted = false;
$this->bootstrap = true;
$this->explicitSelect = true;
$this->context = Context::getContext();
$this->_defaultOrderBy = 'id_advpicto';
$this->fieldImageSettings = array(
'name' => 'image',
'dir' => 'picto'
);
parent::__construct();
$this->fields_list = array(
'id_advpicto_product' => array(
'title' => $this->l('ID'),
'align' => 'center',
'width' => 25,
'filter_key' => 'a!id_advpicto_product'
),
'id_advpicto' => array(
'title' => $this->l('Picto'),
'filter_key' => 'a!id_advpicto',
'callback' => 'getPictoName'
),
'id_product' => array(
'title' => $this->l('Produit'),
'filter_key' => 'a!id_product',
'callback' => 'getProductName',
),
);
$this->actions = array('edit','delete');
$this->bulk_actions = array(
'delete' => array(
'text' => $this->l('Supprimer la liste'),
'icon' => 'icon-trash',
'confirm' => $this->l('Supprimer les blocs selectionné?')
)
);
$this->specificConfirmDelete = false;
}
public function init()
{
parent::init();
if(Tools::getValue('loadProductName') == 1)
{
$this->loadProductData();
}
}
public function initPageHeaderToolbar()
{
parent::initPageHeaderToolbar();
$this->page_header_toolbar_btn['back_to_list'] = array(
'href' => $this->context->link->getAdminLink('AdminAdvPicto'),
'desc' => $this->l('Liste des pictogrammes', null, null, false),
'icon' => 'process-icon-back'
);
if ($this->display == 'edit' || $this->display == 'add') {
$this->page_header_toolbar_btn['new_product'] = array(
'href' => $this->context->link->getAdminLink('AdminAdvPictoProduct'),
'desc' => $this->l('Liste des associations', null, null, false),
'icon' => 'process-icon-back'
);
}
if ($this->display != 'edit' && $this->display != 'add') {
$this->page_header_toolbar_btn['new_constructor'] = array(
'href' => self::$currentIndex.'&addadvpicto_product&token='.$this->token,
'desc' => $this->l('Ajouter une association produit', null, null, false),
'icon' => 'process-icon-new'
);
}
}
public static function getProductName($id_product, $obj) {
return Product::getProductName($id_product, null, Context::getContext()->language->id);
}
public static function getPictoName($id_advpicto) {
return AdvPictoClass::getPictoName($id_advpicto, Context::getContext()->language->id);
}
public function loadProductData()
{
$id_product = Tools::getValue('id_product');
$identifier = Tools::getValue('identifier');
$data['identifier'] = $identifier;
$data['nameProduct'] = self::getProductName($id_product, null, Context::getContext()->language->id);
die(Tools::jsonEncode($data));
}
public function renderForm()
{
if (!($obj = $this->loadObject(true))) {
return;
}
$this->addJqueryUI(array('ui.core','ui.widget'));
$this->addJqueryPlugin(array('autocomplete'));
$context = Context::getContext();
$pictos = AdvPictoClass::getAllPictos();
$this->tpl_form_vars['product_id'] = $this->object->id_product;
$this->fields_form = array(
'multilang' => true,
'tinymce' => true,
'legend' => array(
'title' => $this->l('Picto'),
),
'submit' => array(
'name' => 'submitAdd'.$this->table,
'title' => $this->l('Enregistrer')
),
'input' => array(
array(
'type' => 'select',
'label' => $this->l('Pictogramme'),
'name' => 'id_advpicto',
'options' => array(
'query' => $pictos,
'id' => 'id',
'name' => 'title'
),
'required' => true,
),
array(
'type' => 'product',
'label' => $this->l('Produit'),
'name' => 'id_product',
'id' => 'id_product',
'required' => true
)
)
);
if (Shop::isFeatureActive()) {
$this->fields_form['input'][] = array(
'type' => 'shop',
'label' => $this->l('Boutique'),
'name' => 'checkBoxShopAsso',
'form_group_class' => 'fieldhide input_association'
);
}
return parent::renderForm();
}
public function beforeAdd($object)
{
parent::beforeAdd($object);
}
}

View File

@ -0,0 +1,35 @@
<?php
/*
* 2007-2015 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2015 PrestaShop SA
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@ -0,0 +1,35 @@
<?php
/*
* 2007-2015 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2015 PrestaShop SA
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@ -0,0 +1,35 @@
<?php
/*
* 2007-2015 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2015 PrestaShop SA
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

BIN
modules/advpicto/logo.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
modules/advpicto/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@ -0,0 +1,35 @@
<?php
/*
* 2007-2015 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2015 PrestaShop SA
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@ -0,0 +1,35 @@
<?php
/*
* 2007-2015 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2015 PrestaShop SA
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@ -0,0 +1,75 @@
{extends file="helpers/form/form.tpl"}
{block name="field"}
{if $input.type == 'product' }
<div class="col-lg-4">
<input type="hidden" id="id_product" name="id_product" value="{$product_id}" />
<input type="text" size="10" id="id_product_name" name="id_product_name" class="ac_input" autocomplete="off" />
</div>
{/if}
{$smarty.block.parent}
{/block}
{block name="defaultForm"}
<script>
var Choice = function () {
var self = this;
this.init = function() {
this.loadData();
this.initAutocompleteChoice();
}
};
Choice.prototype.loadData = function() {
if($('#id_product').val()) {
var idProduct = $('#id_product').val();
$.ajax({
type: "POST",
url: "{Context::getContext()->link->getAdminLink(AdminAdvPictoProduct)}",
data: 'loadProductName=1&id_product='+idProduct+'&identifier='+idProduct,
dataType: 'json',
success: function (jsonData) {
$('#id_product_name').val(jsonData.nameProduct);
}
});
}
}
Choice.prototype.initAutocompleteChoice = function() {
$('#id_product_name').autocomplete('ajax_products_list.php', {
minChars: 1,
autoFill: false,
max:20,
matchContains: true,
mustMatch:false,
scroll:false,
cacheLength:0,
formatItem: function(item) {
return item[0];
},
}).result( function(event, data, formatted) {
var idProduct = data[1];
var nameProduct = data[0];
$('#id_product').val(idProduct);
$('#id_product_name').val(nameProduct);
});
$('#id_product_name').setOptions({
extraParams: {
excludeIds : ',',
}
});
}
$(document).ready(function() {
var choice = new Choice();
choice.init();
});
</script>
{$smarty.block.parent}
{/block}

View File

@ -0,0 +1,9 @@
{if $pictos}
<ul>
{foreach from=$pictos item=picto name=pictos}
<li>
<img src="{$base_dir}img/picto/{$picto.id_advpicto}.jpg" alt="{$picto.alt}" title="{$picto.title}" />
</li>
{/foreach}
</ul>
{/if}

View File

@ -0,0 +1,12 @@
{if $pictos}
<div class="pictos row">
{foreach from=$pictos item=picto name=picto}
<div class="picto md6 valign-middle">
{if $picto.hasImg}
<img src="{$base_dir}img/picto/{$picto.id_advpicto}.jpg" alt="{$picto.title}" />
{/if}
<div>{$picto.title}</div>
</div>
{/foreach}
</div>
{/if}

View File

@ -0,0 +1,35 @@
<?php
/*
* 2007-2015 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2015 PrestaShop SA
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@ -2703,24 +2703,44 @@ main#categorycms { margin-bottom: 30px }
#category .subcategories{ margin-bottom: 15px;}
}
/*************************************************************************************************************
*************************************** PRODUCT *****************************************
**************************************************************************************************************/
.intro_product {
height: 100px;
}
#product {}
#product main h1 {
#product .block-left .inner {
border: 1px solid #ccc;
margin-top: 30px;
}
#product main .title1 {
font-family: 'Vidaloka';
letter-spacing: -1px;
border-bottom: 3px solid #333333;
padding-bottom: 15px;
}
#product main .title1 h1 {
max-width: 80%;
float: left;
}
#product main .title1 .social_share {
float: right;
margin-top: 25px;
}
#product .logo_manufacturer {
margin-bottom: 10px;
margin-bottom: 20px;
text-align: center;
padding-top: 20px;
}
#product .logo_manufacturer img {
margin: 0 auto;
max-height: 80px;
max-width: 100%;
}
#product .payment_logo {
padding-top: 15px;
padding-bottom: 15px;
}
#product .view-larger {
background: url('../img/zoom.png') no-repeat;
@ -2749,7 +2769,28 @@ main#categorycms { margin-bottom: 30px }
left: 30px;
z-index: 5;
}
#view_full_size { position: relative; display: block;}
#product #main-info .pictos {
border-top: #cccccc 1px solid;
border-bottom: #cccccc 1px solid;
margin-top: 15px;
}
#product #main-info .pictos .picto {
padding-top: 8px;
padding-bottom: 8px;
font-family: 'pompiere_regular';
color: #666666;
height: 64px;
}
#product #main-info .pictos .picto:nth-child(odd) { padding-right: 5px; }
#product #main-info .pictos .picto:nth-child(even) { padding-left: 5px; }
#product #main-info .pictos .picto div {
font-size: 20px;
}
#product #main-info .pictos .picto .img {
padding-right: 10px;
}
#view_full_size { position: relative; display: block; margin-top: 30px; }
#views_block {}
#views_block ul#thumbs_list_frame {}
#views_block ul#thumbs_list_frame li {
@ -2774,27 +2815,45 @@ main#categorycms { margin-bottom: 30px }
text-decoration: underline;
}
#product .links {
border-top: 1px solid #cccccc;
margin-top: 30px;
margin-top: 10px;
padding-top: 10px;
overflow: auto;
text-align: center;
font-size: 0;
}
#product .links > span {
display: inline-block;
}
#product .links a {
color: #333;
text-transform: uppercase;
font-family: 'pompiere_regular';
font-size: 18px;
float: left;
margin-right: 15px;
display: inline-block;
}
#product .shipmentCost {
text-align: left;
color: #666;
font-size: 14px;
}
#product .shipmentCost i {
font-size: 25px;
padding-right: 10px;
}
#product .shipmentCost > * {
vertical-align: bottom;
}
#product .shipmentCost .name {
font-weight: bold;
}
#buy_block {
background: #f5f5f5;
padding: 15px 30px;
}
.content_prices {
border-bottom: 1px solid #cccccc;
margin-bottom: 15px;
text-align: center;
text-align: left;
}
.content_prices .solde {
background: url('../img/bg_soldes.png') center center no-repeat;
@ -2825,7 +2884,7 @@ main#categorycms { margin-bottom: 30px }
margin: 10px 0;
}
.box-cart-bottom .btn.btn-cart{ width: 100%; }
#quantity_wanted_p {}
#quantity_wanted_p { font-size: 0; }
#quantity_wanted_p label {
font-weight: normal;
color: #666666;
@ -2834,20 +2893,25 @@ main#categorycms { margin-bottom: 30px }
float: left;
}
#quantity_wanted_p a {
float: right;
vertical-align: middle;
font-size: 30px;
height: 35px;
line-height: 30px;
margin-right: 5px;
padding: 0;
width: 30px;
background-color: #b9b7b7;
border-radius: 0px;
}
#quantity_wanted_p a:hover { background-color: #6ac5bb; }
#quantity_wanted {
color: #999999;
text-align: center;
float: right;
padding: 5px;
width: 80px;
font-size: 15px;
margin-right: 10px;
vertical-align: middle;
}
.attribute_fieldset { margin-bottom: 5px; }
.attribute_fieldset .attribute_list { clear: both; }
@ -2869,9 +2933,33 @@ main#categorycms { margin-bottom: 30px }
.availlability {
color:#339966;
margin-top: 15px;
text-align: center;
font-family: 'pt_sansbold';
text-align: left;
font-family: 'pt_sans';
font-size: 14px;
font-weight: normal;
}
#product .availlability {
color: #666;
margin: 0;
}
#product .avail {
margin-top: 20px;
}
#product .availlability span {
font-weight: normal;
}
#product .availlability .name {
font-weight: bold;
color: #6ac5bb;
}
#product .availlability i {
font-size: 25px;
padding-right: 10px;
position: relative;
top: 5px;
}
#product #buy_block .box-cart-bottom {
margin-bottom: 0;
}
.payment_logo{ text-align: center; }
@ -3002,8 +3090,15 @@ main#categorycms { margin-bottom: 30px }
@media (max-width: 1199px) {
#quantity_wanted_p label { float: left; width: 100%; }
/*#product .pictos .picto { text-align: center;}*/
#product #main-info .pictos .picto .img { }
#product #main-info .pictos .picto div { max-width: 50%;}
#product main .title1 h1 { width: 100%; margin-bottom: 0; max-width: none; float: none; }
#product main .title1 .social_share { margin: 15px 0; }
#quantity_wanted_p label { float: left; }
#buy_block .add_to_cart_button{ font-size: 17px; }
#product main .title1 h1 { width: 100%; }
#product main .title1 .social_share { float:none;}
}
@media (max-width: 991px) {
#quantity_wanted_p label { float: none; width: auto; }
@ -3056,7 +3151,14 @@ main#categorycms { margin-bottom: 30px }
width: 290px;
}
}
@media (max-width: 500px){
#product main .title1 h1 { font-size: 22px;}
#product #main-info .pictos .picto:nth-child(odd) { padding-right: 15px; }
#product #main-info .pictos .picto:nth-child(even) { padding-left: 15px; }
#product #main-info .pictos .picto .img { width: 100px; text-align: center; }
#buy_block { padding-right: 15px; padding-left: 15px; }
}
/*************************************************************************************************************
*************************************** POPUP PANIER *****************************************
**************************************************************************************************************/
@ -3282,26 +3384,65 @@ main#categorycms { margin-bottom: 30px }
@media(max-width: 991px) {
#order_step li div { text-align: center }
}
#shopping-cart {
padding: 20px 15px;
@media(min-width: 991px) {
#shopping-cart .header .cart_navigation .btn-cart, #shopping-cart .header .cart_navigation .btn-cancel {
background-color: transparent;
color: #333;
border: 1px solid #333;
}
#shopping-cart .header .btn.btn-cancel:hover, #shopping-cart .header .cart_navigation .btn-cart:hover {
background-color: #333;
color: #fff;
}
}
#shopping-cart {
padding: 0px 15px 20px 15px;
}
#shopping-cart .header .cart_navigation {
font-size: 16px;
margin-top: 0;
}
#shopping-cart .header .btn.btn-cancel, #shopping-cart .header .cart_navigation .btn-cart {
border-color: #333;
}
@media(max-width: 991px) {
#shopping-cart .header .cart_navigation .btn-cart {
margin-bottom: 0;
}
#shopping-cart .header .btn.btn-cancel {
background-color: #6ac5bb;
color: #fff;
border-color: #6ac5bb;
margin-bottom: 15px;
}
}
#shopping-cart .table-div .table-head {
background-color: #f1f1f1;
font-family: 'pt_sansbold';
color: #4d4d4d;
}
#shopping-cart #shopping-cart-products .image {
border-right: 1px solid #dfdfdf;
overflow: hidden;
padding: 15px;
text-align: center;
}
#shopping-cart #shopping-cart-products .image img {
display: block;
width: 100%;
max-height: 70px;
}
#shopping-cart #shopping-cart-products .product-infos {
padding-left: 20px;
}
#shopping-cart #shopping-cart-products .product-name {
color: #666;
color: #333;
display: block;
font-family: 'pt_sansbold';
font-size: 16px;
font-size: 15px;
min-height: 45px;
}
#shopping-cart #shopping-cart-products .product-attributes {
color: #999;
@ -3317,11 +3458,12 @@ main#categorycms { margin-bottom: 30px }
background-position: -34px -36px;
}
#shopping-cart .delete a i { color: #ccc; font-size: 16px;}
#shopping-cart #shopping-cart-products .price {
color: #4d4d4d;
font-family: 'Vidaloka';
letter-spacing: -1px;
font-size: 32px;
font-size: 25px;
padding-right: 10px;
}
#shopping-cart #shopping-cart-products .old-price {
@ -3376,7 +3518,7 @@ main#categorycms { margin-bottom: 30px }
color: #e4535d;
font-family: 'Vidaloka';
letter-spacing: -1px;
font-size: 32px;
font-size: 24px;
text-align: right;
}
#shopping-cart #calcul {
@ -3384,24 +3526,25 @@ main#categorycms { margin-bottom: 30px }
}
#shopping-cart #calcul .border {
border: 1px solid #dfdfdf;
border-radius: 3px;
padding: 30px;
border-radius: 3px 3px 0 0;
padding: 20px;
overflow: auto;
}
#shopping-cart #calcul .discount_form {
margin-top: 20px;
}
#shopping-cart #calcul .discount_form span.voucher_name { cursor: pointer;}
#shopping-cart #calcul .discount_form span.voucher_name:hover { color: #6ac5bb; font-weight: bold; }
#shopping-cart #calcul .discount_form .form-group {
position: relative;
width: 100%;
}
#shopping-cart #calcul .discount_form .form-group .inner {
position: relative;
}
#shopping-cart #calcul .discount_form label {
color: #4d4d4d;
font-family: 'pt_sansbold';
font-size: 20px;
font-size: 16px;
margin-bottom: 10px;
}
#shopping-cart #calcul .discount_form .discount_name {
@ -3414,59 +3557,113 @@ main#categorycms { margin-bottom: 30px }
width: 100%;
}
#shopping-cart #calcul .discount_form .btn {
background: #4d4d4d;
background:transparent;
border: 1px solid #4d4d4d;
color: #4d4d4d;
border-radius: 0 2px 2px 0;
font-family: 'pompiere_regular';
font-size: 20px;
font-size: 16px;
height: 40px;
line-height: 40px;
padding: 0;
padding: 0 10px;
position: absolute;
right: 0;
text-transform: uppercase;
text-align: center;
top: 0;
width: 65px;
width: 30%;
}
#shopping-cart #calcul .discount_form .btn:hover {
background: #4d4d4d;
color: #fff;
border-color: #4d4d4d;
}
#shopping-cart .discount_display {
padding: 0;
margin: 0;
margin-top: 15px;
}
#shopping-cart .discount_display > *{
padding: 0;
margin: 0;
}
#shopping-cart .discount_display > .title-offers u{
text-decoration: none;
font-family: 'pt_sansbold';
}
#shopping-cart #calcul .line {
border-top: 1px solid #e5e5e5;
color: #333;
clear: both;
font-family: 'pt_sans';
font-size: 18px;
overflow: hidden;
padding: 10px 0;
border-bottom: #e5e5e5 1px solid;
}
#shopping-cart #calcul .line:nth-child(2) {
border-bottom: 0;
}
#shopping-cart #calcul .line.last-line {
background-color: #f1f1f1;
border: 0;
padding-top: 22px;
}
#shopping-cart #calcul .line:first-child { border: 0 }
#shopping-cart #calcul .line > div:first-child {
padding: 7px 0 0 0;
font-family: 'pt_sansbold';
color: #4d4d4d;
font-size: 16px;
padding: 7px 0 0 90px;
}
#shopping-cart #calcul .line > div:last-child {
font-family: 'Vidaloka';
letter-spacing: -1px;
font-size: 20px;
padding-right: 111px;
padding-right: 50px;
text-align: right;
}
#shopping-cart #calcul .line.shipping-politic {
#shopping-cart .blocPromo {
margin-top: 20px;
}
#shopping-cart #calcul .shipping-politic {
border: 1px solid #dfdfdf;
border-radius: 3px;
margin-bottom: -1px;
border-radius: 0 0 3px 3px;
margin-top: -1px;
padding: 15px;
background: #f1f1f1;
font-size: 15px;
font-family: 'pt_sans';
}
#shopping-cart #calcul .shipping-politic .titre {
color: #4d4d4d;
font-family: 'pt_sansbold';
font-size: 16px;
margin-bottom: 10px;
display: block;
}
#shopping-cart #calcul .shipping-politic p {
margin-bottom: 0;
}
#shopping-cart .reminderFreeShipping {
display: block;
color: #e4535d;
font-family: 'Vidaloka';
font-family: 'pt_sans';
margin-bottom: 10px;
padding-bottom: 15px;
position: relative;
top: -12px;
border-bottom: 1px solid #E5E5E5;
font-style: italic;
font-size: 15px;
padding-top: 10px;
padding-bottom: 10px;
background-color: #ebf7f6;
padding: 15px;
color: #333333;
margin-top: 15px;
margin-bottom: 25px;
}
#shopping-cart .reminderFreeShipping .price {
color: #e4535d;
font-family: 'pt_sansbold';
}
#shopping-cart .reminderFreeShipping .icon-gift { color: #6ac5bb; padding-right: 50px; font-size: 22px; padding-right: 15px; }
#shopping-cart #calcul .line.shipping-politic > div:last-child {
font-family: 'pt_sans';
font-size: 16px;
@ -3476,17 +3673,18 @@ main#categorycms { margin-bottom: 30px }
font-family: 'Vidaloka';
letter-spacing: -1px;
}
#shopping-cart #calcul .line #total_tax {
font-family: 'Vidaloka';
letter-spacing: -1px;
font-size: 20px;
}
#shopping-cart #calcul .line > div.label-total-price {
padding: 10px 0 0 0;
}
#shopping-cart #calcul #total_price {
color: #e4535d;
font-size: 32px;
font-size: 36px;
}
.cart_navigation {
margin: 20px 0 0 0;
@ -3498,27 +3696,51 @@ main#categorycms { margin-bottom: 30px }
.cart_navigation .btn-cancel {
float: left;
}
#shopping-cart .footer .cart_navigation .inner {
background-color: #f1f1f1;
padding: 20px;
font-family: 'pt_sansbold';
}
#shopping-cart .footer .cart_navigation .btn-cart, #shopping-cart .footer .cart_navigation .btn-cancel {
font-size: 24px;
}
#shopping-cart .footer .cart_navigation > div:first-child .inner p { margin-bottom: 0; }
#shopping-cart .footer .cart_navigation .btn-cancel { width: auto; float: right; background-color: #6ac5bb; color: #fff; margin: 0; }
#shopping-cart .footer .cart_navigation .btn-cart { width: 100%; padding-bottom: 35px; }
#shopping-cart .footer .cart_navigation .btn-cancel:hover { background-color: #e4535d; border-color: #e4535d; }
#shopping-cart #calcul.table-row { margin: 10px -15px 0 -15px; }
@media (min-width: 1399px) {
#shopping-cart .table-head .text-right, #shopping-cart #shopping-cart-products .total {
padding-right: 50px;
}
}
@media (max-width: 1199px) {
#shopping-cart .footer .cart_navigation .btn-cart, #shopping-cart .footer .cart_navigation .btn-cancel { font-size: 20px; }
#shopping-cart #shopping-cart-products .extension .image .custom-checkbox { margin: 24px 0 0 5px; }
#shopping-cart #shopping-cart-products .extension .image .custom-checkbox:after { margin-right: 0 }
}
@media (max-width: 991px) {
#shopping-cart #shopping-cart-products .table-row { padding: 15px 0 }
#shopping-cart #shopping-cart-products .table-row.valign-middle .image { border: 0; margin-left: 0; position: absolute; left: 15px; z-index: 1; width: 25% }
#shopping-cart #shopping-cart-products .table-row.valign-middle .image > a { display: block; }
#shopping-cart #shopping-cart-products .table-row.valign-middle .image img { margin: 0; }
#shopping-cart #shopping-cart-products .table-row.valign-middle > div { margin-left: 30%; width: 70%; }
#shopping-cart #shopping-cart-products .table-row.valign-middle > div.total { text-align: right; }
#shopping-cart #shopping-cart-products .table-row.valign-middle > div.form-group.qty { z-index: 2; padding-top: 10px; }
#shopping-cart #shopping-cart-products .table-row.valign-middle > div { margin-left: 35%; width: 65%; position: static; }
#shopping-cart #shopping-cart-products .table-row.valign-middle > div.form-group.qty { margin-left: 0; width: 35%; }
#shopping-cart #shopping-cart-products .table-row.valign-middle > div.total { padding-top: 20px; text-align: left; }
#shopping-cart #shopping-cart-products .table-row.valign-middle > div.form-group.qty { z-index: 2; padding-top: 57px; padding-left: 9%; }
#shopping-cart #shopping-cart-products .table-row.valign-middle > div.form-group.qty strong { float: left; margin-top: 4px; margin-right: 10px; }
#shopping-cart #shopping-cart-products .product-infos { padding-left: 15px }
#shopping-cart #shopping-cart-products .price { line-height: 22px }
#shopping-cart #shopping-cart-products .taxes { overflow: hidden; position: static; }
#shopping-cart #shopping-cart-products .taxes li { font-size: 12px }
#shopping-cart .delete { bottom: 25px; right: 25px; position: absolute; }
#shopping-cart .delete { bottom: 15px; right: 25px; position: absolute; }
#shopping-cart #shopping-cart-products .total { padding-left: 15px }
#shopping-cart #shopping-cart-products .product-attributes { margin: 0; }
#shopping-cart #shopping-cart-products .total { margin-top: -40px; text-align: right }
@ -3526,43 +3748,56 @@ main#categorycms { margin-bottom: 30px }
.table-div .table-row strong { color: #e4535d; display: block; font-family: 'pt_sansbold'; font-weight: normal; margin: 10px 0 0 0 }
#shopping-cart #shopping-cart-products .total > strong { font-size: 16px; }
#shopping-cart #shopping-cart-products .total strong { display: inline; }
#shopping-cart #calcul .discount_form .form-group { margin-top: 30px; width: 100%; }
#shopping-cart #calcul .line > div:last-child{ padding-right: 0;}
#shopping-cart #calcul .discount_form .form-group { margin-top: 0px; margin-bottom: 0; width: 100%; }
#shopping-cart #calcul .line > div:last-child{ padding-right: 15px; }
#shopping-cart #calcul .line > div:first-child { padding-left: 15px; }
#order #reassurance_home_store { height: auto; }
}
@media (max-width: 767px) {
#shopping-cart #shopping-cart-products .table-head > div { font-size: 18px; }
#shopping-cart #shopping-cart-products .table-row.valign-middle > div.form-group.qty { padding-left: 5%; }
#order_step { margin-top: 20px;}
#shopping-cart .footer .cart_navigation .btn-cancel { width: 100%;}
#shopping-cart .footer .cart_navigation > div:first-child .inner { padding: 15px; text-align: center; font-weight: normal; }
#shopping-cart .footer .cart_navigation > div:first-child .inner p { margin-bottom: 15px; font-family: 'pt_sans'; }
#shopping-cart .footer .cart_navigation > div:nth-child(2) .inner { padding: 0px 15px 20px 15px; }
#shopping-cart .footer .cart_navigation .inner { padding: 15px 15px 0px 15px; }
#shopping-cart #shopping-cart-products .table-head > div { font-size: 16px; }
#shopping-cart #shopping-cart-products .table-row .image { padding: 0; }
#shopping-cart #shopping-cart-products .product-name { padding-right: 15px }
#shopping-cart #shopping-cart-products .table-row.valign-middle > .qty { margin-left: 0; width: 100%; }
#shopping-cart .delete { bottom: auto; left: auto; right: 15px; top: 0px }
#shopping-cart .delete { bottom: 15px; left: auto; right: 15px; top: auto; }
#shopping-cart .delete a i { font-size: 20px; }
#shopping-cart #calcul #total_price { font-size: 24px }
#shopping-cart #calcul .line > div:last-child { padding-right: 0; }
#shopping-cart #calcul .line > div.label-total-price { padding: 7px 0 0 }
#shopping-cart #calcul .border { margin: 0 }
#shopping-cart #shopping-cart-products .taxes li { line-height: 16px; }
#shopping-cart #shopping-cart-products .price { padding-right: 0; }
#shopping-cart #shopping-cart-products .table-row.valign-middle > div.form-group.qty { width: 40%; }
#shopping-cart #shopping-cart-products .table-row.valign-middle > div.form-group.qty { width: 35%; padding-right: 0; }
#shopping-cart #shopping-cart-products .qty .cart_quantity_button { display: inline-block; }
#shopping-cart #shopping-cart-products .table-row.valign-middle > div.total { margin: 25px 0 0 0; width: 60%;}
#shopping-cart #shopping-cart-products .table-row.valign-middle > div.total { margin: 0px 0 0 0; width: 60%; text-align: left; padding-left: 0; }
#shopping-cart #shopping-cart-products .table-row.valign-middle > div.form-group.qty strong { float: none; margin: 0;}
#shopping-cart #calcul #total_price { font-family: 'pt_sans' }
#shopping-cart #calcul #total_price { font-size: 36px; }
#shopping-cart #calcul .line #total_tax { font-size: 22px; }
}
@media (max-width: 500px) {
#shopping-cart .reminderFreeShipping > span { max-width: 80%;}
#shopping-cart .reminderFreeShipping > span, #shopping-cart .reminderFreeShipping .icon-gift { display: block; float: left; }
#shopping-cart .reminderFreeShipping .icon-gift { width: 20%; }
#shopping-cart #shopping-cart-products .table-row.valign-middle > div.total { padding-left: 15px; }
#shopping-cart #shopping-cart-products .table-row.valign-middle > div.form-group.qty { padding-top: 35px;}
#shopping-cart #shopping-cart-products .total { margin-top: 0; text-align: left }
#shopping-cart #calcul .line > div:first-child { padding: 0; }
#shopping-cart #calcul .line > div:first-child, #shopping-cart #calcul .line > div:last-child { display: inline; font-size: 14px; }
#shopping-cart #calcul .line #total_tax { font-size: 14px }
#shopping-cart #calcul .line > div:first-child { font-family: 'pt_sans' }
#shopping-cart #calcul .line > div:first-child, #shopping-cart #calcul .line > div:last-child { display: inline; line-height: 19px; font-size: 18px; }
#shopping-cart #calcul .line > div:first-child { font-size: 14px; }
#shopping-cart #calcul .line #total_tax { font-size: 22px }
#shopping-cart #shopping-cart-products .taxes li { border: 0; float: none; padding-left: 0; }
#shopping-cart #calcul .discount_form .form-group { margin: 20px 0 30px 0; }
#shopping-cart #calcul .discount_form .form-group { margin: 0; margin-bottom: 5px; }
.cart_navigation .btn-next, .cart_navigation .btn-cancel { margin-bottom: 20px; width: 100%; }
.cart_navigation .btn-cart { margin-bottom: 15px; width: 100% }
#shopping-cart #calcul .line > div.label-total-price { padding-top: 0; padding-bottom: 7px; }
#shopping-cart .footer .cart_navigation .btn-cart { margin-bottom: 0; }
}
#order #message { background: #f9f9f9; border: 1px solid #dfdfdf }
@ -4566,15 +4801,18 @@ body .addresses {
.container.odrs .submit,
#footer > .container,
#footer #reinsurance > div,
cta-product .share
.cta-product .share, #header .account_box,
#product .links
{
display: none;
}
#product main .title1 { border:0; padding-top: 60px;}
header.page-heading h1.justif,
.account .table-div .table-row > div:last-child {
display: block;
}
#header { border-top: 100px solid #0e0e0e; height: 0; }
#header #header_logo { margin: -90px 0 50px 0; float: none;}
header.page-heading { border-top: 80px solid #b4293c; height: 0; padding: 0 }
@ -4588,6 +4826,10 @@ body .addresses {
a:link, a:visited {background: transparent; color:#333; text-decoration:none;}
a:link[href^="http://"]:after, a[href^="http://"]:visited:after {content: " (" attr(href) ") "; font-size: 11px; visibility: hidden;}
a[href^="http://"] {color:#000;}
header #header_logo { text-align: center;}
#product #header { width: 100%; background-color: #000; height: 120px;}
#product .block-left .inner { width: 400px; margin: auto; margin-top: 30px; }
#product main .title1 .social_share { display: none; }
}

View File

@ -290,7 +290,9 @@ span.title {
.icon-menu:before {
content: "\e903";
}
.icon-gift:before {
content: "\e906";
}
/* BOUTONS */

View File

@ -0,0 +1,35 @@
<?php
/*
* 2007-2015 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2015 PrestaShop SA
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@ -0,0 +1,16 @@
{if $pictos}
<div class="pictos">
<div class="row">
{foreach from=$pictos item=picto name=picto}
<div class="picto col-xs-6 col-xxs-12 valign-middle">
{if $picto.hasImg}
<div class="img">
<img src="{$base_dir}img/picto/{$picto.id_advpicto}.jpg" alt="{$picto.title}" />
</div>
{/if}
<div>{$picto.title}</div>
</div>
{/foreach}
</div>
</div>
{/if}

View File

@ -0,0 +1,35 @@
<?php
/*
* 2007-2015 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2015 PrestaShop SA
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@ -1,5 +1,13 @@
<main>
{include file="$tpl_dir./errors.tpl"}
{if $product->weight < 0.5}
{assign var='calculShipping' value='3'}
{else}
{assign var='calculShipping' value='6'}
{/if}
{if $errors|@count == 0}
{if !isset($allow_oosp)}
{assign var=allow_oosp value=0}
@ -25,7 +33,45 @@
</div>
{/if}
<div class="container">
<div class="title1 clearfix">
<h1 itemprop="name">{$product->name|escape:'html':'UTF-8'}</h1>
<div class="social_share">
<div class="facebook">
<div id="fb-root"></div>
<script async>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/fr_FR/sdk.js#xfbml=1&version=v2.4";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
<div class="fb-like" data-layout="button_count" data-colorscheme="light"></div>
</div>
<div class="twitter">
<script>window.twttr = (function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0],
t = window.twttr || {};
if (d.getElementById(id)) return t;
js = d.createElement(s);
js.id = id;
js.src = "https://platform.twitter.com/widgets.js";
fjs.parentNode.insertBefore(js, fjs);
t._e = [];
t.ready = function(f) {
t._e.push(f);
};
return t;
}(document, "script", "twitter-wjs"));</script>
<a id="twitter-wjs" class="twitter-share-button">Tweet</a>
</div>
</div>
</div>
</div>
</header>
{if isset($confirmation) && $confirmation}
@ -116,21 +162,20 @@
<a href="#description" class="readmore">{l s='Lire la suite'}</a>
{/if}
</div>
<div class="links">
<span class="print">
<a href="javascript:print();">{l s='Imprimer'}</a>
</span>
<span class="send_to_a_friend">
{hook h='productSend'}
</span>
</div>
{/if}
{/if}
{hook h='displayPictogrammesProduct' id_product=$product->id}
<div class="netReViewsWrap">
{$HOOK_EXTRA_RIGHT}
</div>
{/if}
{/if}
</div>
<div class="col-md-5">
<div class="col-md-5 block-left">
<div class="inner">
{if $product_manufacturer->active}
<div class="logo_manufacturer">
<a href="{$link->getManufacturerLink($product_manufacturer)}">
@ -157,7 +202,8 @@
{if $product->show_price && !isset($restricted_country_mode) && !$PS_CATALOG_MODE}
<!-- prices -->
<div>
<p class="our_price_display" itemprop="offers" itemscope itemtype="http://schema.org/Offer">{strip}
<p class="our_price_display" itemprop="offers" itemscope itemtype="http://schema.org/Offer">
{strip}
{if $product->quantity > 0}<link itemprop="availability" href="http://schema.org/InStock"/>{/if}
{if $priceDisplay >= 0 && $priceDisplay <= 2}
<span id="our_price_display" class="price" itemprop="price" content="{$productPrice|number_format:2}">{convertPrice price=$productPrice|floatval}</span>
@ -227,14 +273,15 @@
<!-- quantity wanted -->
{if !$PS_CATALOG_MODE}
<p id="quantity_wanted_p"{if (!$allow_oosp && $product->quantity <= 0) || !$product->available_for_order || $PS_CATALOG_MODE} style="display: none;"{/if}>
<label for="quantity_wanted">{l s='Quantity'}</label>
<input type="text" name="qty" id="quantity_wanted" class="text" value="{if isset($quantityBackup)}{$quantityBackup|intval}{else}{if $product->minimal_quantity > 1}{$product->minimal_quantity}{else}1{/if}{/if}" />
<a href="#" data-field-qty="qty" class="btn btn-default button-minus product_quantity_down">
<span>-</span>
</a>
<a href="#" data-field-qty="qty" class="btn btn-default button-plus product_quantity_up">
<span>+</span>
</a>
<a href="#" data-field-qty="qty" class="btn btn-default button-minus product_quantity_down">
<span>-</span>
</a>
<span class="clearfix"></span>
</p>
{/if}
@ -302,7 +349,7 @@
</button>
</p>
</div>
<div class="avail">
<p class="availlability" id="availability_statut"{if !$PS_STOCK_MANAGEMENT || ($product->quantity <= 0 && !$product->available_later && $allow_oosp) || ($product->quantity > 0 && !$product->available_now) || !$product->available_for_order || $PS_CATALOG_MODE} style="display: none;"{/if}>
{*<span id="availability_label">{l s='Availability:'}</span>*}
<span id="availability_value">{if $product->quantity <= 0}
@ -312,11 +359,12 @@
{l s='This product is no longer in stock'}
{/if}
{elseif $PS_STOCK_MANAGEMENT}
{l s='En stock'}
<i class="icon-logistics3"></i><span class="name">{l s='En stock : '}</span><span>{l s='Expédition sous 48h'}</span>
{/if}
</span>
</p>
<p class="availlability">
{if $product->quantity <= 0}
{if $PS_STOCK_MANAGEMENT && $allow_oosp}
{$product->available_later}
@ -325,82 +373,46 @@
{/if}
{/if}
</p>
</div>
</div> <!-- end box-cart-bottom -->
<div class="shipmentCost">
<i class="icon-wallet2"></i><span class="name">{l s='Frais de port : '}</span><span>{l s='seulement '} {$calculShipping}&nbsp;€</span>
</div>
</div> <!-- end box-info-product -->
</form>
<div class="payment_logo">
<img src="{$img_dir}paiement.png" alt="">
</div>
</div> <!-- end box-cart-bottom -->
</div> <!-- end box-info-product -->
</form>
{/if}
<div class="social_share">
<div class="facebook">
<div id="fb-root"></div>
<script async>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/fr_FR/sdk.js#xfbml=1&version=v2.4";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
<div class="fb-like" data-layout="button_count" data-colorscheme="light"></div>
</div>
<div class="twitter">
<script>window.twttr = (function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0],
t = window.twttr || {};
if (d.getElementById(id)) return t;
js = d.createElement(s);
js.id = id;
js.src = "https://platform.twitter.com/widgets.js";
fjs.parentNode.insertBefore(js, fjs);
t._e = [];
t.ready = function(f) {
t._e.push(f);
};
return t;
}(document, "script", "twitter-wjs"));</script>
<a id="twitter-wjs" class="twitter-share-button">Tweet</a>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="links">
<span class="print">
<a href="javascript:print();">{l s='Imprimer'}</a>
</span>
<span class="send_to_a_friend">
{hook h='productSend'}
</span>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="container">
<div id="reassurance_home_product">
<div class="row">
<div class="col-sm-3 col-xs-6 bloc bloc1">
<span class="icon icon-wallet2"></span>
<span class="blue">{l s='Frais de port gratuit'}</span>
{l s='à partir de 60€'}
</div>
<div class="col-sm-3 col-xs-6 bloc bloc2">
<span class="icon icon-logistics3"></span>
<span class="blue">{l s='Livraison express'}</span>
{l s='en 24h via Chronopost'}
</div>
<div class="col-sm-3 col-xs-6 bloc bloc3">
<span class="icon icon-lock39"></span>
<span class="blue">{l s='Paiement sécurisé'}</span>
{l s='via CB et Paypal'}
</div>
<div class="col-sm-3 col-xs-6 bloc bloc4">
<span class="icon icon-coins30"></span>
<span class="blue">{l s='Satisfait ou remboursé'}</span>
{l s='via CB et Paypal'}
</div>
</div>
<div id="reassurance" >
{hook h="displayReassurance"}
</div>
</div>
<!-- Infos -->
{if !$content_only}
<section class="container">

View File

@ -4,8 +4,8 @@
<img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'home_default')|escape:'html':'UTF-8'}" alt="{$product.name|escape:'html':'UTF-8'}" />
</a>
</div>
<div class="col-md-3 product-infos">
<strong>{l s='Product'} : </strong>
<div class="col-md-4 product-infos">
{*<strong>{l s='Product'} : </strong>*}
<a class="product-name" href="{$link->getProductLink($product.id_product, $product.link_rewrite, $product.category, null, null, $product.id_shop, $product.id_product_attribute)|escape:'html':'UTF-8'}">
{$product.name|escape:'html':'UTF-8'}
</a>
@ -24,8 +24,8 @@
<!-- {/if} -->
</div>
<div id="product_price_{$product.id_product}_{$product.id_product_attribute}{if $quantityDisplayed > 0}_nocustom{/if}_{$product.id_address_delivery|intval}{if !empty($product.gift)}_gift{/if}" class="col-md-2">
<strong>{l s='Unit price'} : </strong>
<div id="product_price_{$product.id_product}_{$product.id_product_attribute}{if $quantityDisplayed > 0}_nocustom{/if}_{$product.id_address_delivery|intval}{if !empty($product.gift)}_gift{/if}" class="col-md-2 hidden-sm hidden-xs hidden-xxs">
{*<strong>{l s='Unit price'} : </strong>*}
{if !$priceDisplay}
<span class="price">{convertPrice price=$product.price_wt}</span>
{else}
@ -45,7 +45,7 @@
{/if}
</div>
<div class="col-md-2 form-group qty">
<strong>{l s='Quantity'} : </strong>
{*<strong>{l s='Quantity'} : </strong>*}
{if isset($cannotModify) AND $cannotModify == 1}
<span>
{if $quantityDisplayed == 0 AND isset($customizedDatas.$productId.$productAttributeId)}
@ -83,7 +83,7 @@
</div>
<div id="total_product_price_{$product.id_product}_{$product.id_product_attribute}{if $quantityDisplayed > 0}_nocustom{/if}_{$product.id_address_delivery|intval}{if !empty($product.gift)}_gift{/if}" class="col-md-2 total">
<strong>{l s='Price'} : </strong>
{*<strong>{l s='Price'} : </strong>*}
{if !empty($product.gift)}
<span class="gift-icon">{l s='Gift!'}</span>
{else}
@ -109,7 +109,7 @@
<span>{$product.name|strip}</span>
</div>
<div id="total_product_price_{$product.id_product}_{$product.id_product_attribute}{if $quantityDisplayed > 0}_nocustom{/if}_{$product.id_address_delivery|intval}{if !empty($product.gift)}_gift{/if}" class="col-md-2 total">
<strong>{l s='Price'} : </strong>
{*<strong>{l s='Price'} : </strong>*}
{if $quantityDisplayed == 0 AND isset($customizedDatas.$productId.$productAttributeId)}
{if !$priceDisplay}{displayPrice price=$product.total_customization_wt}{else}{displayPrice price=$product.total_customization}{/if}
{else}

View File

@ -10,12 +10,25 @@
</div>
{include file="$tpl_dir./order-steps.tpl" current_step="summary"}
</div>
</div>
{include file="$tpl_dir./errors.tpl"}
<div id="shopping-cart" class="container">
<div class="header">
<p class="cart_navigation">
<a href="{$link->getPageLink('homestore')}" class="continue btn btn-cancel" title="{l s='Continue shopping'}">
{l s='Continue shopping'}
</a>
{if !$opc}
<a href="{if $back}{$link->getPageLink('order', true, NULL, 'step=1&amp;back={$back}')|escape:'html':'UTF-8'}{else}{$link->getPageLink('order', true, NULL, 'step=1')|escape:'html':'UTF-8'}{/if}" class="btn btn-cart standard-checkout button-medium" title="{l s='Proceed to checkout'}">
<i class="icon icon-shopping-cart"></i><span>{l s='Proceed to checkout'}</span>
</a>
{/if}
</p>
</div>
<!-- Panier vide -->
{if isset($empty)}
<p class="alert alert-warning">{l s='Your shopping cart is empty.'}</p>
@ -33,11 +46,11 @@
<div id="shopping-cart-products" class="table-div cart">
<div class="table-head clearfix">
<div class="col-md-5 hidden-sm hidden-xs">{l s='Product'}</div>
<div class="col-md-6 hidden-sm hidden-xs">{l s='Product'}</div>
<div class="col-md-2 hidden-sm hidden-xs">{l s='Unit price'}</div>
<div class="col-md-2 hidden-sm hidden-xs">{l s='Qty'}</div>
<div class="col-md-2 hidden-sm hidden-xs text-right">{l s='Total'}</div>
<div class="col-sm-12 col-xs-12 hidden-lg hidden-md">{l s='Orders details'}</div>
<div class="col-sm-12 col-xs-12 hidden-lg hidden-md">{l s='Produits'}</div>
</div>
<p style="display:none" id="emptyCartWarning" class="alert alert-warning">{l s='Your shopping cart is empty.'}</p>
@ -86,52 +99,14 @@
</div>
<div id="calcul" class="table-row row">
{if $use_taxes}
{if $voucherAllowed}
{if !sizeof($discounts)}
<div class="col-md-4 discount_form">
<div class="border ">
{if isset($errors_discount) && $errors_discount}
<div class="col-lg-12">
<ul class="alert alert-danger">
{foreach $errors_discount as $k=>$error}
<li>{$error|escape:'html':'UTF-8'}</li>
{/foreach}
</ul>
</div>
{/if}
<form action="{$link->getPageLink('order', true)}" method="post" id="voucher" class="form-inline">
<div class="form-group">
<label>{l s='You have a voucher ?'}</label>
<div class="inner">
<input type="text" class="discount_name form-control" id="discount_name" name="discount_name" value="{if isset($discount_name) && $discount_name}{$discount_name}{/if}" placeholder="{l s='Enter your code'}" />
<input type="hidden" name="submitDiscount" />
<button type="submit" name="submitAddDiscount" class="btn">{l s='OK'}</button>
</div>
</div>
</form>
{if $displayVouchers}
<div class="col-lg-12 col-md-12 discount_form">
<p id="title" class="col-lg-12 col-md-12 title-offers"><u>{l s='Take advantage of our exclusive offers:'}</u></p>
<div id="display_cart_vouchers" class="col-lg-12 col-md-12 ">
{foreach $displayVouchers as $voucher}
{if $voucher.code != ''}<span class="voucher_name" data-code="{$voucher.code|escape:'html':'UTF-8'}">{$voucher.code|escape:'html':'UTF-8'}</span> - {/if}{$voucher.name}<br />
{/foreach}
</div>
</div>
{/if}
</div>
</div>
{/if}
{/if}
{/if}
<div class="{if sizeof($discounts)}col-md-offset-5{else}col-md-offset-1{/if} col-md-7 prices">
<div class="col-lg-offset-1 col-md-offset-0 col-lg-7 col-md-7 col-md-push-5 col-lg-push-4 prices">
{if sizeof($discounts)}
<strong>{l s='Applied discount'} : </strong>
<div class="table-row row0 code-promo">
<div class="table-row row0 code-promo line">
{foreach $discounts as $discount}
<div class="col-lg-8 col-md-8 pl0">{$discount.name}</div>
<div class="col-lg-2 col-md-2 pr0">
<div class="col-md-6 col-sm-6 col-xs-6 pl0"> {l s='Applied discount'} : {$discount.name}</div>
<div class="col-md-6 col-sm-6 col-xs-6 pr0">
<p style="text-align:right" class="price-discount price">{if !$priceDisplay}{displayPrice price=$discount.value_real*-1}{else}{displayPrice price=$discount.value_tax_exc*-1}{/if}
<a style="color:#ccc" href="{if $opc}{$link->getPageLink('order-opc', true)}{else}{$link->getPageLink('order', true)}{/if}?deleteDiscount={$discount.id_discount}" class="price_discount_delete" title="{l s='Delete'}">
<i class="awesome fa fa-trash-o"></i>
@ -163,13 +138,13 @@
{if $use_taxes && $total_shipping_tax_exc != $total_shipping}
{if $priceDisplay}
<div class="line"{if $total_shipping_tax_exc <= 0} style="display:none;"{/if}>
<div class="col-md-6 col-sm-6 col-xs-6">{if $display_tax_label}{l s='Total shipping (tax excl.)'}{else}{l s='Total shipping'}{/if}</div>
<div class="col-offset-md-1 col-md-5 col-offset-sm-0 col-sm-6 ">{if $display_tax_label}{l s='Total shipping (tax excl.)'}{else}{l s='Total shipping'}{/if}</div>
<div class="col-md-6 col-sm-6 col-xs-6">{displayPrice price=$total_shipping_tax_exc}</div>
</div>
{else}
<div class="line"{if $total_shipping <= 0} style="display:none;"{/if}>
<div class="col-md-6 col-sm-6 col-xs-6">{if $display_tax_label}{l s='Total shipping (tax incl.)'}{else}{l s='Total shipping'}{/if}
<div class="col-offset-md-1 col-md-5 col-offset-sm-0 col-sm-6 ">{if $display_tax_label}{l s='Total shipping (tax incl.)'}{else}{l s='Total shipping'}{/if}
</div>
<div class="col-md-6 col-sm-6 col-xs-6">{displayPrice price=$total_shipping}</div>
@ -178,18 +153,69 @@
{else}
<div{if $total_shipping_tax_exc <= 0} style="display:none;"{/if}>
<div class="col-md-6 col-sm-6 col-xs-6">{l s='Total shipping'}</div>
<div class="col-offset-md-1 col-md-5 col-offset-sm-0 col-sm-6 ">{l s='Total shipping'}</div>
<div class="col-md-6 col-sm-6 col-xs-6">{displayPrice price=$total_shipping_tax_exc}</div>
</div>
{/if}
{/if}
{if $total_products_wt < 50}
<span class="reminderFreeShipping">{l s='Plus que '} {displayPrice price=(50 - $total_products_wt)}{l s='pour bénéficier de la livraison gratuite'} !</span>
<span class="reminderFreeShipping clearfix">
<i class="icon-gift"></i>
<span>
{l s='Plus que '}<span class="price"> {displayPrice price=(50 - $total_products_wt)}&nbsp;</span>{l s='pour bénéficier de la livraison gratuite'} !</span>
</span>
{/if}
<div class="line shipping-politic">
<div class="line last-line">
<div class="label-total-price col-md-6 col-sm-6 col-xs-6">{if $display_tax_label}{l s='Total products (tax incl.)'}{else}{l s='Total products'}{/if}</div>
<div id="total_price" class="col-md-6 col-sm-6 col-xs-6">{displayPrice price=$total_price}</div>
</div>
</div>
<div class="col-lg-4 col-md-5 col-lg-pull-8 col-md-pull-7 blocPromo">
{if $use_taxes}
{if $voucherAllowed}
{if !sizeof($discounts)}
<div class="discount_form">
<div class="border ">
{if isset($errors_discount) && $errors_discount}
<div class="col-lg-12">
<ul class="alert alert-danger">
{foreach $errors_discount as $k=>$error}
<li>{$error|escape:'html':'UTF-8'}</li>
{/foreach}
</ul>
</div>
{/if}
<form action="{$link->getPageLink('order', true)}" method="post" id="voucher" class="form-inline">
<div class="form-group">
<label>{l s='You have a voucher ?'}</label>
<div class="inner">
<input type="text" class="discount_name form-control" id="discount_name" name="discount_name" value="{if isset($discount_name) && $discount_name}{$discount_name}{/if}" placeholder="{l s='Enter your code'}" />
<input type="hidden" name="submitDiscount" />
<button type="submit" name="submitAddDiscount" class="btn">{l s='Valider'}</button>
</div>
</div>
</form>
{if $displayVouchers}
<div class="col-lg-12 col-md-12 discount_display">
<p id="title" class="col-lg-12 col-md-12 title-offers"><u>{l s='Take advantage of our exclusive offers:'}</u></p>
<div id="display_cart_vouchers" class="col-lg-12 col-md-12 ">
{foreach $displayVouchers as $voucher}
{if $voucher.code != ''}<span class="voucher_name" data-code="{$voucher.code|escape:'html':'UTF-8'}">{$voucher.code|escape:'html':'UTF-8'}</span> - {/if}{$voucher.name}<br />
{/foreach}
</div>
</div>
{/if}
</div>
</div>
{/if}
{/if}
{/if}
<div class="shipping-politic">
<div>
<span class="bold">{l s='Notre politique transport :'}</span>
<span class="titre">{l s='Notre politique transport :'}</span>
<p>
{l s='Frais de port : 6 € en Colissimo'}<br />
{l s='Pour les petits colis de moins de 500 grammes ne payez que 3 € de frais de port'}<br />
@ -199,11 +225,6 @@
</p>
</div>
</div>
<div class="line">
<div class="label-total-price col-md-6 col-sm-6 col-xs-6">{if $display_tax_label}{l s='Total products (tax incl.)'}{else}{l s='Total products'}{/if}</div>
<div id="total_price" class="col-md-6 col-sm-6 col-xs-6">{displayPrice price=$total_price}</div>
</div>
</div>
</div>
@ -215,16 +236,32 @@
{/if}
<div class="clearfix"></div>
<p class="cart_navigation">
<div class="footer row">
<div class="cart_navigation">
{if !$opc}
<a href="{if $back}{$link->getPageLink('order', true, NULL, 'step=1&amp;back={$back}')|escape:'html':'UTF-8'}{else}{$link->getPageLink('order', true, NULL, 'step=1')|escape:'html':'UTF-8'}{/if}" class="btn btn-cart standard-checkout button-medium" title="{l s='Proceed to checkout'}">
<i class="icon icon-shopping-cart"></i><span>{l s='Proceed to checkout'}</span>
</a>
{/if}
<div class="col-md-8">
<div class="inner">
<div class="row">
<div class="col-sm-7"><p>{l s='Nhésitez pas à retourner sur notre boutique et à compléter votre panier au besoin. '}</p></div>
<div class="col-sm-5">
<a href="{$link->getPageLink('homestore')}" class="continue btn btn-cancel" title="{l s='Continue shopping'}">
{l s='Continue shopping'}
</a>
</p>
</div>
</div>
</div>
</div>
{/if}
<div class="col-md-4">
<div class="inner clearfix">
<a href="{if $back}{$link->getPageLink('order', true, NULL, 'step=1&amp;back={$back}')|escape:'html':'UTF-8'}{else}{$link->getPageLink('order', true, NULL, 'step=1')|escape:'html':'UTF-8'}{/if}" class="btn btn-cart standard-checkout button-medium" title="{l s='Proceed to checkout'}">
<i class="icon icon-shopping-cart"></i><span>{l s='Proceed to checkout'}</span>
</a>
</div>
</div>
</div>
</div>
{strip}
{addJsDef currencySign=$currencySign|html_entity_decode:2:"UTF-8"}