Ajout Date de fin d'une promotion dans la fiche Produit

Programmation, discussions et suggestions pour l'amélioration de OpenCart

Ajout Date de fin d'une promotion dans la fiche Produit

Messagepar Jielde » 25 Fév 2012, 21:33

Bonjour,

Je cherche a ajouter la Date de fin d'une promotion dans la fiche produit de l'article.

J'ai trouvé dans la base de donnée la ligne date_end dans la catégorie product_special mais je n'arrive pas à la récupéré.
Je pense que tous se passe dans catalog/model/catalog/product.php.

pouvez-vous m'aider ?

Merci.
Hébergeur : Easyphp en local ou OVH
Opencart : v1.5.1.1 en Français
Thème : Défaut modifié
Jielde
 
Messages: 19
Inscrit le: 31 Oct 2011, 19:00

Re: Ajout Date de fin d'une promotion dans la fiche Produit

Messagepar Imaxine » 26 Fév 2012, 00:44

Tu comptes mettre la date d'expiration de la promotion ou le temps encore disponible pour celle-ci ?

Car dans le second cas (comme dans le premier, je pense), il existe des modules qui le font très bien, voir ici.
Imaxine
 
Messages: 3023
Inscrit le: 27 Juil 2009, 19:28

Re: Ajout Date de fin d'une promotion dans la fiche Produit

Messagepar Jielde » 26 Fév 2012, 01:29

Pas mal, j'ai trouvé mon bonheur pour le deuxième cas (dont je n'avais pas pensé ;) )

Par contre je souhaiterais afficher la date d'expiration (date de fin de la promo) à coté du prix et là j'ai pas trouvé...

merci Imaxine
Hébergeur : Easyphp en local ou OVH
Opencart : v1.5.1.1 en Français
Thème : Défaut modifié
Jielde
 
Messages: 19
Inscrit le: 31 Oct 2011, 19:00


Re: Ajout Date de fin d'une promotion dans la fiche Produit

Messagepar Jielde » 26 Fév 2012, 13:35

Merci,

J'essaye toujours de mon coté, si je trouve je le post ici.
Hébergeur : Easyphp en local ou OVH
Opencart : v1.5.1.1 en Français
Thème : Défaut modifié
Jielde
 
Messages: 19
Inscrit le: 31 Oct 2011, 19:00

Re: Ajout Date de fin d'une promotion dans la fiche Produit

Messagepar Imaxine » 26 Fév 2012, 17:21

Ce sujet pourra peut être t'aider hormis que les modifications effectuées pour un semblant de résultat sont destinées aux versions 1.4.9.

Mais il y a peu de différence (Dans ce cas, pour ces modifications) entre la v1.4.9 et la v1.5.+
Imaxine
 
Messages: 3023
Inscrit le: 27 Juil 2009, 19:28

Re: Ajout Date de fin d'une promotion dans la fiche Produit

Messagepar eric02 » 27 Fév 2012, 17:32

Bonjour je suis loin d'etre un cador en php, je suis aussi interessé par cette modification et comme il ne s'agit que d'afficher, je pense que le fichier ou tu dois apporter la modification souhaité n'est pas celui que tu indiques, mais plutot :

catalog/view/theme/defaukt/template/product/special.tpl

dans ce fichier (qui va chercher les infos dans la table "product_special") il y a les lignes 46-50
Code: Tout sélectionner
<?php if (!$product['special']) { ?>
        <?php echo $product['price']; ?>
        <?php } else { ?>
        <span class="price-old"><?php echo $product['price']; ?></span> <span class="price-new"><?php echo $product['special']; ?></span>
        <?php } ?>


qui font le test de savoir si le produit est en promo et si c'est le cas il y a affichage du prix normal barré et du prix promo.

La logique me semble de dupliquer ces lignes, de les modifier en choisissant alors l'affichage de la date de fin de la promo.

Ceci dit sous le couvert et l'absolution du Doc Imaxine, qu'il lui plaise de confirmer ou d'infirmer ma reflexion ???

je fais des essais dans ce sens et je posterai pour narrer le resultat.

Cordialement ;)
Opencart 1.5.5.1
- Production nouveau site en local : EasyPhp 5.3.8.1
- Multi-boutiques (3) en local
Mod : quelques modifications maison, VQmod -
Autres
Templates : maison
http://www.editionsduharicot.fr/
eric02
 
Messages: 181
Inscrit le: 20 Fév 2012, 13:39

Re: Ajout Date de fin d'une promotion dans la fiche Produit

Messagepar eric02 » 27 Fév 2012, 17:49

Autant pour moi

correction, c'est plutot dans le fichier :

catalog/view/theme/defaukt/template/product/product.tpl, à partir de la ligne 32

je teste
Opencart 1.5.5.1
- Production nouveau site en local : EasyPhp 5.3.8.1
- Multi-boutiques (3) en local
Mod : quelques modifications maison, VQmod -
Autres
Templates : maison
http://www.editionsduharicot.fr/
eric02
 
Messages: 181
Inscrit le: 20 Fév 2012, 13:39

Re: Ajout Date de fin d'une promotion dans la fiche Produit

Messagepar eric02 » 27 Fév 2012, 19:31

Bon bon ...

Je reviens une fois encore sur ce que j'ai dit plus haut
Il doit falloir intervenir sur le fichier product.php pour :

- recupérer la valeur du champ "date_end" dans la ligne 14
- definir la variable "date_end"en ajoutant dans le tableau à partir de la ligne 16 :

Code: Tout sélectionner
'date_end'         => $query->row['date_end'],


la table "product_special" etant une table liée, cela va au dela de mes tres tres modestes competences, je tenterais bien quelque chose comme ceci en remplacant la ligne 14 du fichier catalog/model/catalog/product.php :

Code: Tout sélectionner
      $query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM " . DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int)$customer_group_id . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT date_end FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS date_end, (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$customer_group_id . "') AS reward, (SELECT ss.name FROM " . DB_PREFIX . "stock_status ss WHERE ss.stock_status_id = p.stock_status_id AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "') AS stock_status, (SELECT wcd.unit FROM " . DB_PREFIX . "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS weight_class, (SELECT lcd.unit FROM " . DB_PREFIX . "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS length_class, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) WHERE p.product_id = '" . (int)$product_id . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'");



Est ce bon ? totalement à coté de la plaque ???
eric
Opencart 1.5.5.1
- Production nouveau site en local : EasyPhp 5.3.8.1
- Multi-boutiques (3) en local
Mod : quelques modifications maison, VQmod -
Autres
Templates : maison
http://www.editionsduharicot.fr/
eric02
 
Messages: 181
Inscrit le: 20 Fév 2012, 13:39


Re: Ajout Date de fin d'une promotion dans la fiche Produit

Messagepar eric02 » 27 Fév 2012, 23:59

toutes mes plates excuses .. je n'avais pas vu ... j'y file

Merci Imaxine
Opencart 1.5.5.1
- Production nouveau site en local : EasyPhp 5.3.8.1
- Multi-boutiques (3) en local
Mod : quelques modifications maison, VQmod -
Autres
Templates : maison
http://www.editionsduharicot.fr/
eric02
 
Messages: 181
Inscrit le: 20 Fév 2012, 13:39

Re: Ajout Date de fin d'une promotion dans la fiche Produit

Messagepar eric02 » 23 Mars 2012, 20:22

Bonjour,

j'ai trouvé une façon différente pour obtenir ce resultat

voila le lien de la page
http://stackoverflow.com/questions/7759607/trying-to-add-jquery-countdown-timer-for-special-price-in-opencart

à l'exception du dernier code à inserer à la place (dans catalog/view/theme/default/template/product/product.tpl) de
Code: Tout sélectionner
<?php if (!$special) { ?>
    <?php echo $price; ?>
    <?php } else { ?>
    <span class="price-old"><?php echo $price; ?></span> <span class="price-new"><?php echo $special; ?></span>
      <?php if ($special_date_end): ?>
      <!-- TIMER CODE HERE -->
      <div class="timer"></div>
      <?php endif; ?>
    <?php } ?>


Qui afficherait un compte à rebours

je place
Code: Tout sélectionner
<?php if (!$special) { ?>
   <?php echo $price; ?>
   <?php } else { ?>
   <span class="price-old"><?php echo $price; ?></span> <span class="price-new"><?php echo $special; ?></span>
   <span class="text-end"><?php echo $text_special_end; ?></span> <span class="date-end"><?php echo $special_date_end; ?></span>
   <?php } ?>


Là ne me reste plus qu'à mettre en forme comme je le souhaite cet affichage :
- Le format de la date "à la française"
- construire la class qui va afficher ces infos avec un ptit badge web 2.0 "Offre Spéciale", le tout dans le coin haut et droit de la fiche produit.
Opencart 1.5.5.1
- Production nouveau site en local : EasyPhp 5.3.8.1
- Multi-boutiques (3) en local
Mod : quelques modifications maison, VQmod -
Autres
Templates : maison
http://www.editionsduharicot.fr/
eric02
 
Messages: 181
Inscrit le: 20 Fév 2012, 13:39

Re: Ajout Date de fin d'une promotion dans la fiche Produit

Messagepar Imaxine » 23 Mars 2012, 21:05

Très intéressant, nous attendons avec impatience ta modification ainsi que le résultat escompté.
Imaxine
 
Messages: 3023
Inscrit le: 27 Juil 2009, 19:28

Re: Ajout Date de fin d'une promotion dans la fiche Produit

Messagepar eric02 » 24 Mars 2012, 04:00

et voila le travail ! Bien content
http://www.editionsduharicot.fr/A_la_Une/Zen-1
Cela va me permettre d'enlever la première ligne verte du descriptif, que je plaçais "manuellement".

pour realiser cela, je me suis inspiré de ce que j'ai trouvé et qui est cité un peu plus haut.

Les modifs à faire sont les suivantes :

- Se créer un "badge.png" de 123px / 120px

puis

dans catalog/controller/product/product.php

rechercher :
Code: Tout sélectionner
$this->data['text_price'] = $this->language->get('text_price');

ajouter dessous
Code: Tout sélectionner
$this->data['text_special_end'] = $this->language->get('text_special_end');


rechercher :
Code: Tout sélectionner
if ((float)$product_info['special']) {
            $this->data['special'] = $this->currency->format($this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax')));
         } else {
            $this->data['special'] = false;
         }


remplacer par:
Code: Tout sélectionner
if ((float)$product_info['special']) {
            $this->data['special'] = $this->currency->format($this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax')));
         // +++ NEW CODE
         $special_info = $this->model_catalog_product->getSpecialPriceDates($product_id);
         if ($special_info) {
            $this->data['special_date_end'] = date($this->language->get('date_format_short'), strtotime($special_info['date_end']));
         } else {
            $this->date['special_date_end'] = false;
         }
         // +++ END NEW CODE
         } else {
            $this->data['special'] = false;
         }


dans catalog/language/french/product.product.php
rechercher :
Code: Tout sélectionner
$_['text_price']         = 'Prix : ';

ajouter dessous
Code: Tout sélectionner
$_['text_special_end']      = 'Jusqu&#8217;au : ';


dans catalog/model/catalog/product.php
rechercher :
Code: Tout sélectionner
public function getLatestProducts($limit) {

placer avant :
Code: Tout sélectionner
// Return an array containing special (price, date_start, date_end).
    // or false if no special price exists.
    public function getSpecialPriceDates($product_id) {
        if ($this->customer->isLogged()) {
            $customer_group_id = $this->customer->getCustomerGroupId();
        } else {
            $customer_group_id = $this->config->get('config_customer_group_id');
        }
        $query = $this->db->query("SELECT price, date_start, date_end FROM " . DB_PREFIX . "product_special WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY priority ASC, price ASC LIMIT 1");

        if ($query->num_rows) {
            return array(
                'special'    => $query->row['price'],
                'date_start' => $query->row['date_start'],
                'date_end'   => $query->row['date_end'],
            );
        } else {
            return false;
        }
    }


dans catalog/view/theme/default/product/product.tpl
rechercher
Code: Tout sélectionner
<div class="right">

ajouter après
Code: Tout sélectionner
<div class="promo">
    <?php if ($price >=0) { ?>
   <?php if (!$special !=' ') { ?>
   <div class="badge"><img src="/image/badge-web.png"></div>
         <div class="date-end"><?php echo $text_special_end; ?><?php echo $special_date_end; ?></strong></div>
   <?php } ?>
   <?php } ?>
   </div>


dans catalog/view/theme/default/stylsheet/stylesheet.css

rechercher
Code: Tout sélectionner
.product-info .description {

ajouter au dessus

Code: Tout sélectionner
.product-info .promo{
float:right;
display: inline-block;
margin-right: 5px;
}
.product-info .badge {
background-image: url('../image/badge-web.png') ;
background-repeat: no-repeat;
background-position:center;
height: 120px;
}
.product-info .date-end {
font-size: 13px;
font-weight: bold;
color: #f00;
}


elle n'est pas belle la vie ? :D
Opencart 1.5.5.1
- Production nouveau site en local : EasyPhp 5.3.8.1
- Multi-boutiques (3) en local
Mod : quelques modifications maison, VQmod -
Autres
Templates : maison
http://www.editionsduharicot.fr/
eric02
 
Messages: 181
Inscrit le: 20 Fév 2012, 13:39

Re: Ajout Date de fin d'une promotion dans la fiche Produit

Messagepar Imaxine » 24 Mars 2012, 04:11

eric02 a écrit:elle n'est pas belle la vie ? :D
Tout à fait, sauf que tu aurais pu la rendre plus belle et plus facile avec un fichier vQmod (jamais satisfait ce Imaxine) !! :D
Imaxine
 
Messages: 3023
Inscrit le: 27 Juil 2009, 19:28

Suivant

Retour vers Développement

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 1 invité

cron
Copyright © 2009-2013 OpenCart France - Tous droits réservés