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() . ' ' . $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 } ?>Par contre si je met:
Code : Tout sélectionner
<?php echo $review['demail']; ?>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.