Jump to content

Débutant - Soumettre un formulaire


Recommended Posts

Bonjour,

 

Je suis débutant de quelques jours avec Prestashop 1.6, j'ai suivi la documentation officielle, passé des heures sur différents forums, je n'arrive pas à trouver de réponse à ma question, peut-être qu'il ne s'agit en fait simplement d'une erreur dans mon code.

 

J'essaye de créer un module pour ajouter des champs dans ma table produit.

 

Jusqu'ici j'arrive à :

 

- Créer ces champs à l'installation

- Supprimer ces champs à la désinstallation

 

productbypackage_phpmyadmin.png

- Créer une tab dans la fiche produit avec deux input

- Afficher les valeurs de mes champs dans ces input

 

productbypackage_producttab.png

 

Mais maintenant je suis coincé car je n'arrive pas à comprendre ce qu'il se passe lorsque l'utilisateur du module clique sur le bouton submit.

 

Je pense qu'il y a une histoire de contrôleur à appeler derrière tout ça mais je n'arrive pas à trouver d'information à ce sujet.

 

Je vous met mon code en copie si vous avez une idée du problème que je peux rencontrer.

 

J'ai utilisé un petit hack pour afficher une alerte javascript lorsque la tab s'affiche et lorsque le bouton submit est pressé, je n'ai jusqu'ici jamais eu l'occasion de voir celle du submit s'afficher.

<?php

if (!defined('_PS_VERSION_'))
	exit;

class productByPackage extends Module
{
	/* @var boolean error */
	protected $_errors = false;
	
	public function __construct()
	{
		$this->name = 'productbypackage';
		$this->tab = 'pricing_promotion';
		$this->version = '0.0.1';
		$this->author = 'John Doe';
		$this->need_instance = 0;

	 	parent::__construct();

		$this->displayName = $this->l('Product by Package');
		$this->description = $this->l("Test module");
	}
	
	public function install()
	{
		if (!parent::install() OR
			!$this->alterTable('add') OR			
			!$this->registerHook('actionAdminControllerSetMedia') OR
			!$this->registerHook('actionProductUpdate') OR
			!$this->registerHook('displayAdminProductsExtra'))
			return false;
		return true;
	}
	
	public function uninstall()
	{
		if (!parent::uninstall() OR !$this->alterTable('remove'))
			return false;
		return true;
	}

	private function getContent()
	{
	    $this->debug_to_console( "Test" );
	    $pbp_nb_product_for_new_package = Tools::getValue('pbp_nb_product_for_new_package');
	    $pbp_price_for_each_new_package = Tools::getValue('pbp_price_for_each_new_package');
	    $id_product = (int)Tools::getValue('id_product');

	    if(Tools::isSubmit('submitproductbypackage'))
	    {
	    	$this->debug_to_console( "Submited" );
	    	$sql = 'UPDATE ps_product SET pbp_nb_product_for_new_package = '.$pbp_nb_product_for_new_package.' WHERE id_product = '.$id_product;
			Db::getInstance()->Execute($sql);
	    }
	}

	public function prepareNewTab($product)
	{
		// Get default language
	    $default_lang = (int)Configuration::get('PS_LANG_DEFAULT');
	     
	    // Init Fields form array
	    $fields_form[0]['form'] = array(
	        'legend' => array(
	            'title' => $this->l('Settings'),
	        ),
	        'input' => array(
	            array(
	                'type' => 'text',
	                'label' => $this->l('Number of products'),
	                'name' => 'pbp_nb_product_for_new_package',
	                'size' => 20,
	                'required' => true
	            ),
	            array(
	                'type' => 'text',
	                'label' => $this->l('Price'),
	                'name' => 'pbp_price_for_each_new_package',
	                'size' => 20,
	                'required' => true
	            )
	        ),
	        'submit' => array(
	            'title' => $this->l('Save'),
	            'class' => 'btn btn-default pull-right'
	        )
	    );
	     
	    $helper = new HelperForm();
	     
	    // Module, token and currentIndex
	    $helper->module = $this;
	    $helper->name_controller = $this->name;
		$helper->token = Tools::getAdminTokenLite('AdminModules');
	     
	    // Title and toolbar
	    $helper->title = $this->displayName;
	    $helper->show_toolbar = true;        // false -> remove toolbar
	    $helper->toolbar_scroll = true;      // yes - > Toolbar is always visible on the top of the screen.
	    $helper->submit_action = 'submitproductbypackage';


	    $id_product = (int)Tools::getValue('id_product');
	     
	    // Load current value
	    $helper->fields_value['pbp_nb_product_for_new_package'] = $this->getPbpValues($id_product, 0);
	    $helper->fields_value['pbp_price_for_each_new_package'] = $this->getPbpValues($id_product, 1);

	    return $helper->generateForm($fields_form);
	}

	public function getPbpValues($id_product, $value)
	{
		$valueString = "";

		switch($value)
		{
			case 0: 
				$valueString = 'pbp_nb_product_for_new_package';
				break;
			case 1:
				$valueString = 'pbp_price_for_each_new_package';
				break;
		}

		$sql = 'SELECT '.$valueString.' FROM '._DB_PREFIX_.'product WHERE id_product ='.$id_product;
		return Db::getInstance()->getValue($sql);
	}

	public function hookDisplayAdminProductsExtra($params)
	{
		if (Validate::isLoadedObject($product = new Product((int)Tools::getValue('id_product'))))
		{
			$this->getContent();
			return $this->prepareNewTab();
		}
	}

	function debug_to_console( $data ) {
	    $output = $data;
	    if ( is_array( $output ) )
	        $output = implode( ',', $output);

	    echo "<script>alert( 'Debug Objects: " . $output . "' );</script>";
	}

	public function alterTable($method)
	{
		switch ($method) {
			case 'add':
				$sql = 'ALTER TABLE ' . _DB_PREFIX_ . 'product ADD (`pbp_nb_product_for_new_package` INT NOT NULL, `pbp_price_for_each_new_package` INT NOT NULL)';
				break;
			
			case 'remove':
				$sql = 'ALTER TABLE ' . _DB_PREFIX_ . 'product DROP COLUMN (`pbp_nb_product_for_new_package`, `pbp_price_for_each_new_package`)';
				break;
		}
		
		if(!Db::getInstance()->Execute($sql))
			return false;
		return true;
	}

}

En espérant que quelqu'un aura une idée d'où peut venir le problème ou de documentation vers laquelle me rediriger.

 

Je vous remercie de votre attention.

 

Au plaisir !

Edited by Corto Arnoux (see edit history)
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...