Page 1 sur 2

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

MessagePublié: 25 Fév 2012, 21:33
par Jielde
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.

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

MessagePublié: 26 Fév 2012, 00:44
par Imaxine
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.

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

MessagePublié: 26 Fév 2012, 01:29
par Jielde
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

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

MessagePublié: 26 Fév 2012, 01:33
par Imaxine
On va regarder cela, alors !!

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

MessagePublié: 26 Fév 2012, 13:35
par Jielde
Merci,

J'essaye toujours de mon coté, si je trouve je le post ici.

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

MessagePublié: 26 Fév 2012, 17:21
par Imaxine
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.+

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

MessagePublié: 27 Fév 2012, 17:32
par eric02
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 ;)

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

MessagePublié: 27 Fév 2012, 17:49
par eric02
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

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

MessagePublié: 27 Fév 2012, 19:31
par eric02
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

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

MessagePublié: 27 Fév 2012, 22:52
par Imaxine
As-tu le sujet que j'ai mis en lien ?

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

MessagePublié: 27 Fév 2012, 23:59
par eric02
toutes mes plates excuses .. je n'avais pas vu ... j'y file

Merci Imaxine

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

MessagePublié: 23 Mars 2012, 20:22
par eric02
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.

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

MessagePublié: 23 Mars 2012, 21:05
par Imaxine
Très intéressant, nous attendons avec impatience ta modification ainsi que le résultat escompté.

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

MessagePublié: 24 Mars 2012, 04:00
par eric02
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

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

MessagePublié: 24 Mars 2012, 04:11
par Imaxine
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