Opencart: Lier email d'un client enregistré avec son avis sur une page produit

Eléphanteau du PHP | 20 Messages

19 oct. 2017, 10:55

Bonjour,
je suis sur Opencart 2.1.0.1.

Je souhaite ajouter l'email du client si il est enregistré seulement au commentaire afin de charger un avatar gravatar.

J'ai réussi à le faire (afficher l'email) d'un client enregistré, mais le problème c'est que les autres commentaires qui sont laissés en mode invités renvoient le mail du client enregistré qui aurait laissé un avis.


Voilà ce que j'ai fais:

dans catalog/controler/product/product.php
----------------

Code : Tout sélectionner

[...] if ($this->customer->isLogged()) { $data['customer_name'] = $this->customer->getFirstName() . '&nbsp;' . $this->customer->getLastName(); } else { $data['customer_name'] = ''; $data['customer_email'] = ''; } [...] public function review() { $this->load->language('product/product'); $this->load->model('catalog/review'); $data['text_no_reviews'] = $this->language->get('text_no_reviews'); $data['demail'] = $this->customer->getEmail(); [...] foreach ($results as $result) { $data['reviews'][] = array( 'author' => $result['author'], 'email' => $result['email'], 'text' => nl2br($result['text']), 'rating' => (int)$result['rating'], 'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added'])) ); } [...] public function write() { $this->load->language('product/product'); $json = array(); if ($this->request->server['REQUEST_METHOD'] == 'POST') { if ((utf8_strlen($this->request->post['name']) < 3) || (utf8_strlen($this->request->post['name']) > 25)) { $json['error'] = $this->language->get('error_name'); } if ((utf8_strlen($this->request->post['email']) < 0) || (utf8_strlen($this->request->post['email']) > 125)) { $json['error'] = $this->language->get('error_name'); }
----------------


dans catalog/model/catalog/review.php
----------------

Code : Tout sélectionner

<?php class ModelCatalogReview extends Model { public function addReview($product_id, $data) { $this->event->trigger('pre.review.add', $data); $this->db->query("INSERT INTO " . DB_PREFIX . "review SET author = '" . $this->db->escape($data['name']) . "', email = '" . (int)$this->customer->getEmail() . "', customer_id = '" . (int)$this->customer->getId() . "', product_id = '" . (int)$product_id . "', text = '" . $this->db->escape($data['text']) . "', rating = '" . (int)$data['rating'] . "', date_added = NOW()");

dans catalog/view/theme/default/product/review.tpl (review.tpl est le module qui contient les avis dans product.tpl)
----------------

Normalement ça devrait être:

Code : Tout sélectionner

<?php if ($review['email']) { ?> <h1><?php echo $review['demail']; ?></h1> <?php } else { ?> <?php } ?>
Mais ça renvoi rien.
Par contre si je met:

Code : Tout sélectionner

<?php echo $review['demail']; ?>
Ca renvoi toujours le mail du client enregistré même si sur les suivants qui ne le sont pas.

Normalement, l'email d'un client devrait être associé à son commentaire (pour utiliser l'avatar de gravatar j'ai besoin d'extraire le mail des clients enregistrés).


Si quelqu'un peut m'aider, trouve une solution, je le remercierai 100 000 fois et lui serait éternellement reconnaissant, et je pense que ça aidera nombre de gens qui rencontrent ce problème. :priere: