Jump to content

Pb intégration Google (Résolu)


Recommended Posts

Bonjour,

Pour un site, je souhaite intégrer une fonction "Feuilleter".

 

J'ai vu que je pouvais faire quelque chose d' a peu prés similaire grâce l'API de Google

 

Le seul souci, c'est que la référence du livre doit être une valeur extraite d'une des caractéristiques produit, par exemple la valeur ISBN dans la fiche technique du produit.

 

J'ai déjà fait pas mal d'essais, mais rien de concluant.... donc si l'un d'entre vous a une idée, je suis preneur !!! ;-)

D'avance, merci :-)

Edited by vince0 (see edit history)
Link to comment
Share on other sites

 

En supposant que l'ISBN est enregistré dans le champ EAN13 de la fiche produit, ajoutez tout simplement

{addJsDef ISBN=$product->ean13}

à /themes/xxx/product.tpl et l'ISBN sera dispo en JS:

GBS_insertPreviewButtonPopup("ISBN:" + ISBN);

Sauf que là c’est enregistré en caractéristique.

  • Like 1
Link to comment
Share on other sites

Oh pardon !..

(Ce serait pourtant plus simple, et plus logique d'utiliser EAN13)

 

Dans /controllers/front/ProductController.php, méthode initContent(), avant l'allocation smarty:

$features = $this->product->getFrontFeatures($this->context->language->id);
$isbn = '';
foreach ($features as $feature) {
    if ($feature['name'] == 'ISBN') { // Adapter au modèle réellement implémenté
        $isbn = $feature['value'];
        break;
    }
}

puis dans l'allocation smarty:

'features' => $features,
'isbn' => $isbn,

Et enfin dans /themes/xxx/product.tpl:

{addJsDef ISBN=$isbn}

(Non testé)

 

  • Like 1
Link to comment
Share on other sites

Merci Erouvier et Mediacom pour vos réponses.  :)

En effet je suis obligé de passer par une caractéristique du produit car, parfois, pour google un livre a 2 isbn (1 pour le livre papier et un pour sa version "numérique").

Je viens d'essayer et cela ne semble pas marcher ou plutôt je ne suis pas certain d'avoir tout fait correctement...  :D

 

En fait j'ai un gros doute sur l'emplacement du code à coller et sur l'adaptation du modèle, faut dire que je suis débutante, mais motivé !!!  ;)

Du coup, pour comprendre un peu plus. Dans la première étape (fichier Productcontroller), on créer une variable que l'on nomme isbn qui ira chercher dans les caractéristiques produit la valeur correspondant au champs Google 

Ensuite, dans la seconde étape (fichier product.tpl), on signale cette variable existe puis on l'affiche dans le code js. C'est bien ça ?

Edited by vince0 (see edit history)
Link to comment
Share on other sites

Dans ProductController.php (par rapport aux numéros de ligne de l'original):

 

1. Ajoutez:

$features = $this->product->getFrontFeatures($this->context->language->id);
$isbn = '';
foreach ($features as $feature) {
    if ($feature['Google'] == 'ISBN') { 
        $isbn = $feature['value'];
        break;
    }
}

avant la ligne 259 (On récupère les caractéristiques et on recherche la valeur de ISBN).

 

2. Remplacez la ligne 267:

'features' => $this->product->getFrontFeatures($this->context->language->id),

par:

'features' => $features,
'isbn' => $isbn,

(On affecte les variables smarty qui seront utilisées dans le template).

 

Dans product.tpl (plus simple que ce que je proposais avant), à l'endroit exact ou vous voulez voir apparaître le bouton:

<script type="text/javascript" src="//books.google.com/books/previewlib.js"></script>
<script type="text/javascript">
    GBS_setLanguage("fr");
    GBS_insertPreviewButtonPopup("ISBN:{$isbn}");
</script>

(On utilise la variable smarty pour compléter l'argument de la fonction JS GB).

 

Et respectez bien les guillemets + majuscules/minuscules, vous aviez pris quelques libertés dans le TPL... Moi ça ne me gêne pas, mais votre serveur et votre navigateur, eux, ne comprennent pas ;-)

Edited by erouvier29 (see edit history)
Link to comment
Share on other sites

Vous n'avez plus besoin du addJsDef, selon ma dernière proposition: vous pouvez former directement l'argument de GBS_insertPreviewButtonPopup en smarty (initialement, je pensais que vous aviez un script JS séparé). Insérez le dernier bloc entre les lignes 245 et 246 de product.tpl.

 

J'ai oublié de répondre à ça:

En fait j'ai un gros doute (...) sur l'adaptation du modèle

Ce n'était de ma part qu'une phrase mécaniquement pompeuse (ou inversement) pour dire que vous deviez remplacer 'ISBN' par le nom exact de votre caractéristique, mais vous l'aviez compris.

 
Et j'en profite:

faut dire que je suis débutante, mais motivé !!!   ;)

