Jump to content

Nouvel onglet BO 1.4


Eva06

Recommended Posts

Bonjour,

 

J'ai créé mon nouvel onglet en allant dans Employés>onglets et j'ai créé mon fichier dans admin>tabs.

Il s'affiche correctement, avec le bouton "nouveau" mais cela fait un moment que je cherche comment configurer ce qui s'affiche lorsqu'on fait "nouveau". J'ai fait un formulaire avec la classe "displayform" mais rien ne change...

Je ne trouve pas d'article/tuto à ce sujet, si quelqu'un l'a déjà fait ce serait gentil :)

Merci

Link to comment
Share on other sites

Dans votre fichier ajouté dans admin->tabs , votre fonction displayform() renvoie bien un contenu html ?

 

Par exemple: 

public function displayForm() {
    $html = 'votre code';
    $html .= 'Encore du code';
    return $html; // ou echo $html;
}
Link to comment
Share on other sites

C'est bon j'ai mon formulaire qui s'affiche, je devais avoir fait une faute dans ma syntaxe quelque part...

Une fois que j'ai rempli le formulaire, comment je fais pour que la liste de ce que j'ai rajouter se voit ? C'est le fichier qui fera l'exécution du formulaire ou je dois utiliser la méthode getContent avec un tableau etc. ?

Link to comment
Share on other sites

et bien votre formulaire renvoie vers le même fichier et vous interceptez les variables $_POST au retour :)

 

<form action="' . $currentIndex . '&token=' . $this->token .'&my_form=1" method="post" >

    public function postProcess()
    {
        global $currentIndex, $cookie;

        if (Tools::getValue('my_form') == 1)
        {
	  $value = Tools::getValue('my_value');
          $value2 = Tools::getValue('my_value2');

          // faites ce que vous voulez avec...
         echo $result;
         }
    }

C'est une méthode, il y en a d'autres. (getContent() sert à afficher la page de configuration depuis la page des modules)

Link to comment
Share on other sites

Ok, merci :)

 

Par contre j'ai un soucis en utilisant la méthode postProcess() car les données s'affichent sur toutes les pages, j'ai tester en faisant echo "blabla" et cela s'affiche même en cliquant sur "nouveau"...

J'ai essayé la fonction display() mais tout s'efface... 

Il n'y a pas une liste de toutes les fonctions et à quoi elles servent ? Je trouve pas grand chose au sujet des onglets.

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

J'exécute une requête d'ajout une fois le formulaire rempli, aucune erreur ne s'affiche mais aucune ligne ne s'ajoute à ma bdd non plus... Ma requête marche dans PMA mais j'ai l'impression que mon script ne fait rien...

public function displayForm($isMainTab = true)
    {
        global $currentIndex, $cookie;
        parent::displayForm();
        echo '<form action="'.$currentIndex.'&token='.$this->token.'&my_form=1" method="post">
                    <label>Produit :</label>
                        <div class="margin-form">';
							echo "<select name='produit'>";
							$sql=mysql_query("SELECT distinct(id_product), name FROM ps_product_lang WHERE id_lang=2 AND id_product < 1000 ORDER BY name");
							while ($ligne = mysql_fetch_array($sql))
							{
								echo "<option value='".$ligne['id_product']."'>".$ligne['name']."</option>";
							}
							echo "</select>";
                        echo '</div>
                    <label>Promotion :</label>
                        <div class="margin-form">
                            <input type="text" name="prix" />
                        </div>
					<label>Pourcentage :</label>
                        <div class="margin-form">
                            <input type="text" name="pourcentage" />
                        </div>
                    <div class="margin-form">
                            <input type="submit" name="submit" value="Valider le produit" />
                        </div>
                </form>';  
    }
	public function postProcess()
	{
		global $currentIndex, $cookie;
		
		if (Tools::isSubmit('submit'))
		{
			$sql=mysql_query('INSERT INTO ps_promotions (prix, pourcentage, id_product) VALUES ('.$_POST['prix'].',"'.$_POST['pourcentage'].'",'.$_POST['produit'].')');
		}
	}
Link to comment
Share on other sites

 

J'exécute une requête d'ajout une fois le formulaire rempli, aucune erreur ne s'affiche mais aucune ligne ne s'ajoute à ma bdd non plus... Ma requête marche dans PMA mais j'ai l'impression que mon script ne fait rien...

