2017-08-11 1 views
1

Je suis nouveau chez Prestashop (1.6.1.16). Je travaille dans le thème prestashop par défaut (bootstrap par défaut).Prestashop 1.6.1.16 - Mon fichier js est chargé, mais mes fonctions ne sont pas visibles

Ce que je l'ai fait:

Je mets contenu dans /themes/default-bootstrap/product.tpl: juste après top commentaires (ceux à propos de licence et autres):

<script type="text/javascript" src="modules/ask_bid/js/ask.js"> 
    </script> 
    <button onclick="take_asks({$product->id})">See asks</button> 
    <input type="hidden" id="product-id" value="{$product->id}" /> 
    <input type="hidden" id="customer-id" value="{$id_customer}" /> 

    <!-- Modal --> 
    <div id="modal" class="modal fade"> 
     <div class="modal-dialog"> 

      <!-- Modal content--> 
      <div class="modal-content"> 
       <div class="modal-header"> 
        <button type="button" class="close" data- 
        dismiss="modal">&times;</button> 
        <h4 class="modal-title">Modal Header</h4> 
       </div> 
       <div class="modal-body"> 
        <p>Some text in the modal.</p> 
       </div> 
       <div class="modal-footer"> 
        <button type="button" class="btn btn-default" 
        data-dismiss="modal">Close</button> 
       </div> 
      </div> 

     </div> 
    </div> 

{$product->id} vient de

/controllers/front/ProductController.php<br> 

et {$id_customer} vient de

/override/controllers/front/ProductController.php 

J'ai créé /modules/ask_bid/js/ask.js où je mets le contenu suivant:

function isJSON(data) { 
    var ret = true; 
    try { 
     JSON.parse(data); 
    }catch(e) { 
     ret = false; 
    } 
    return ret; 
} 


function take_asks (id_product) { 
    $.ajax({ 
     type: 'POST', 
     url: baseDir + 'modules/ask_bid/ajax.php', 
     data: 'method=take_asks&id_product='+id_product, 
     dataType: 'text', 
     success: function(json) { 
      if(isJSON(json)) { 
       var json = JSON.parse(json); 
       //alert("json: " + json[0].comment); 

      } 
     }, 
     error: function() { 
      alert("error"); 
     } 
    }); 
} 

également modal ne pas agir comme un Mon modal est affiché (non caché) et qui est pas normal. C'est juste après que le bouton soit "en l'air" (j'espère que vous savez ce que je veux dire).

Et j'ai erreur js:

Le /modules/ask_bid/js/ask.js est chargé (je vois cela aussi dans INSPECT-> f12/réseau), mais le take_asks() ne voit pas.

Je reçois l'erreur suivante de la console (quand je presse 'Take demande' bouton):

Uncaught ReferenceError: take_asks is not defined at HTMLButtonElement.onclick (index.php? id_product=6&controller=product&id_lang=1:413)

Ce que j'ai essayé

-I class_index.php supprimé
-I cache supprimé (avec CTRL- f5)
-I essayé d'ajouter js de /override/controllers/front/ProductController.php

mais ne fonctionne pas et je ne aussi obtenir pas d'erreurs:

public function setMedia() 
{ 
    $this->addJS('modules/ask_bid/js/ask.js'); 

    parent::setMedia(); 
} 

... ou ...

function init() { 
    $this->context->controller->addJS('modules/ask_bid/js/ask.js'); 

    parent::init() 
} 

Que pensez-vous que je peux faire?

+0

@il_raffa! Ne serait pas nécessaire d'éditer ma demande. Je l'ai bien adapté. :) –

Répondre

1

Vous devez créer un hookheader dans votre module:

public function hookHeader($params) 
{ 
    $this->context->controller->addJS(($this->_path).'js/ask.js'); 
} 

Vous pouvez ajouter que sur les pages de produit avec:

public function hookHeader($params) 
{ 
    if (!isset($this->context->controller->php_self) || $this->context->controller->php_self != 'product') 
      return; 
    $this->context->controller->addJS(($this->_path).'js/ask.js'); 
} 

et dans votre installation du module crochet-tête avec

$this->registerHook('header')) 

Pour ajouter du contenu à la page du produit sans changer les thèmes tpls (comme mentionné dans les commentaires), vous pouvez u Voir le displayFooterProduct que "Ajouter de nouveaux blocs sous la description du produit.".

public function hookDisplayFooterProduct($params) 
{ 
    return "code you want to insert"; 
} 

Dans ce crochet, vous pouvez accéder aux paramètres suivants: $ params = array ('produit' => produit, 'catégorie' => Catégorie)

Aussi, rappelez-vous de le brancher sur l'installation avec $this->registerHook('displayFooterProduct')) et si le module est déjà installé, réinitialisez-le ou accrochez-le manuellement.

+0

Le point est, je ne sais pas comment mettre mon modal exactement où je veux. C'est pourquoi mon modal n'agit pas comme tel. C'est juste un dossier. Je modifie notamment .tpls du thème. –

+0

Si vous avez une idée de comment ajouter mon modal dans quelle page je veux et exxactly où je veux, vous êtes mon invité. Je sais comment créer un modal et "l'installer" ou le "hooker" (gauche, haut, droite, etc ...). Mais je ne sais pas l'ajouter exactement où je veux dans un élément du thème .tpl. J'espère que vous obtenez ce que je veux dire, –

+0

Plus exactement, je voudrais pouvoir créer un modal (qui aura .tpls, contrôleurs et autres), mais je ne pense pas que cela puisse aller dans une page de thème sans modification. tpls thème ... –