par
POKEMAT » 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() . ' ' . $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:
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.

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 [b]catalog/controler/product/product.php[/b]
----------------
[code][...]
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');
}
[/code]
----------------
dans [b]catalog/model/catalog/review.php[/b]
----------------
[code]<?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()");[/code]
dans [b]catalog/view/theme/default/product/review.tpl[/b] (review.tpl est le module qui contient les avis dans product.tpl)
----------------
Normalement ça devrait être:
[code] <?php if ($review['email']) { ?>
<h1><?php echo $review['demail']; ?></h1>
<?php } else { ?>
<?php } ?>[/code]
Mais ça renvoi rien.
Par contre si je met:
[code]<?php echo $review['demail']; ?>[/code]
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: