Jump to content

[RESOLU] PHP et JS


Recommended Posts

Bonjour,

 

j'ai une petite question...

 

J'ai un bouton dans un module pour lequel j'aimerais ouvrir un popup.

 

Donc j'ai un div caché et lors du clic, je modifie le style pour l'afficher. Jusque là, pas de soucis.

 

Par contre, avant de l'afficher, j'aimais appliquer une fonction PHP afin d'actualiser les données de cette DIV...

 

Ma fonction est dans le fichier php de mon module, tout comme le "content" qui contient affichera le bouton, la fonction js sur le onclick du bouton...

 

Dois je forcément passer par ajax? Ou dois ajouter un <form> et ajouter une action sur le bouton qui permettra de mettre à jour les données... en espérer que le JS s'execute apres

 

DSl je suis une débutante

Edited by alexandrieb (see edit history)

Share this post


Link to post
Share on other sites

Oui dans votre cas, le plus simple est de passer en ajax:

 

Au clic, appel ajax vers votre fichier php

Celui-ci renvoie le contenu actualisé

Javascript récupère le contenu et remplace l'existant dans la div

la div est alors affichée

Share this post


Link to post
Share on other sites

Bonjour,

 

J'ai trouvé ceci:

var url = "controller/admin/AdminAjaxController.php";
$.post(url, MaFonction(data){
/ Tu affiches le contenu dans ta div
   $('#popup').html(data);
});

Ma fonction possède un paramètre, dois je remplacer data par mon parametre?

 

Et comment puis je récupérer non pas de l HTML mais directement une variable array?

 

Merci

Edited by alexandrieb (see edit history)

Share this post


Link to post
Share on other sites

Non, du tout^^

Il s'ajoute.

 

Mais vu que vous utilisez l'écriture la plus simple, les paramètres sont passés en GET donc ajoutez juste votre paramètre à l'url:

var param = "votre_valeur_a_passer";
var url = "controller/admin/AdminAjaxController.php?param="+ param;

Share this post


Link to post
Share on other sites

Pouvez répéter la question ? Je ne comprends pas.

Vous mélangez datas et fonction js.

 

Soit le contenu entier en html est contenu dans le data et vous l'ajoutez dans la div, soit vous récupérez diverses données dans votre data (qui est un array en json) et appliquez chacune au sein de la div suivant les id

 

Si vous ne comprenez rien à ce que j'écris, il vaut mieux demander à quelqu'un qui maitrise un peu parce que sinon vous allez avoir du mal^^

Share this post


Link to post
Share on other sites

Ok, donc vous devez parser le tableau en js, et créer le resultat en html que vous injectez dans votre div.

Pas d'autre solution, car envoyer le tableau directement dans la page html ne fera rien qu'afficher des données brutes sans mise en forme

Share this post


Link to post
Share on other sites

et si maintenant je veux faire la méthode html.

 

Je dois faire un return dans ma fonction qui contiendra directement le html voulu?

 

Si je passe par cette méthode, je peux insérer des méthode prestashop dans mon ajax.php comme le $this->l('Name') ?

Share this post


Link to post
Share on other sites

Mon fichier ajax.php

<?php
	echo $_POST['id_customer'];
?>

Mon script JS

<script type="text/javascript">
function showPopup($this)
{
   var name = $($this).attr("name");
   var id_customer =name.substring(10);
                
   var url = "ajax.php?id_customer="+ id_customer;

   $.post(url, getCustomer(data){
      $('#popup').html(data);
   })
	
   $("#popup").show();
}
</script>

Merci pour votre aide

Share this post


Link to post
Share on other sites

Ok merci, je test cela de suite

 

Dans la console de firebug, j'ai ce message:

"

 
Blocage d’une requête multi-origines (Cross-Origin Request) : la politique « Same Origin » ne permet pas de consulter la ressource distante située sur http://www.mondomaine.com/modules/monmodule/ajax.php?id_mail=4. Raison : l’en-tête CORS « Access-Control-Allow-Origin » est manquant.
Edited by alexandrieb (see edit history)

Share this post


Link to post
Share on other sites

Ce qui m'amuse, c'est qu'on nous donne des informations qui sont contradictoires au fur et à mesure où l'on avance...

 