public function displayForm($isMainTab = true)
    {
        global $currentIndex, $cookie;
        parent::displayForm();
        echo '<form action="'.$currentIndex.'&token='.$this->token.'&my_form=1" method="post">
                    <label>Produit :</label>
                        <div class="margin-form">';
							echo "<select name='produit'>";
							$sql=mysql_query("SELECT distinct(id_product), name FROM ps_product_lang WHERE id_lang=2 AND id_product < 1000 ORDER BY name");
							while ($ligne = mysql_fetch_array($sql))
							{
								echo "<option value='".$ligne['id_product']."'>".$ligne['name']."</option>";
							}
							echo "</select>";
                        echo '</div>
                    <label>Promotion :</label>
                        <div class="margin-form">
                            <input type="text" name="prix" />
                        </div>
					<label>Pourcentage :</label>
                        <div class="margin-form">
                            <input type="text" name="pourcentage" />
                        </div>
                    <div class="margin-form">
                            <input type="submit" name="submit" value="Valider le produit" />
                        </div>
                </form>';  
    }
	public function postProcess()
	{
		global $currentIndex, $cookie;
		
		if (Tools::isSubmit('submit'))
		{
			$sql=mysql_query('INSERT INTO ps_promotions (prix, pourcentage, id_product) VALUES ('.$_POST['prix'].',"'.$_POST['pourcentage'].'",'.$_POST['produit'].')');
		}
	}

Bon, il vous faut relire les bases (valable pour 1.4 également) : http://www.prestashop.com/blog/fr/les-bonnes-pratiques-de-la-classe-db-sur-prestashop-1-5/

 

et n'utilisez pas les variables $_POST sans savoir si elles existent.( if(isset($_POST['machin'])) { ... } ) Préférez Tools::getValue('prix'); -> récupère la variable $_POST['prix'] ou $_GET['prix']

//Exemple fictif :

$target = Tools::getValue('id');
$name = Tools::getValue('name');
Db::getInstance()->insert('target_table', array(
'id_target' => (int)$target,
'name' => pSQL($name),
));

N'hésitez pas à regarder le code de quelques modules existants

Link to comment
Share on other sites

Effectivement, j'ai pas trop les bases apparemment, désolée...

J'ai refais pas requête d'ajout :

if (Tools::isSubmit('submit'))
		{
			$prix = Tools::getValue('prix');
			$pourcentage = Tools::getValue('pourcentage');
			$produit = Tools::getValue('produit');
			Db::getInstance()->autoExecute('ps_promotions', array('prix' => (int)$prix, 'pourcentage' => pSQL($pourcentage), 'id_product' => (int)$produit), 'INSERT');
}

Je l'ai mise dans la fonction "postProcess", ce n'est peut être pas la bonne, car ça ne m'ajoute toujours rien, j'ai essayé d'enlever le préfixe la table, changé de fonction mais rien.

Il est normal qu'il n'y ai pas d'id pour ma table, car il est en auto increment, donc je pense pas que ça vienne de là. Je n'ai aucune erreur qui s'affiche non plus, je comprend pas trop :/

Link to comment
Share on other sites

Effectivement, j'ai pas trop les bases apparemment, désolée...

J'ai refais pas requête d'ajout :

if (Tools::isSubmit('submit'))
		{
			$prix = Tools::getValue('prix');
			$pourcentage = Tools::getValue('pourcentage');
			$produit = Tools::getValue('produit');
			Db::getInstance()->autoExecute('ps_promotions', array('prix' => (int)$prix, 'pourcentage' => pSQL($pourcentage), 'id_product' => (int)$produit), 'INSERT');
}

Je l'ai mise dans la fonction "postProcess", ce n'est peut être pas la bonne, car ça ne m'ajoute toujours rien, j'ai essayé d'enlever le préfixe la table, changé de fonction mais rien.

Il est normal qu'il n'y ai pas d'id pour ma table, car il est en auto increment, donc je pense pas que ça vienne de là. Je n'ai aucune erreur qui s'affiche non plus, je comprend pas trop :/

Alors quand on ne "voit" rien il faut faire des tests pour afficher les données et voir ce  qui se passe.

soit un var_dump() soit une combinaison avec die() car parfois le résultat du var_dump est masqué par une autre fonction.

Dans votre cas:

var_dump($_POST); // vous voyez ce qui a été envoyé

if (Tools::isSubmit('submit'))
{
	$prix = Tools::getValue('prix');
	var_dump($prix);
	$pourcentage = Tools::getValue('pourcentage');
	var_dump($pourcentage);
	$produit = Tools::getValue('produit');
	var_dump($produit);
	
	if(!Db::getInstance()->autoExecute('ps_promotions', array('prix' => (int)$prix, 'pourcentage' => pSQL($pourcentage), 'id_product' => (int)$produit), 'INSERT'))
		die('Erreur SQL');
}

Et regardez ce qui s'affiche.

Parfois Tools::isSubmit() est capricieux, donc utiliser if(Tools::getValue('submit')) {...}

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...