Jump to content

Modification d'un produit


Recommended Posts

Bonjour à tous,

Je souhaite créer un formulaire pour modifier un produit, pour faire j'ai créer une page pour les champs à modifier dont le code est le suivant:

	<div id="manageProduct">
	 
		<div id="adminHome">
			
			{if isset($confirmation) && $confirmation}
				<p class="alert alert-success">     
					{l s="Vous avez términé le process d'ajout de votre création, elle apparaitera désormais bientôt dans notre galerie." mod="admincreation"}
				</p>
			{/if}
			{include file="$tpl_dir./errors.tpl"}
			
			
		</div>
		<div id="addProduct" class="bootstrap" style="">
			<div style="color:#e8767a;"><h1 class="page-subheading">
				Modifier votre création 
			</h1>
                       </div>
	 
			<div class="box">
				<form  action="{$link->getModuleLink('admincreation', 'editproduct')|escape:'html'}?action=update" method="post" enctype='multipart/form-data' class="std" >
				
				</div>
				 
				
				
				<div id="">

				
					<div class="required form-group">
						<label for="product_name" class="">Titre :</label></br>
						<input type="text" onkeypress="refuserToucheEntree(event);" id="product_name" name="product_name"   class="is_required validate form-control" >
					</div>
					 <script type="text/javascript">
					  {literal}
					 function refuserToucheEntree(event) 
					
	{ 
	// Compatibilité IE / Firefox 
	if(!event && window.event) { 
	event = window.event; 
	} 
	// IE 
	if(event.keyCode == 13) { 
	event.returnValue = false; 
	event.cancelBubble = true; 
	} 
	// DOM 
	if(event.which == 13) { 
	event.preventDefault(); 
	event.stopPropagation(); 
	} 
	}	
 {/literal}	
	</script>
				  
	 
					<div class="form-group">
						<label class="control-label">Catégories  :</label>
						{foreach from=$data.subcategories item=subcategory}
							<select id="category-{$subcategory.id_category}" name="category-{$subcategory.id_category}" class="is_required validate form-control" required="true" style="width: auto">
								{foreach from=$subcategory.children item=child}
									<option id="cat-{$child.id_category}" value="{$child.id_category}">{$child.name}</option>
								{/foreach}
							</select>
						{/foreach}     
					</div>
					<script type="text/javascript">
						{literal}
							/*$().ready(function() {
							 $('#addProductForm').submit(function() {
							 var categories = [];
							 $('#categories-treeview input:checked').each(function(i) {
							 categories[i] = $(this).val();
							 });
							 $(this).find('#categories_id').val(JSON.stringify(categories));
							  
							 });
							 });*/
						{/literal}
					</script>
	 
					{foreach from=$data.features item=feature}
						<div class="form-group">
							<label class="control-label">{$feature.name}  :</label>
							<ul id="ul_features_{$feature.id_feature}" class="col-lg-12 col-md-12 ul_features">            
								{foreach from=$feature.featureValues item=value}
									<li>
										<div class="radio">
											<label for="id_feature_{$value.id_feature_value}">
												<input type="radio" value="{$value.id_feature_value}_{$feature.id_feature}" id="id_feature_{$value.id_feature_value}" name="feature_{$feature.id_feature}_value" />
												{$value.value}
											</label>
										</div>
	 
									</li>
								{/foreach}
							</ul>
						</div>
					{/foreach}
	 
					<div class="form-group">
						<label for="colorpicker" class="">Couleur dominante:</label>
						<input type="hidden" name="product_color" id="product_color" value="none" />
						<select name="colorpicker">
							{foreach from=$data.attributes.colors item=attribute}
								<option color="{$attribute.color}" value="{$attribute.id_attribute}" {if $smarty.foreach.attribute.iteration == 1}selected{/if} >{$attribute.name}</option>
							{/foreach} 
						</select>
						<script type="text/javascript">
							{literal}
								$('select[name="colorpicker"]').simplecolorpicker({
									picker: true
								}).on('change', function() {
									$('input#product_color').val($('select[name="colorpicker"]').val());
								});
							{/literal}
						</script>
					</div>
	 
					<div class="form-group">
						<script type="text/javascript">
							{literal}
								$().ready(function() {
									var input_id = 'product_keywords';
									$('#' + input_id).tagify({addTagPrompt: 'Ajouter un mot-clé'});
									//console.log($('#'+input_id).tagify());
									$('#addProductForm').submit(function() {
										$(this).find('#' + input_id).val($('#' + input_id).tagify('serialize'));
	 
	 
									});
								});
							{/literal}
						</script>
						<label for="product_name" class=""> Mot-clés : </label>
						<p>Important : Ajoutez au moins 5 Mots-clés. Appuyez sur Entrée après chaque mot-clé</p>
						<input type="text" id="product_keywords" name="product_keywords" value="" class="form-control tagify updateCurrentText" placeholder="Ajouter un mot-clé">
						<p>La description n'est pas obligatoire, toutefois et pour une meilleure visibilité de votre création, celle-ci pourra être utile. </p>
					</div>
	 
					<div class="form-group" >
						<label for="product_description" class="control-label">Description :</label></br>
						<textarea style="  height: 91px;" class="required form-control" name="product_description" id="product_description"></textarea>
	
			
</div>
	  <button type="submit" class="btn btn-default button button-medium submitConditions" name="submit_form"><span>Continuer</span></button>
	
			   <!--<span class="btn btn-default button button-medium suiv4">Continuer</span>-->
			   </div>
				  
	 
					
					<!-- Your HTML Form Content -->
					 
				</form>
	 
			</div>
		   <!-- <ul class="footer_links clearfix">
				<li><a title="Retour" href="#" class="btn btn-default button button-small"><span><i class="icon-chevron-left"></i> Retour</span></a></li>
			</ul>-->
		</div>
		
		

Mon contrôleur est le suivant (juste pour essayer j'ai créer une requête sql pour mettre à jour le nom du produit)

	<?php
	class AdminCreationEditProduct1ModuleFrontController extends ModuleFrontController {
	public $auth = true;
		public $ssl = true;
		private $done_traitement = true;

		public function init() {
		
			parent::init();
			
			$this->customer = $this->context->customer;
			
		}
		public function postProcess() 
		{
		if (Tools::isSubmit('action'))
		{
		$action = Tools::getValue('action');
		$product_id = Tools::getValue('id');
		if ($action == 'update' && $product_id) 
		{
			//$product_id = Tools::getValue('id');
			 global $cookie;
			 if (!isset($cookie->id_customer)) 
			 {
			 $this->errors[] = Tools::displayError('Aucun client loggé.');
			 }
			 else
			 {
			 $lang_id = $this->context->language->id;
			 $product_id = Tools::getValue('id');
			 $product_name = Tools::getValue('product_name');
			 /*$product_keywords = Tools::getValue('product_keywords');
			 $home_categories = Category::getHomeCategories($lang_id);
			 $categories = array();
			                 foreach ($home_categories as $home_category) {
                    $category_name = 'category-' . $home_category['id_category'];
                    if (isset($_REQUEST[$category_name]))
                        $categories[] = Tools::getValue('category-' . $home_category['id_category']);
                }
			$product_color = Tools::getValue('product_color');*/
			
		$update_name=' UPDATE `'._DB_PREFIX_.'product` SET product_name=.'$product_name;
       $results = Db::getInstance()->Execute($update_name);
			
			   
			 
			 }
		
		
		
		
		
			
		
		
		}
		
		
		
		
		}
		
		
		
		}
	
	}








	?>

Je sais que je fais des bêtises.

Merci de me guider 

Link to comment
Share on other sites

sur les versions récentes on n'utilise plus global, mais context
 

$update_name=' UPDATE `'._DB_PREFIX_.'product` SET product_name=.'$product_name;
$results = Db::getInstance()->Execute($update_name);



1- $product_name n'est pas protégé, il faut utiliser pSQL($product_name) 
2- privilégie les bonnes pratiques : https://www.prestashop.com/blog/fr/les-bonnes-pratiques-de-la-classe-db-sur-prestashop-1-5/ utilise Db::getInstance()->update
 
sinon suit les conseils de Prestashop Studio

Link to comment
Share on other sites

Bonjour,

Si je veux suivre les recommandations de Prestashop Studio comment faire "un update"

La méthode suivante permet de faire l'ajout 

	$product_color = Tools::getValue('product_color');
			        if ($product_color != 'none' && trim($product_color) != '') {
            $attributes = array();
            $attributes[0] = $product_color;
            $id_product_attribute = $product->addAttribute(0, 0, 0, 0, array(), '', '', 0);
            $combination = new Combination((int) $id_product_attribute);
            $combination->setAttributes($attributes);
        }
Link to comment
Share on other sites

Bonjour,

Je reviens vers vous afin de m'aider à résoudre ce problème voila à quoi je suis arrivé pour le moment:


<?php
class AdminCreationEditProduct1ModuleFrontController extends ModuleFrontController {
	public $auth = true;
		public $ssl = true;
		private $done_traitement = true;

		public function init() {
		
			parent::init();
			
			$this->customer = $this->context->customer;
			
		}
		
public function postProcess() {
if (Tools::isSubmit('action'))
{

			 global $cookie;
			 if (!isset($cookie->id_customer)) 
			 {
			 $this->errors[] = Tools::displayError('Aucun client loggé.');
			 }
			 else
			 {
			 $action = Tools::getValue('action');
		$product_id = Tools::getValue('id');
		if ($action == 'update') 
		{
			 
			
			 $product = new Product((int) $product_id);
			 $lang_id = $this->context->language->id;
			   $product_name = Tools::getValue('product_name');
                $product_keywords = Tools::getValue('product_keywords');

                // recuperation de la catégorie
                $home_categories = Category::getHomeCategories($lang_id);
                $product_description = Tools::getValue('product_description');
                $categories = array();
                foreach ($home_categories as $home_category) {
                    $category_name = 'category-' . $home_category['id_category'];
                    if (isset($_REQUEST[$category_name]))
                        $categories[] = Tools::getValue('category-' . $home_category['id_category']);
                }
				
				$languages = Language::getLanguages();
        foreach ($languages as $lang) {
            $product->name[$lang['id_lang']] = $product_name;
            
            $product->description[$lang['id_lang']] = $product_description;
        }
		$product_color = Tools::getValue('product_color');
		if ($product_color != 'none' && trim($product_color) != '') {
            $attributes = array();
            $attributes[0] = $product_color;
            $id_product_attribute = $product->addAttribute(0, 0, 0, 0, array(), '', '', 0);
            $combination = new Combination((int) $id_product_attribute);
            $combination->setAttributes($attributes);
        }
		 $product->color = $product_color;
		 $product->keywords = $product_keywords;
				
		
		$product->save();
		
				
				
			 
			 }
			 else {
			 
			 $this->errors[] = Tools::displayError('Pas d action update.');
			 }
			 }

}
else
{
$this->errors[] = Tools::displayError('Pas d action.');
}
}








}



?>
 

Ce contrôleur permet modifier uniquement le nom et le produit par contre je ne suis pas arriver à modifier les champs catégories, styles, couleurs et mots clés

Merci d'avance

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