Là vous parlez de PrestaShop. Quant à la grammaire, soit vous êtes également débutant, soit vous n'êtes pas très motivée ;-)

Surtout, ne vous vexez pas, vous aurez sans nul doute l'occasion de vous venger.

Link to comment
Share on other sites

Re,

Merci pour cette réponse claire, précise et didactique. :)

J'ai testé votre solution pas à pas et malheureusement l'aperçu Google ne s'affiche pas sur la fiche produit. En mode debug, j'ai 13 fois ce message : Notice: Undefined index: GGB in /home/qdvqmclv/public_html/controllers/front/ProductController.php on line 262. GGB étant la caractéristique produit dans laquelle j'enregistre les isbn servant à afficher l'aperçu Google.

Je vous envoie en mp un lien.

En ce qui concerne les fautes de grammaire, je ne suis pas du tout vexé ... d'autant qu'en relisant mes posts, j'ai aussi découvert quelques fautes d'orthographe et de conjugaison !!! :D

Il faut avoir un peu de recul sur soi, même si cela ne le fait pas du tout, pour un libraire, de ne pas savoir écrire français correctement !!! On va donc dire que ce sont mes doigts qui sont plus rapides que mon cerveau... ;)

Par contre je constate qu'il va vraiment falloir que je me mette sérieusement à apprendre le php et javascript ...  dès que j'aurai fini de réviser mes cours de français !!!

Bonne journée

Edited by vince0 (see edit history)
  • Like 1
Link to comment
Share on other sites

Ligne 262: remplacez

    if ($feature['GGB'] == 'ISBN') { 

par:

    if ($feature['name'] == 'GGB') { 

$feature est un tableau associatif qui représente une des caractéristiques du livre récupérées dans la BDD, et qui contient, entre autres, les propriétés 'name' et 'value'. Ceci est constant pour toute installation PrestaShop non modifiée.

Votre personnalisation consiste à avoir défini une caractéristique nommée "GGB", et c'est la valeur de celle-ci que vous recherchez.

 

Avec le GGB indiqué dans votre fiche produit, ça fonctionne: le bouton "Aperçu Google" est bien affiché dans ma page de test. Et lorsque l'on clique sur ce dernier, une fenêtre apparaît pour feuilleter le livre. Par contre cette fenêtre inclut également un menu "Acheter ce livre" avec entre autres les options Amazon et FNAC, mais bien évidemment pas votre propre boutique.

 

Il y a peut-être moyen d'éviter ce menu via l'API Google Books, vous pouvez peut-être regarder du côté du mode "liseuse embarquée", plutôt que "bouton aperçu", si ce n'est pas trop compliqué à mettre en oeuvre. Sauf si vous estimez que ce n'est pas grave, par rapport à la rareté de votre offre.

 

Bon courage pour la suite.

Cordialement

Edited by erouvier29 (see edit history)
  • Like 1
Link to comment
Share on other sites

Olala !!! Il y a des jours où je me dis que je peux être un sacré boulet !!!  :D

Je savais bien que je n'aurais pas du faire des modifications de code complètement crevé hier soir, mais j’étais trop impatient !

Maintenant, tout est ok grâce à vous.

Vous avez raison... j'aurais préféré que le le lien "Acheter le livre" ne soit pas présent sur l'aperçu, mais déjà que j'ai galéré pour obtenir un simple aperçu alors je vais en rester là pour l'instant. Le reste, ce sera pour plus tard.

D'autant plus que cela n'est pas trop "nuisible" car je vends des livres d'occasion ou épuisés, donc pas en concurrence direct avec les libraires de "neuf". Pour les sites marketplace comme Amazon et Fnac, ils référencent aussi mes offres donc pas de pb....

Bref, je vous remercie mille fois pour votre coup de main !!!

Au plaisir

Vince

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...