Si vous nous disiez vraiment ce que vous voulez faire, depuis où et vers où, on pourrait peut-être vous aider efficacement.

En ajax, oubliez l'appel à un serveur hors-domaine, faites-le depuis votre php en curl ou file_get_content().

Share this post


Link to post
Share on other sites

ca marche enfin lol

 

Maintenant je vais essayer d'utiliser les fonctions Db::getInstance de prestashop pour récupérer les infos dans la db

 

Merci en tout cas

Expliquez aux suivants pourquoi ça marche maintenant, parce que là ce n'est pas évident à comprendre..

Share this post


Link to post
Share on other sites

Merci. J'avais deja lu et j'ai deja créer ma fonction mais apparemment. Il m'indique une erreur 500 et me spécifie que la connexion a la DB est close...

 

J'ai créer mon select dans $sql

 

et ma requete est 

$results =  Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);

 

Dois je inclure un fichier spécifique à prestashop dans mon fichier ajax.php qui ne contient pour le moment qu'un

<?php

    function getCustomer($id_customer)
    {
		$html = '';
		
		if (isset($id_customer) && $id_customer != NULL) {	
			$sql = 'SELECT `id_customer`,`email`,`firstname`, `lastname`
					FROM `'._DB_PREFIX_.'customer`
					WHERE id_customer = ' . $id_customer;
			
			$results =  Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
			$html = '
			<TABLE style="width:100%">
				<TR>
					<TD style="width:25%">'.$this->l('Customers ID').'</TD>
					<TD style="width:25%">'.$results['id_customer'].'</TD>
					<TD style="width:25%">'.$this->l('Email').'</TD>
					<TD style="width:25%">'.$results['email'].'</TD>
				</TR>
				<TR>
					<TD style="width:25%">'.$this->l('Lastname').'</TD>
					<TD style="width:25%">'.$results['lastname'].'</TD>
					<TD style="width:25%">'.$this->l('Firstname').'</TD>
					<TD style="width:25%">'.$results['firstname'].'</TD>
				</TR>
			</TABLE>';
		}
		return $html;
    }
	
	echo getCustomer($_POST["id_customer"]);
?>

Share this post


Link to post
Share on other sites

Expliquez aux suivants pourquoi ça marche maintenant, parce que là ce n'est pas évident à comprendre..

 

Cela fonctionne car le chemin de l'url n'était pas correcte... Il prennait un fichier ajax.php propre à prestashop et pas celui que j'avais créer...

 

:D comme quoi un manque d'attention fait beaucoup

Share this post


Link to post
Share on other sites

 

 

6. La méthode executeS($sql, $array = true, $use_cache = 1)

Cette méthode exécute la requête SQL donnée et charge l’ensemble des résultats qu’elle retourne dans un tableau multidimensionnel.

 

J'ai utilisé execute mais erreur 500 connection close

Share this post


Link to post
Share on other sites

 

 

6. La méthode executeS($sql, $array = true, $use_cache = 1)

Cette méthode exécute la requête SQL donnée et charge l’ensemble des résultats qu’elle retourne dans un tableau multidimensionnel.

 

Il a dit "un tableau", un array, donc un truc avec des dimensions à parcourir.

Et qui dit parcourir, dit foreach...

Share this post


Link to post
Share on other sites

le $html dans la fonction ne peut pas bien fonctionner.

Tu fais un executeS et après un echo sans foreach, donc pas bon.

Si tu as une erreur 500, regarde le dump dans les logs, ça aidera, il y a peut être une erreur ailleurs.

Share this post


Link to post
Share on other sites

Vous n'avez vraiment pas du lire la doc...

 

Execute simple ne veux rien dire^^

 

Il y a 2 méthodes Prestashop: Execute et ExecuteS 

La 1ère pour les select, la seconde pour les action (insert, update, delete, etc...)

 

Le ExecuteS renvoie TOUJOURS un tableau, même s'il n'y a qu'une valeur autrement il faut utiliser getValue()

Share this post


Link to post
Share on other sites

J'ai survolé la doc

 

Mais j'avance ^^

 

Ici j'ai ajouté un 

require '../../config/config.inc.php';

Et maintenant, je regarde pour utiliser les traductions du module dans mon fichier ajax.php et pour ce faire, je dois récupérer la variable $this du module

Share this post


Link to post
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
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More