Jump to content
WebAlsaceInfo

[Résolu] Ajouter un Champs dans l'administration Presta 1.6

Recommended Posts

Bonjour à tous :)

J'ai suivi un petit tuto et je bloque à un endroit j'aimerais avoir votre aide :)



J'ai suivi ce tuto :

http://www.geraudlacheny.fr/ajouter-champ-personnalise-produit-prestashop/

Tout fonctionne correctement, cependant j'ai du faire une petite modification au niveau du point 3 du dit Tuto, car le champ n'apparaissait pas dans l'admin,

donc j'ai fait ceci :

<!-- Prix par Paquet -->
 

    <div class="form-group">
            <label class="control-label col-lg-2" for="pointsforts_{$id_lang}">
                {include file="controllers/products/multishop/checkbox.tpl" field="pointsforts" type="tinymce" multilang="true"}
                <span class="label-tooltip" data-toggle="tooltip"
                    title="{l s='Appears in the body of the product page.'}">
                    {l s='Strength'}
                </span>
            </label>
            <div class="col-lg-9">
                <input maxlength="5" id="pointsforts" name="pointsforts" type="text"/>
            </div>
        </div>

le problème, c'est que dans mon admin j'ai ceci :
e0778e156c16a3236d2be5a6bcc71632.png


Et sur la fiche produit j'ai bien marqué "Sold in packs of :10" en dessous du prix :
f58f0ddbbd554aec9c630adc0d3ce1af.png

Ce que je ne comprends pas, c'est le pourquoi du comment le champ dans l'admin reste vide.

Voici les fichiers que j'ai modifié :

1.: BASE DE DONNÉE
Dans la base de donnée, j'ai bien rajouter le champ texte qui est prix en compte :
8f168158ac46f1d74fc22aab79e5794b.png
8942adbe3d661387162d030a6dd56c56.png

Et le résultat est bien prix en compte soit : 10.

2.: FTP OVERRIDE PRODUCT
Dans le Override, j'ai créer le dossier products et le fichier prices.tpl (vu que je veux qu'il s'affiche dans la partie Prix de l'admin)

9ff56a67eebb515bf0100a703678aeb6.png

Mon fichier price.tpl contient :

{*
* 2007-2014 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
*  @author PrestaShop SA <contact@prestashop.com>
*  @copyright  2007-2014 PrestaShop SA
*  @license    http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*}

<script type="text/javascript">
var Customer = new Object();
var product_url = '{$link->getAdminLink('AdminProducts', true)|addslashes}';
var ecotax_tax_excl = parseFloat({$ecotax_tax_excl});
$(document).ready(function () {
	Customer = {
		"hiddenField": jQuery('#id_customer'),
		"field": jQuery('#customer'),
		"container": jQuery('#customers'),
		"loader": jQuery('#customerLoader'),
		"init": function() {
			jQuery(Customer.field).typeWatch({
				"captureLength": 1,
				"highlight": true,
				"wait": 50,
				"callback": Customer.search
			}).focus(Customer.placeholderIn).blur(Customer.placeholderOut);
		},
		"placeholderIn": function() {
			if (this.value == '{l s='All customers'}') {
				this.value = '';
			}
		},
		"placeholderOut": function() {
			if (this.value == '') {
				this.value = '{l s='All customers'}';
			}
		},
		"search": function()
		{
			Customer.showLoader();
			jQuery.ajax({
				"type": "POST",
				"url": "{$link->getAdminLink('AdminCustomers')|addslashes}",
				"async": true,
				"dataType": "json",
				"data": {
					"ajax": "1",
					"token": "{getAdminToken tab='AdminCustomers'}",
					"tab": "AdminCustomers",
					"action": "searchCustomers",
					"customer_search": Customer.field.val()
				},
				"success": Customer.success
			});
		},
		"success": function(result)
		{
			if(result.found) {
				var html = '<ul class="list-unstyled">';
				jQuery.each(result.customers, function() {
					html += '<li><a class="fancybox" href="{$link->getAdminLink('AdminCustomers')}&id_customer='+this.id_customer+'&viewcustomer&liteDisplaying=1">'+this.firstname+' '+this.lastname+'</a>'+(this.birthday ? ' - '+this.birthday:'');
					html += ' - '+this.email;
					html += '<a onclick="Customer.select('+this.id_customer+', \''+this.firstname+' '+this.lastname+'\'); return false;" href="#" class="btn btn-default">{l s='Choose'}</a></li>';
				});
				html += '</ul>';
			}
			else
				html = '<div class="alert alert-warning">{l s='No customers found'}</div>';
			Customer.hideLoader();
			Customer.container.html(html);
			jQuery('.fancybox', Customer.container).fancybox();
		},
		"select": function(id_customer, fullname)
		{
			Customer.hiddenField.val(id_customer);
			Customer.field.val(fullname);
			Customer.container.empty();
			return false;
		},
		"showLoader": function() {
			Customer.loader.fadeIn();
		},
		"hideLoader": function() {
			Customer.loader.fadeOut();
		}
	};
	Customer.init();
});
</script>
<div id="product-prices" class="panel product-tab">
	<input type="hidden" name="submitted_tabs[]" value="Prices" />
	<h3>{l s='Product price'}</h3>

	<div class="alert alert-info">
		{l s='You must enter either the pre-tax retail price, or the retail price with tax. The input field will be automatically calculated.'}
	</div>

	{include file="controllers/products/multishop/check_fields.tpl" product_tab="Prices"}
	<div class="form-group">
		<label class="control-label col-lg-3" for="wholesale_price">
			{include file="controllers/products/multishop/checkbox.tpl" field="wholesale_price" type="default"}
			<span class="label-tooltip" data-toggle="tooltip"
				title="{l s='The wholesale price is the price you paid for the product. Do not include the tax.'}">
				{l s='Pre-tax wholesale price'}
			</span>

		</label>
		<div class="input-group col-lg-2">
			<span class="input-group-addon">{$currency->prefix}{$currency->suffix}</span>
			<input maxlength="14" name="wholesale_price" id="wholesale_price" type="text" value="[spam-filter]toolsConvertPrice price=$product->wholesale_price}|string_format:'%.2f'}" onchange="this.value = this.value.replace(/,/g, '.');" />
		</div>
	</div>

	<div class="form-group">
		<label class="control-label col-lg-3" for="priceTE">
			{include file="controllers/products/multishop/checkbox.tpl" field="price" type="price"}
			<span class="label-tooltip" data-toggle="tooltip"
				title="{l s='The pre-tax retail price is the price for which you intend sell this product to your customers. It should be higher than the pre-tax wholesale price: the difference between the two will be your margin.'}">
				{l s='Pre-tax retail price'}
			</span>
		</label>
		<div class="input-group col-lg-2">
			<span class="input-group-addon">{$currency->prefix}{$currency->suffix}</span>
			<input type="hidden"  id="priceTEReal" name="price" value="{toolsConvertPrice price=$product->price}" />
			<input size="11" maxlength="14" id="priceTE" name="price_displayed" type="text" value="[spam-filter]toolsConvertPrice price=$product->price}|string_format:'%.2f'}" onchange="noComma('priceTE'); $('#priceTEReal').val(this.value);" onkeyup="$('#priceType').val('TE'); $('#priceTEReal').val(this.value.replace(/,/g, '.')); if (isArrowKey(event)) return; calcPriceTI();" />
		</div>
	</div>
	
	<!-- Prix par Paquet -->

	<div class="form-group">
			<label class="control-label col-lg-2" for="pointsforts_{$id_lang}">
				{include file="controllers/products/multishop/checkbox.tpl" field="pointsforts" type="tinymce" multilang="true"}
				<span class="label-tooltip" data-toggle="tooltip"
					title="{l s='Appears in the body of the product page.'}">
					{l s='Strength'}
				</span>
			</label>
			<div class="col-lg-9">
				<input maxlength="5" id="pointsforts" name="pointsforts" type="text"/>
			</div>
		</div>

	<div class="form-group">		
		<label class="control-label col-lg-3" for="id_tax_rules_group">
			{include file="controllers/products/multishop/checkbox.tpl" field="id_tax_rules_group" type="default"}
			{l s='Tax rule:'}
		</label>
		<div class="col-lg-8">
			<script type="text/javascript">
				noTax = {if $tax_exclude_taxe_option}true{else}false{/if};
				taxesArray = new Array ();
				taxesArray[0] = 0;
				{foreach $tax_rules_groups as $tax_rules_group}
					{if isset($taxesRatesByGroup[$tax_rules_group['id_tax_rules_group']])}
					taxesArray[{$tax_rules_group.id_tax_rules_group}] = {$taxesRatesByGroup[$tax_rules_group['id_tax_rules_group']]};
						{else}
					taxesArray[{$tax_rules_group.id_tax_rules_group}] = 0;
					{/if}
				{/foreach}
				ecotaxTaxRate = {$ecotaxTaxRate / 100};
			</script>
			<div class="row">
				<div class="col-lg-6">
					<select onChange="javascript:calcPrice(); unitPriceWithTax('unit');" name="id_tax_rules_group" id="id_tax_rules_group" {if $tax_exclude_taxe_option}disabled="disabled"{/if} >
						<option value="0">{l s='No Tax'}</option>
					{foreach from=$tax_rules_groups item=tax_rules_group}
						<option value="{$tax_rules_group.id_tax_rules_group}" {if $product->getIdTaxRulesGroup() == $tax_rules_group.id_tax_rules_group}selected="selected"{/if} >
					{$tax_rules_group['name']|htmlentitiesUTF8}
						</option>
					{/foreach}
					</select>
				</div>
				<div class="col-lg-2">
					<a class="btn btn-link confirm_leave" href="{$link->getAdminLink('AdminTaxRulesGroup')|escape:'html':'UTF-8'}&addtax_rules_group&id_product={$product->id}" {if $tax_exclude_taxe_option}disabled="disabled"{/if}>
						<i class="icon-plus-sign"></i>  {l s='Create new tax'} <i class="icon-external-link-sign"></i>
					</a>
				</div>
			</div>
		</div>
	</div>

	{if $tax_exclude_taxe_option}
	<div class="form-group">
		<div class="col-lg-9 col-lg-offset-3">
			<div class="alert">
				{l s='Taxes are currently disabled:'}
				<a href="{$link->getAdminLink('AdminTaxes')|escape:'html':'UTF-8'}">{l s='Click here to open the Taxes configuration page.'}</a>
				<input type="hidden" value="{$product->getIdTaxRulesGroup()}" name="id_tax_rules_group" />
			</div>
		</div>
	</div>
	{/if}

	<div class="form-group" {if !$ps_use_ecotax} style="display:none;"{/if}>
		<label class="control-label col-lg-3" for="ecotax">
			{include file="controllers/products/multishop/checkbox.tpl" field="ecotax" type="default"}
			<span class="label-tooltip" data-toggle="tooltip"
				title="{l s='The ecotax is a local set of taxes intended to "promote ecologically sustainable activities via economic incentives". It is already included in retail price: the higher this ecotax is, the lower your margin will be.'}">
				{l s='Ecotax (tax incl.)'}
			</span>
		</label>
		<div class="input-group col-lg-2">
			<span class="input-group-addon">{$currency->prefix}{$currency->suffix}</span>
			<input maxlength="14" id="ecotax" name="ecotax" type="text" value="{$product->ecotax|string_format:'%.2f'}" onkeyup="$('#priceType').val('TI');if (isArrowKey(event))return; calcPriceTE(); this.value = this.value.replace(/,/g, '.'); if (parseInt(this.value) > getE('priceTE').value) this.value = getE('priceTE').value; if (isNaN(this.value)) this.value = 0;" />
		</div>
	</div>

	<div class="form-group" {if !$country_display_tax_label || $tax_exclude_taxe_option}style="display:none;"{/if} >
		<label class="control-label col-lg-3" for="priceTI">{l s='Retail price with tax'}</label>
		<div class="input-group col-lg-2">
			<span class="input-group-addon">{$currency->prefix}{$currency->suffix}</span>
			<input id="priceType" name="priceType" type="hidden" value="TE" />
			<input maxlength="14" id="priceTI" type="text" value="" onchange="noComma('priceTI');" onkeyup="$('#priceType').val('TI');if (isArrowKey(event)) return;  calcPriceTE();" />
		</div>
	</div>

	<div class="form-group">
		<label class="control-label col-lg-3" for="unit_price">
			{include file="controllers/products/multishop/checkbox.tpl" field="unit_price" type="unit_price"}
			<span class="label-tooltip" data-toggle="tooltip"
				title="{l s='When selling a pack of items, you can indicate the unit price for each item of the pack. For instance, "per bottle" or "per pound".'}">
				{l s='Unit price'}
			</span>
		</label>
		<div class="input-group col-lg-4">
			<span class="input-group-addon">{$currency->prefix}{$currency->suffix}</span>
			<input maxlength="14" id="unit_price" name="unit_price" type="text" value="{$unit_price|string_format:'%.2f'}" onkeyup="if (isArrowKey(event)) return ;this.value = this.value.replace(/,/g, '.'); unitPriceWithTax('unit');"/>
			<span class="input-group-addon">{l s='per'}</span>
			<input maxlength="10" id="unity" name="unity" type="text" value="{$product->unity|htmlentitiesUTF8}" onkeyup="if (isArrowKey(event)) return ;unitySecond();" onchange="unitySecond();"/>
		</div>
	</div>

	{if $ps_tax && $country_display_tax_label}
	<div class="form-group">
		<div class="col-lg-9 col-lg-offset-3">
			<div class="alert alert-warning">
				<span>{l s='or'}
					{$currency->prefix}<span id="unit_price_with_tax">0.00</span>{$currency->suffix}
					{l s='per'} <span id="unity_second">{$product->unity}</span> {l s='with tax.'}
				</span>
			</div>
		</div>
	</div>
	{/if}
	
	<div class="form-group">
		<label class="control-label col-lg-3" for="on_sale">
		{include file="controllers/products/multishop/checkbox.tpl" field="on_sale" type="default"}
		</label>
		<div class="col-lg-9">
			<div class="checkbox">
				<label class="control-label" for="on_sale" >
					<input type="checkbox" name="on_sale" id="on_sale" {if $product->on_sale}checked="checked"{/if} value="1" />
					{l s='Display the "on sale" icon on the product page, and in the text found within the product listing.'}
				</label>
			</div>
		</div>
	</div>

	<div class="form-group">
		<div class="col-lg-9 col-lg-offset-3">
			<div class="alert alert-warning">
				<strong>{l s='Final retail price:'}</strong>
				<span>
					{$currency->prefix}
					<span id="finalPrice" >0.00</span>
					{$currency->suffix}
					<span {if $ps_tax}style="display:none;"{/if}> ({l s='tax incl.'})</span>
				</span>
				<span {if $ps_tax}style="display:none;"{/if} >
				{if $country_display_tax_label}
					/
				{/if}
					{$currency->prefix}
				<span id="finalPriceWithoutTax"></span>
					{$currency->suffix}
					{if $country_display_tax_label}({l s='tax excl.'}){/if}
				</span>
			</div>
		</div>
	</div>
	<div class="panel-footer">
		<a href="{$link->getAdminLink('AdminProducts')}" class="btn btn-default"><i class="process-icon-cancel"></i> {l s='Cancel'}</a>
		<button type="submit" name="submitAddproduct" class="btn btn-default pull-right"><i class="process-icon-save"></i> {l s='Save'}</button>
		<button type="submit" name="submitAddproductAndStay" class="btn btn-default pull-right"><i class="process-icon-save"></i> {l s='Save and stay'}</button>
	</div>
</div>

{if isset($specificPriceModificationForm)}
<div class="panel">
	<h3>{l s='Specific prices'}</h3>

	<div class="alert alert-info">
		{l s='You can set specific prices for clients belonging to different groups, different countries, etc.'}
	</div>

	<div class="form-group">
		<div class="col-lg-12">
			<a class="btn btn-default" href="#" id="show_specific_price">
				<i class="icon-plus-sign"></i> {l s='Add a new specific price'}
			</a>
			<a class="btn btn-default" href="#" id="hide_specific_price" style="display:none">
				<i class="icon-remove text-danger"></i> {l s='Cancel new specific price'}
			</a>
		</div>
	</div>

	<script type="text/javascript">
		var product_prices = new Array();
		{foreach from=$combinations item='combination'}
			product_prices['{$combination.id_product_attribute}'] = '{$combination.price|@addcslashes:'\''}';
		{/foreach}
	</script>

	<div id="add_specific_price" class="well clearfix" style="display: none;">
		<div class="col-lg-12">
			<div class="form-group">
				<label class="control-label col-lg-2" for="{if !$multi_shop}spm_currency_0{else}sp_id_shop{/if}">{l s='For'}</label>
				<div class="col-lg-9">
					<div class="row">
					{if !$multi_shop}
						<input type="hidden" name="sp_id_shop" value="0" />
					{else}
						<div class="col-lg-3">
							<select name="sp_id_shop" id="sp_id_shop">
								{if !$admin_one_shop}<option value="0">{l s='All shops'}</option>{/if}
								{foreach from=$shops item=shop}
								<option value="{$shop.id_shop}">{$shop.name|htmlentitiesUTF8}</option>
								{/foreach}
							</select>
						</div>
					{/if}
						<div class="col-lg-3">
							<select name="sp_id_currency" id="spm_currency_0" onchange="changeCurrencySpecificPrice(0);">
								<option value="0">{l s='All currencies'}</option>
								{foreach from=$currencies item=curr}
								<option value="{$curr.id_currency}">{$curr.name|htmlentitiesUTF8}</option>
								{/foreach}
							</select>
						</div>
						<div class="col-lg-3">
							<select name="sp_id_country" id="sp_id_country">
								<option value="0">{l s='All countries'}</option>
								{foreach from=$countries item=country}
								<option value="{$country.id_country}">{$country.name|htmlentitiesUTF8}</option>
								{/foreach}
							</select>
						</div>
						<div class="col-lg-3">
							<select name="sp_id_group" id="sp_id_group">
								<option value="0">{l s='All groups'}</option>
								{foreach from=$groups item=group}
								<option value="{$group.id_group}">{$group.name}</option>
								{/foreach}
							</select>
						</div>
					</div>
				</div>
			</div>

			<div class="form-group">
				<label class="control-label col-lg-2" for="customer">{l s='Customer'}</label>
				<div class="col-lg-4">
					<input type="hidden" name="sp_id_customer" id="id_customer" value="0" />
					<div class="input-group">
						<input type="text" name="customer" value="{l s='All customers'}" id="customer" autocomplete="off" />
						<span class="input-group-addon"><i id="customerLoader" class="icon-refresh icon-spin" style="display: none;"></i> <i class="icon-search"></i></span>
					</div>
				</div>
			</div>
			<div class="form-group">
				<div class="col-lg-10 col-lg-offset-2">
					<div id="customers"></div>
				</div>
			</div>

			{if $combinations|@count != 0}
			<div class="form-group">
				<label class="control-label col-lg-2" for="sp_id_product_attribute">{l s='Combination:'}</label>
				<div class="col-lg-4">
					<select id="sp_id_product_attribute" name="sp_id_product_attribute">
						<option value="0">{l s='Apply to all combinations'}</option>
					{foreach from=$combinations item='combination'}
						<option value="{$combination.id_product_attribute}">{$combination.attributes}</option>
					{/foreach}
					</select>
				</div>
			</div>
			{/if}

			<div class="form-group">
				<label class="control-label col-lg-2" for="sp_from">{l s='Available'}</label>
				<div class="col-lg-9">
					<div class="row">
						<div class="col-lg-4">
							<div class="input-group">
								<span class="input-group-addon">{l s='from'}</span>
								<input class="datepicker" type="text" name="sp_from" value="" style="text-align: center" id="sp_from" />
								<span class="input-group-addon"><i class="icon-calendar-empty"></i></span>
							</div>
						</div>
						<div class="col-lg-4">
							<div class="input-group">
								<span class="input-group-addon">{l s='to'}</span>
								<input class="datepicker" type="text" name="sp_to" value="" style="text-align: center" id="sp_to" />
								<span class="input-group-addon"><i class="icon-calendar-empty"></i></span>
							</div>
						</div>
					</div>
				</div>
			</div>

			<div class="form-group">
				<label class="control-label col-lg-2" for="sp_from_quantity">{l s='Starting at'}</label>
				<div class="input-group col-lg-4">
					<span class="input-group-addon">{l s='unit'}</span>
					<input type="text" name="sp_from_quantity" id="sp_from_quantity" value="1" />
				</div>
			</div>

			<div class="form-group">
				<label class="control-label col-lg-2" for="sp_price">{l s='Product price'}
					{if $country_display_tax_label}
						{l s='(tax excl.)'}
					{/if}
				</label>
				<div class="col-lg-9">
					<div class="row">
						<div class="input-group col-lg-4">
							<span class="input-group-addon">{$currency->prefix}{$currency->suffix}</span>
							<input type="text" disabled="disabled" name="sp_price" id="sp_price" value="{$product->price|string_format:'%.2f'}" />
						</div>
						<div class="col-lg-8">
							<p class="checkbox">
								<label for="leave_bprice">{l s='Leave base price:'}</label>
								<input id="leave_bprice" type="checkbox" value="1" checked="checked" name="leave_bprice" />
							</p>
						</div>
					</div>
				</div>
			</div>

			<div class="form-group">
				<label class="control-label col-lg-2" for="sp_reduction">{l s='Apply a discount of'}</label>
				<div class="col-lg-4">
					<div class="row">
						<div class="col-lg-6">
							<input type="text" name="sp_reduction" id="sp_reduction" value="0.00"/>
						</div>
						<div class="col-lg-6">
							<select name="sp_reduction_type" id="sp_reduction_type">
								<option selected="selected">-</option>
								<option value="amount">{l s='Currency Units'}</option>
								<option value="percentage">{l s='Percent'}</option>
							</select>
						</div>
					</div>
				</div>
				<p class="help-block">{l s='The discount is applied after the tax'}</p>
			</div>
		</div>
	</div>
	<script type="text/javascript">
		$(document).ready(function(){
			product_prices['0'] = $('#sp_current_ht_price').html();
			$('#id_product_attribute').change(function() {
				$('#sp_current_ht_price').html(product_prices[$('#id_product_attribute option:selected').val()]);
			});
			$('#leave_bprice').click(function() {
				if (this.checked)
					$('#sp_price').attr('disabled', 'disabled');
				else
					$('#sp_price').removeAttr('disabled');
			});
			$('.datepicker').datetimepicker({
				prevText: '',
				nextText: '',
				dateFormat: 'yy-mm-dd',
				// Define a custom regional settings in order to use PrestaShop translation tools
				currentText: '{l s='Now'}',
				closeText: '{l s='Done'}',
				ampm: false,
				amNames: ['AM', 'A'],
				pmNames: ['PM', 'P'],
				timeFormat: 'hh:mm:ss tt',
				timeSuffix: '',
				timeOnlyTitle: '{l s='Choose Time'}',
				timeText: '{l s='Time'}',
				hourText: '{l s='Hour'}',
				minuteText: '{l s='Minute'}',
			});
		});
	</script>

	<div class="table-responsive">
	<table id="specific_prices_list" class="table table-bordered">
		<thead>
			<tr>
				<th>{l s='Rule'}</th>
				<th>{l s='Combination'}</th>
				{if $multi_shop}<th>{l s='Shop'}</th>{/if}
				<th>{l s='Currency'}</th>
				<th>{l s='Country'}</th>
				<th>{l s='Group'}</th>
				<th>{l s='Customer'}</th>
				<th>{l s='Fixed price'}</th>
				<th>{l s='Impact'}</th>
				<th>{l s='Period'}</th>
				<th>{l s='From (quantity)'}</th>
				<th>{l s='Action'}</th>
			</tr>
		</thead>
		<tbody>
			{$specificPriceModificationForm}
				<script type="text/javascript">
					$(document).ready(function() {
						delete_price_rule = '{l s="Do you really want to remove this price rule?"}';
						calcPriceTI();
						unitPriceWithTax('unit');
						});
				</script>
			{/if}

Vous voyez à la ligne 145 (Faire CTRL + F et taper : Prix par Paquet), le code que j'ai inséré et j'ai modifié par rapport au tuto ceci :

TUTO :

<div class="form-group">
        <label class="control-label col-lg-3" for="pointsforts_{$id_lang}">
            {include file="controllers/products/multishop/checkbox.tpl" field="pointsforts" type="tinymce" multilang="true"}
            <span class="label-tooltip" data-toggle="tooltip"
                title="{l s='Appears in the body of the product page.'}">
                {l s='Strength'}
            </span>
        </label>
        <div class="col-lg-9">
            {include
                file="controllers/products/textarea_lang.tpl"
                languages=$languages input_name='pointsforts'
                class="autoload_rte"
                input_value=$product->pointsforts}
        </div>
    </div>

MON FICHIER :

	<div class="form-group">
			<label class="control-label col-lg-2" for="pointsforts_{$id_lang}">
				{include file="controllers/products/multishop/checkbox.tpl" field="pointsforts" type="tinymce" multilang="true"}
				<span class="label-tooltip" data-toggle="tooltip"
					title="{l s='Appears in the body of the product page.'}">
					{l s='Strength'}
				</span>
			</label>
			<div class="col-lg-9">
				<input maxlength="5" id="pointsforts" name="pointsforts" type="text"/>
			</div>
		</div>

J'ai uniquement modifier le <div class="col-lg-9">.

ÉTAPE 2 : J'ai bien créer le fichier Products.php
4de8efa78a039d0bacff2b9933c60026.png

À l'intérieur de ce fichier j'ai ceci :

<?php
class Product extends ProductCore
{
    public $pointsforts;
 
    public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
    {
      Product::$definition['fields']['pointsforts'] = array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isString');
      parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
    }
 
}
 ?>

Donc jusqu'à la normalement tout est bon.

Et enfin dans le fichier product.tpl j'ai rajouter ceci :

<p>{l s='Sold in packs of :'}{$product->pointsforts}</p>

Donc ceci est également bon vu qu'il s'affiche sur le site.

Donc ma question est :
Comment cela ce fait t-il que le texte ne reste pas afficher dans l'admin du site ?

Merci d'avance pour vos Réponses.

Cordialement.


PS : Ne faite pas attention à la présentation ainsi qu'au texte mélangé Anglais + Français car tout est en phase de test


Version Prestashop utilisé : 1.6.0.5

Edited by WebAlsaceInfo (see edit history)

Share this post


Link to post
Share on other sites

Il ne manquerait pas un paramètre value ?

<input maxlength="5" id="pointsforts" name="pointsforts" type="text" value="{$product->pointsforts}" />
  • Like 1

Share this post


Link to post
Share on other sites

C'est donc bon signe. Le champ est en multilangue. Il faudrait surement modifier ça (il change en fonction de la langue ?).

Product::$definition['fields']['pointsforts'] = array('type' => self::TYPE_HTML, 'lang' => false, 'validate' => 'isString');
  • Like 1

Share this post


Link to post
Share on other sites

Merci pour tes réponses rapide.

Bon nous sommes sur la bonne route.
Alors j'ai bien le text qui s'affiche dans l'Input, mais maintenant j'ai une erreur qui est la suivante :
2f10143089746cb8d651573854cd7480.png

Share this post


Link to post
Share on other sites

Vu qu'il ne s'agit plus d'un champ lié à la langue, il n'est pas associé à la table "product_lang" mais "product", simplement. Il faut donc altérer la structure de product pour correspondre, et ça devrait être bon. :)

  • Like 1

Share this post


Link to post
Share on other sites

donc la colonne dans la base de donnée que j'ai créer dans product_lang, je la supprime et je la met dans products tout simplement c'est bien ça ?

Share this post


Link to post
Share on other sites

Niquel c'est parfait :D T'es très bon :D Merci beaucoup mais la je me retrouve avec une petite bourde :o j'ai un input dans le product-list qui n'existe pas :o tu peut le voir directement sur grossiste-enfant.fr

  • Like 1

Share this post


Link to post
Share on other sites

C'est en effet pas très logique qu'il se retrouve là, lui. Très bizarre, en effet. Rien qui fait appel à prices.tpl ou autre à cet endroit dans le product-list ? :-/

Share this post


Link to post
Share on other sites

Théoriquement non voici le fichier Product-list

Voici le fichier

  {if isset($products)}
	{if $smarty.cookies.product_mode  =='list'}
	<ul id="product_list" class="list_view clear">
	{foreach from=$products item=product name=products}
		<li class="ajax_block_product {if $smarty.foreach.products.first}first_item{elseif $smarty.foreach.products.last}last_item{/if} {if $smarty.foreach.products.index % 2}alternate_item{else}item{/if} clearfix">
			<div class="row">
				<div class="left_block col-sm-4 col-md-4 col-sms-4 col-smb-12">
					<a class ="bigpic_{$product.id_product}_productlist product_image" href="{$product.link|escape:'htmlall':'UTF-8'}" class="product_img_link" title="{$product.name|escape:'htmlall':'UTF-8'}">
					<img id="bigpic" src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'pos_product')|escape:'html'}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" />
						
				</a>
					{if isset($comparator_max_item) && $comparator_max_item}
					<p class="compare">
						<input type="checkbox" class="comparator" id="comparator_item_{$product.id_product}" value="comparator_item_{$product.id_product}" {if isset($compareProducts) && in_array($product.id_product, $compareProducts)}checked="checked"{/if} autocomplete="off" title="{l s='Compare'}"/> 
						<label for="comparator_item_{$product.id_product}">{l s='Select to compare'}</label>
					</p>
				{/if}
				</div>
				<div class="center_block col-sm-8 col-md-8 col-sms-8 col-smb-12">					
					<h3 class="product-name">{if isset($product.pack_quantity) && $product.pack_quantity}{$product.pack_quantity|intval|cat:' x '}{/if}<a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.name|escape:'htmlall':'UTF-8'}">{$product.name|truncate:35:'...'|escape:'htmlall':'UTF-8'}</a></h3>
					<div class="price-box">
						{if isset($product.show_price) && $product.show_price && !isset($restricted_country_mode)}<span class="price" style="display: inline;">{if !$priceDisplay}{convertPrice price=$product.price}{else}{convertPrice price=$product.price_tax_exc}{/if}</span><br />{/if}
						{if isset($product.available_for_order) && $product.available_for_order && !isset($restricted_country_mode)}<span class="availability">{if ($product.allow_oosp || $product.quantity > 0)}{l s='Available'}{elseif (isset($product.quantity_all_versions) && $product.quantity_all_versions > 0)}{l s='Product available with different options'}{else}{l s='Out of stock'}{/if}</span>{/if}
					</div>
					<p class="product_desc"><a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.description_short|strip_tags:'UTF-8'|truncate:360:'...'}" >{$product.description_short|strip_tags:'UTF-8'|truncate:360:'...'}</a></p>
				
					{if isset($product.on_sale) && $product.on_sale && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE}<span class="on_sale">{l s='On sale!'}</span>
					{elseif isset($product.reduction) && $product.reduction && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE}<span class="discount">{l s='Reduced price!'}</span>{/if}
					{if (!$PS_CATALOG_MODE AND ((isset($product.show_price) && $product.show_price) || (isset($product.available_for_order) && $product.available_for_order)))}

					{/if}
					<div class="actions">
						{if ($product.id_product_attribute == 0 || (isset($add_prod_display) && ($add_prod_display == 1))) && $product.available_for_order && !isset($restricted_country_mode) && $product.minimal_quantity <= 1 && $product.customizable != 2 && !$PS_CATALOG_MODE}
                                            {if ($product.allow_oosp || $product.quantity > 0)}
                                                    {if isset($static_token)}
                                                            <a class="button ajax_add_to_cart_button exclusive" rel="ajax_id_product_{$product.id_product|intval}" href="{$link->getPageLink('cart',false, NULL, "add=1&id_product={$product.id_product|intval}&token={$static_token}", false)|escape:'html'}" title="{l s='Add to cart'}"><span>{l s='Add to cart'}</span></a>
                                                    {else}
                                                            <a class="button ajax_add_to_cart_button exclusive" rel="ajax_id_product_{$product.id_product|intval}" href="{$link->getPageLink('cart',false, NULL, "add=1&id_product={$product.id_product|intval}", false)|escape:'html'}" title="{l s='Add to cart'}"><span>{l s='Add to cart'}</span></a>
                                                    {/if}						
                                            {else}
                                                    <span class="exclusive"><span></span>{l s='Add to cart'}</span>
                                            {/if}
						{/if}
						<ul class="add-to-links">
						<li><a class="lnk_more" href="{$product.link|escape:'html'}" title="{l s='View Detail'}">{l s='View Detail'}</a></li>	
							<li>
	<a onclick="WishlistCart('wishlist_block_list', 'add', '{$product.id_product|intval}', $('#idCombination').val(), 1,'productlist'); return false;" class="add-wishlist" id="wishlist_button" href="#">{l s='Add to Wishlist'}</a>
	</li> 
						</ul>
					</div>
				</div>
			</div>
		</li>
	{/foreach}
	</ul>
        {/if}
      {if $smarty.cookies.product_mode  =='grid' ||  $smarty.cookies.product_mode  ==''}
            <div id="product_list" class="grid_view clear">
		<ul class="product-grid row">
            {foreach from=$products item=product name=products}
                    <li class="ajax_block_product col-sm-6 col-md-4 col-sms-6 col-smb-12 {if $smarty.foreach.products.first}first_item{elseif $smarty.foreach.products.last}last_item{/if} {if $smarty.foreach.products.index % 2}alternate_item{else}item{/if} clearfix">
			<div class="item-inner">
				<a class ="bigpic_{$product.id_product}_productgrid product_image" href="{$product.link|escape:'html'}" title="{$product.name|escape:html:'UTF-8'}" class="product_image"><img id="bigpic" src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'pos_product')|escape:'html'}" alt="{$product.name|escape:html:'UTF-8'}" />
				</a>
				{if isset($comparator_max_item) && $comparator_max_item}
					<p class="compare">
						<input type="checkbox" class="comparator" id="comparator_item_{$product.id_product}" value="comparator_item_{$product.id_product}" {if isset($compareProducts) && in_array($product.id_product, $compareProducts)}checked="checked"{/if} autocomplete="off" title="{l s='Compare'}"/> 
						<label for="comparator_item_{$product.id_product}">{l s='Select to compare'}</label>
					</p>
				{/if}
				<h5 class="product-name"><a  href="{$product.link|escape:'html'}" title="{$product.name|truncate:50:'...'|escape:'htmlall':'UTF-8'}">{$product.name|truncate:35:'...'|escape:'htmlall':'UTF-8'}</a></h5>
				{if $product.show_price AND !isset($restricted_country_mode) AND !$PS_CATALOG_MODE}<div class="price-box"><span class="price">{if !$priceDisplay}{convertPrice price=$product.price}{else}{convertPrice price=$product.price_tax_exc}{/if}</span></div>{else}<div style="height:21px;"></div>{/if}				
				
				<div class="actions">
					{if ($product.id_product_attribute == 0 || (isset($add_prod_display) && ($add_prod_display == 1))) && $product.available_for_order && !isset($restricted_country_mode) && $product.minimal_quantity <= 1 && $product.customizable != 2 && !$PS_CATALOG_MODE}
						{if ($product.allow_oosp || $product.quantity > 0)}
							{if isset($static_token)}
								<a class="button ajax_add_to_cart_button exclusive" rel="ajax_id_product_{$product.id_product|intval}" href="{$link->getPageLink('cart',false, NULL, "add=1&id_product={$product.id_product|intval}&token={$static_token}", false)|escape:'html'}" title="{l s='Add to cart'}"><span>{l s='Add to cart'}</span></a>
							{else}
							    <a class="button ajax_add_to_cart_button exclusive" rel="ajax_id_product_{$product.id_product|intval}" href="{$link->getPageLink('cart',false, NULL, "add=1&id_product={$product.id_product|intval}", false)|escape:'html'}" title="{l s='Add to cart'}"><span>{l s='Add to cart'}</span></a>
							{/if}						
						{else}
						    <span class="exclusive"><span></span>{l s='Add to cart'}</span>
						{/if}
					{/if}
					<ul class="add-to-links">
						<li><a onclick="WishlistCart('wishlist_block_list', 'add', '{$product.id_product|intval}', $('#idCombination').val(), 1,'productgrid'); return false;" class="add-wishlist" id="wishlist_button" title="{l s='Add to Wishlist'}" href="#">{l s='Add to Wishlist'}</a></li>   
						<li><a class="lnk_more" href="{$product.link|escape:'html'}" title="{l s='View Detail'}">{l s='View Detail'}</a></li>			
					</ul>
				</div>
			</div>
                    </li>
            {/foreach}
	    </ul>
            </div>
        {/if}
{/if}

Share this post


Link to post
Share on other sites

Bête question, mais c'est bien le bon ? Car dans la source, il y a un tas de trucs qui ne se retrouvent pas ici. Et je suis pas sur que c'est logique ? C'est bien celui du thème utilisé et à jour, là ?!

Share this post


Link to post
Share on other sites

Hello Jo, désolé pour la réponse tardive,

Alors oui c'est bien le fichier de base qui se trouve dans le thème vu qu'il s'agit du thème par défaut !

 

Je trouve également cela bizarre mais j'ai beau recherche partout je ne vois pas d'où le problème peut venir.

Share this post


Link to post
Share on other sites

Bon problème résolu il y avait bien un Input dans le fichier Product-list.tpl je ne comprend pas que je l'avais pas vu plutôt -_-" enfin bon j'ai bien réglé ce problème :D

 

Avec ma femme , nous avons également trouver une solution concernant cette action je m'explique :

 

J'ai donc suivi le tuto afin de pouvoir afficher le nombre de quantité contenu dans le paquet, tout fonctionnait correctement (merci encore à J.Danse) et donc dans le fichier product.tpl j'ai rajouter ceci :

<span class="vppd">{l s='Sold in packs of :'}{$product->pointsforts|default:'NC'}</span>

Également dans l'override j'ai dû créer un fichier Product.php avec ceci dedans

<?php
class Product extends ProductCore
{
    public $pointsforts;
    public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
    {
      Product::$definition['fields']['pointsforts'] = array('type' => self::TYPE_HTML, 'lang' => false, 'validate' => 'isString');
      parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
    }
}
 ?>

Tout fonctionne correctement sur la fiche produit, mais également on voulais le faire apparaitre dans le Product-list.tpl, ceci étant logiquement compliquer :/ Sauf que ma femme est très forte hihihihi elle à trouver tout simplement comment faire pour l'afficher également dans le product-list, alors voici ce que nous avons fait :

<span class="vppd2">{l s='Sold in packs of :'}{$product.pointsforts|default:'NC'}</span>

Alors je vous explique tout simplement la manip:

 

Dans le product.tpl, nous avons mis la variable : {$product->pointsforts|default:'NC'}

Et pour qu'elle s'affiche dans le product-list, nous avons mis ceci : {$product.pointsforts|default:'NC'}

Tout simplement les variable pour le product.tpl et le product-list.tpl sont différentes mais pas de grand chose lool xD Tout simplement si vous regardez la variable, nous avons mis un {$product->pointsforts|default:'NC'} et dans le product-list  {$product.pointsforts|default:'NC'}

 

Donc en résumé pour qu'un variable que vous avez créer (je pense pour les autre c'est pareil) il faut remplacer le "->" par un "."

 

Voilà nous espérons que cette astuce servira à d'autre personnes dans le besoin ;)

 

Sujet Clos encore une fois merci à Jo ;)

Edited by WebAlsaceInfo (see edit history)
  • Like 1

Share this post


Link to post
Share on other sites

Bon problème résolu il y avait bien un Input dans le fichier Product-list.tpl je ne comprend pas que je l'avais pas vu plutôt -_-" enfin bon j'ai bien réglé ce problème :D

 

Avec ma femme , nous avons également trouver une solution concernant cette action je m'explique :

 

J'ai donc suivi le tuto afin de pouvoir afficher le nombre de quantité contenu dans le paquet, tout fonctionnait correctement (merci encore à J.Danse) et donc dans le fichier product.tpl j'ai rajouter ceci :

<span class="vppd">{l s='Sold in packs of :'}{$product->pointsforts|default:'NC'}</span>

Également dans l'override j'ai dû créer un fichier Product.php avec ceci dedans

<?php
class Product extends ProductCore
{
    public $pointsforts;
    public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
    {
      Product::$definition['fields']['pointsforts'] = array('type' => self::TYPE_HTML, 'lang' => false, 'validate' => 'isString');
      parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
    }
}
 ?>

Tout fonctionne correctement sur la fiche produit, mais également on voulais le faire apparaitre dans le Product-list.tpl, ceci étant logiquement compliquer :/ Sauf que ma femme est très forte hihihihi elle à trouver tout simplement comment faire pour l'afficher également dans le product-list, alors voici ce que nous avons fait :

<span class="vppd2">{l s='Sold in packs of :'}{$product.pointsforts|default:'NC'}</span>

Alors je vous explique tout simplement la manip:

 

Dans le product.tpl, nous avons mis la variable : {$product->pointsforts|default:'NC'}

Et pour qu'elle s'affiche dans le product-list, nous avons mis ceci : {$product.pointsforts|default:'NC'}

Tout simplement les variable pour le product.tpl et le product-list.tpl sont différentes mais pas de grand chose lool xD Tout simplement si vous regardez la variable, nous avons mis un {$product->pointsforts|default:'NC'} et dans le product-list  {$product.pointsforts|default:'NC'}

 

Donc en résumé pour qu'un variable que vous avez créer (je pense pour les autre c'est pareil) il faut remplacer le "->" par un "."

 

Voilà nous espérons que cette astuce servira à d'autre personnes dans le besoin ;)

 

Sujet Clos encore une fois merci à Jo ;)

Bonjour et merci pour ce tuto. Mais j'ai un petit probléme. 

 

J'ai déja crée  dans l'override  un fichier Product.php avec ceci dedans:

<?php

 
class Product extends ProductCore
{
 
    public $rrp;
 
    public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
    {
        self::$definition['fields']['rrp'] = array('type' => self::TYPE_FLOAT, 'validate' => 'isCleanHtml');
        parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
    }
 
}
 
donc si je fais cela :
 
<?php
 
class Product extends ProductCore
{
 
    public $rrp;
 
    public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
    {
        self::$definition['fields']['rrp'] = array('type' => self::TYPE_FLOAT, 'validate' => 'isCleanHtml');
        parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
    }
 
}
 
 
class Product extends ProductCore
{
    public $pointsforts;
 
    public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
    {
      Product::$definition['fields']['pointsforts'] = array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isString');
      parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
    }
 
}
 ?>
 
J'ai une page blanche 
Pouvez vous m'aider .Merci

Share this post


Link to post
Share on other sites

Est ce que la variable "pointsforts" à été créer dans la Base de donnée ?

oui mais j'ai déjà crée un fichier "product php" pour une colonne nommée "rrp"

alors comment utiliser le même fichier, ou le rajouter?Je pense que c'est la mise en forme du fichier ,qui ne va pas.Merci

Share this post


Link to post
Share on other sites

As tu essayer, de mettre les anciennes function dans le Product.php de base directement ? dans le dossier Classes ? et d'overrider uniquement la function Pointsforts ?

Share this post


Link to post
Share on other sites

Essaie en supprimant la function public $rrp; et laisse juste la function $pointsforts

si ça fonctionne il doit y avoir un problème dans ta function soit l'une soit l'autre !

Share this post


Link to post
Share on other sites

Essaie en supprimant la function public $rrp; et laisse juste la function $pointsforts

si ça fonctionne il doit y avoir un problème dans ta function soit l'une soit l'autre !

Je suis d'accord mais comment utiliser les deux fonctions sur le même fichier?

Share this post


Link to post
Share on other sites

Le mieux c'est que tu en mette une des deux dans le fichier Product.php du classes directement sans passer par le Override !
Et n'oublie pas de supprimer le fichier cache_index.php dans le dossier cache (il se régénérera automatiquement)

Share this post


Link to post
Share on other sites

Le mieux c'est que tu en mette une des deux dans le fichier Product.php du classes directement sans passer par le Override !

Et n'oublie pas de supprimer le fichier cache_index.php dans le dossier cache (il se régénérera automatiquement)

J'ai supprimé le fichier "rrp" et j'ai gardé le tien , par contre je n'ai rien dans le back office de plus .J'ai bien télécharger :

<div id="product-informations" class="panel product-tab">
<input type="hidden" name="submitted_tabs[]" value="Informations" />
<h3 class="tab"> <i class="icon-info"></i> {l s='Information'}</h3>
<script type="text/javascript">
{if isset($ps_force_friendly_product) && $ps_force_friendly_product}
var ps_force_friendly_product = 1;
{else}
var ps_force_friendly_product = 0;
{/if}
{if isset($PS_ALLOW_ACCENTED_CHARS_URL) && $PS_ALLOW_ACCENTED_CHARS_URL}
var PS_ALLOW_ACCENTED_CHARS_URL = 1;
{else}
var PS_ALLOW_ACCENTED_CHARS_URL = 0;
{/if}
{$combinationImagesJs}
{if $check_product_association_ajax}
var search_term = '';
$('document').ready( function() {
$(".check_product_name")
.autocomplete(
'{$link->getAdminLink('AdminProducts', true)|addslashes}', {
minChars: 3,
max: 10,
width: $(".check_product_name").width(),
selectFirst: false,
scroll: false,
dataType: "json",
formatItem: function(data, i, max, value, term) {
search_term = term;
// adding the little
if ($('.ac_results').find('.separation').length == 0)
$('.ac_results').css('background-color', '#EFEFEF')
.prepend('<div style="color:#585A69; padding:2px 5px">{l s='Use a product from the list'}<div class="separation"></div></div>');
return value;
},
parse: function(data) {
var mytab = new Array();
for (var i = 0; i < data.length; i++)
mytab[mytab.length] = { data: data, value: data.name };
return mytab;
},
extraParams: {
ajax: 1,
action: 'checkProductName',
id_lang: {$id_lang}
}
}
)
.result(function(event, data, formatted) {
// keep the searched term in the input
$('#name_{$id_lang}').val(search_term);
jConfirm('{l s='Do you want to use this product?'} <strong>'+data.name+'</strong>', '{l s='Confirmation'}', function(confirm){
if (confirm == true)
document.location.href = '{$link->getAdminLink('AdminProducts', true)}&updateproduct&id_product='+data.id_product;
else
return false;
});
});
});
{/if}
</script>
 
{if isset($display_common_field) && $display_common_field}
<div class="alert alert-warning" style="display: block">{l s='Warning, if you change the value of fields with an orange bullet %s, the value will be changed for all other shops for this product' sprintf=$bullet_common_field}</div>
{/if}
 
{include file="controllers/products/multishop/check_fields.tpl" product_tab="Informations"}
 
<div id="warn_virtual_combinations" class="alert alert-warning" style="display:none">{l s='You cannot use combinations with a virtual product.'}</div>
 
<div class="form-group">
<label class="control-label col-lg-3" for="simple_product">
{$bullet_common_field} {l s='Type'}
</label>
<div class="col-lg-9">
<div class="radio">
<label for="simple_product">
<input type="radio" name="type_product" id="simple_product" value="{Product::PTYPE_SIMPLE}" {if $product_type == Product::PTYPE_SIMPLE}checked="checked"{/if} />
{l s='Standard product'}
</label>
</div>
<div class="radio">
<label for="pack_product">
<input type="radio" name="type_product" {if $is_in_pack}disabled="disabled"{/if} id="pack_product" value="{Product::PTYPE_PACK}" {if $product_type == Product::PTYPE_PACK}checked="checked"{/if} />
{l s='Pack of existing products'}
</label>
</div>
<div class="radio">
<label for="virtual_product">
<input type="radio" name="type_product" id="virtual_product" {if $is_in_pack}disabled="disabled"{/if} value="{Product::PTYPE_VIRTUAL}" {if $product_type == Product::PTYPE_VIRTUAL}checked="checked"{/if} />
{l s='Virtual product (services, booking, downloadable products, etc.)'}
</label>
</div>
</div>
</div>
 
<hr/>
 
<div class="form-group">
<label class="control-label col-lg-3 required" for="name_{$id_lang}">
<span class="label-tooltip" data-toggle="tooltip"
title="{l s='The public name for this product.'} {l s='Invalid characters:'} <>;=#{}">
{l s='Name'}
</span>
</label>
<div class="col-lg-5">
{include file="controllers/products/input_text_lang.tpl"
languages=$languages
input_class="{$class_input_ajax}{if !$product->id || Configuration::get('PS_FORCE_FRIENDLY_PRODUCT')}copy2friendlyUrl{/if} updateCurrentText"
input_value=$product->name
input_name="name"
}
</div>
</div>
 
<div class="form-group">
<label class="control-label col-lg-3" for="reference">
<span class="label-tooltip" data-toggle="tooltip"
title="{l s='Your internal reference code for this product.'} {l s='Allowed special characters:'} .-_#\">
{$bullet_common_field} {l s='Reference code'}
</span>
</label>
<div class="col-lg-5">
<input type="text" id="reference" name="reference" value="{$product->reference|htmlentitiesUTF8}" />
</div>
</div>
 
<div class="form-group">
<label class="control-label col-lg-3" for="ean13">
<span class="label-tooltip" data-toggle="tooltip"
title="{l s='This type of product code that is specific to Europe and Japan, but is widely used internationally. It is a superset of the UPC code: all products marked with an EAN will be accepted in North America.'}">
{$bullet_common_field} {l s='EAN-13 or JAN barcode'}
</span>
</label>
<div class="col-lg-3">
<input maxlength="13" type="text" id="ean13" name="ean13" value="{$product->ean13|htmlentitiesUTF8}" />
</div>
</div>
 
<div class="form-group">
<label class="control-label col-lg-3" for="upc">
<span class="label-tooltip" data-toggle="tooltip"
title="{l s='This type of product code is widely used in the United States, Canada, the United Kingdom, Australia, New Zealand and in other countries.'}">
{$bullet_common_field} {l s='UPC barcode'}
</span>
</label>
<div class="col-lg-3">
<input maxlength="12" type="text" id="upc" name="upc" value="{$product->upc|escape:html:'UTF-8'}" />
</div>
</div>
 
<hr/>
 
{* status informations *}
<div class="form-group">
<label class="control-label col-lg-3">
{include file="controllers/products/multishop/checkbox.tpl" field="active" type="radio" onclick=""}
{l s='Enabled'}
</label>
<div class="col-lg-9">
<span class="switch prestashop-switch fixed-width-lg">
<input onclick="toggleDraftWarning(false);showOptions(true);showRedirectProductOptions(false);" type="radio" name="active" id="active_on" value="1" {if $product->active || !$product->isAssociatedToShop()}checked="checked" {/if} />
<label for="active_on" class="radioCheck">
{l s='Yes'}
</label>
<input onclick="toggleDraftWarning(true);showOptions(false);showRedirectProductOptions(true);"  type="radio" name="active" id="active_off" value="0" {if !$product->active && $product->isAssociatedToShop()}checked="checked"{/if} />
<label for="active_off" class="radioCheck">
{l s='No'}
</label>
<a class="slide-button btn"></a>
</span>
</div>
</div>
 
<div class="form-group redirect_product_options" style="display:none">
<label class="control-label col-lg-3" for="redirect_type">
{include file="controllers/products/multishop/checkbox.tpl" field="redirect_type" type="radio" onclick=""}
{l s='Redirect when disabled'}
</label>
<div class="col-lg-5">
<select name="redirect_type" id="redirect_type">
<option value="404" {if $product->redirect_type == '404'} selected="selected" {/if}>{l s='No redirect (404)'}</option>
<option value="301" {if $product->redirect_type == '301'} selected="selected" {/if}>{l s='Redirected permanently (301)'}</option>
<option value="302" {if $product->redirect_type == '302'} selected="selected" {/if}>{l s='Redirected temporarily (302)'}</option>
</select>
</div>
</div>
<div class="form-group redirect_product_options" style="display:none">
<div class="col-lg-9 col-lg-offset-3">
<div class="alert alert-info">
{l s='404 Not Found = Do not redirect and display a 404 page.'}<br/>
{l s='301 Moved Permanently = Permanently display another product instead.'}<br/>
{l s='302 Moved Temporarily = Temporarily display another product instead.'}
</div>
</div>
</div>
 
<div class="form-group redirect_product_options redirect_product_options_product_choise" style="display:none">
<label class="control-label col-lg-3" for="related_product_autocomplete_input">
{include file="controllers/products/multishop/checkbox.tpl" field="id_product_redirected" type="radio" onclick=""}
{l s='Related product:'}
</label>
<div class="col-lg-7">
<input type="hidden" value="" name="id_product_redirected" />
 
<div class="input-group">
<input type="text" id="related_product_autocomplete_input" autocomplete="off" class="ac_input" />
<span class="input-group-addon"><i class="icon-search"></i></span>
</div>
 
<div class="form-control-static">
<span id="related_product_name"><i class="icon-warning-sign"></i> {l s='No related product.'}</span>
<span id="related_product_remove" style="display:none">
<a class="btn btn-default" href="#" onclick="removeRelatedProduct(); return false" id="related_product_remove_link">
<i class="icon-remove text-danger"></i>
</a>
</span>
</div>
 
</div>
<script>
var no_related_product = '{l s='No related product'}';
var id_product_redirected = {$product->id_product_redirected|intval};
var product_name_redirected = '{$product_name_redirected|escape:html:'UTF-8'}';
</script>
</div>
 
<div class="form-group">
<label class="control-label col-lg-3" for="visibility">
{include file="controllers/products/multishop/checkbox.tpl" field="visibility" type="default"}
{l s='Visibility'}
</label>
<div class="col-lg-3">
<select name="visibility" id="visibility">
<option value="both" {if $product->visibility == 'both'}selected="selected"{/if} >{l s='Everywhere'}</option>
<option value="catalog" {if $product->visibility == 'catalog'}selected="selected"{/if} >{l s='Catalog only'}</option>
<option value="search" {if $product->visibility == 'search'}selected="selected"{/if} >{l s='Search only'}</option>
<option value="none" {if $product->visibility == 'none'}selected="selected"{/if}>{l s='Nowhere'}</option>
</select>
</div>
</div>
 
<div id="product_options" class="form-group">
<div class="col-lg-12">
<div class="form-group">
<label class="control-label col-lg-3" for="available_for_order">
{if isset($display_multishop_checkboxes) && $display_multishop_checkboxes}
{include file="controllers/products/multishop/checkbox.tpl" only_checkbox="true" field="available_for_order" type="default"}
{include file="controllers/products/multishop/checkbox.tpl" only_checkbox="true" field="show_price" type="show_price"}
{include file="controllers/products/multishop/checkbox.tpl" only_checkbox="true" field="online_only" type="default"}
{/if}
{l s='Options'}
</label>
<div class="col-lg-5">
<p class="checkbox">
<input type="checkbox" name="available_for_order" id="available_for_order" value="1" {if $product->available_for_order}checked="checked"{/if}  />
<label for="available_for_order">{l s='Available for order'}</label>
</p>
<p class="checkbox">
<input type="checkbox" name="show_price" id="show_price" value="1" {if $product->show_price}checked="checked"{/if} {if $product->available_for_order}disabled="disabled"{/if}/>
<label for="show_price">{l s='Show price'}</label>
</p>
<p class="checkbox">
<input type="checkbox" name="online_only" id="online_only" value="1" {if $product->online_only}checked="checked"{/if} />
<label for="online_only">{l s='Online only (not sold in your retail store)'}</label>
</p>
</div>
</div>
 
<div class="form-group">
<label class="control-label col-lg-3" for="condition">
{include file="controllers/products/multishop/checkbox.tpl" field="condition" type="default"}
{l s='Condition'}
</label>
<div class="col-lg-3">
<select name="condition" id="condition">
<option value="new" {if $product->condition == 'new'}selected="selected"{/if} >{l s='New'}</option>
<option value="used" {if $product->condition == 'used'}selected="selected"{/if} >{l s='Used'}</option>
<option value="refurbished" {if $product->condition == 'refurbished'}selected="selected"{/if}>{l s='Refurbished'}</option>
</select>
</div>
</div>
</div>
</div>
 
<hr/>
 
<div class="form-group">
<label class="control-label col-lg-3" for="description_short_{$id_lang}">
{include file="controllers/products/multishop/checkbox.tpl" field="description_short" type="tinymce" multilang="true"}
<span class="label-tooltip" data-toggle="tooltip"
title="{l s='Appears in the product list(s), and at the top of the product page.'}">
{l s='Short description'}
</span>
</label>
<div class="col-lg-9">
{include
file="controllers/products/textarea_lang.tpl"
languages=$languages
input_name='description_short'
class="autoload_rte"
input_value=$product->description_short
max=$PS_PRODUCT_SHORT_DESC_LIMIT}
</div>
</div>
 
<div class="form-group">
 <div class="form-group">
            <label class="control-label col-lg-2" for="pointsforts_{$id_lang}">
                {include file="controllers/products/multishop/checkbox.tpl" field="pointsforts" type="tinymce" multilang="true"}
                <span class="label-tooltip" data-toggle="tooltip"
                    title="{l s='Appears in the body of the product page.'}">
                    {l s='Strength'}
                </span>
            </label>
            <div class="col-lg-9">
                <input maxlength="5" id="pointsforts" name="pointsforts" type="text"/>
            </div>
        </div>
<label class="control-label col-lg-3" for="description_{$id_lang}">
{include file="controllers/products/multishop/checkbox.tpl" field="description" type="tinymce" multilang="true"}
<span class="label-tooltip" data-toggle="tooltip"
title="{l s='Appears in the body of the product page.'}">
{l s='Description'}
</span>
</label>
<div class="col-lg-9">
{include
file="controllers/products/textarea_lang.tpl"
languages=$languages input_name='description'
class="autoload_rte"
input_value=$product->description}
</div>
</div>
 
{if $images}
<div class="form-group">
<div class="col-lg-9 col-lg-offset-3">
<div class="alert alert-info">
{l s='Would you like to add an image in your description?'}
<a class="addImageDescription" href="javascript:void(0);">{l s='Click here'}</a>.
</div>
</div>
</div>
 
<div id="createImageDescription" class="panel" style="display:none">
<div class="form-group">
<label class="control-label col-lg-3" for="smallImage_0">{l s='Select your image'}</label>
<div class="col-lg-9">
<ul class="list-inline">
{foreach from=$images item=image key=key}
<li>
<input type="radio" name="smallImage" id="smallImage_{$key}" value="{$image.id_image}" {if $key == 0}checked="checked"{/if} >
<label for="smallImage_{$key}" >
<img src="{$image.src}" alt="{$image.legend}" />
</label>
</li>
{/foreach}
</ul>
</div>
</div>
<div class="form-group">
<label class="control-label col-lg-3" for="leftRight_1">{l s='Position'}</label>
<div class="col-lg-5">
<p class="checkbox">
<input type="radio" name="leftRight" id="leftRight_1" value="left" checked>
<label for="leftRight_1" >{l s='left'}</label>
</p>
<p class="checkbox">
<input type="radio" name="leftRight" id="leftRight_2" value="right">
<label for="leftRight_2" >{l s='right'}</label>
</p>
</div>
</div>
<div class="form-group">
<label class="control-label col-lg-3" for="imageTypes_0">{l s='Select the type of picture'}</label>
<div class="col-lg-5">
{foreach from=$imagesTypes key=key item=type}
<p class="checkbox">
<input type="radio" name="imageTypes" id="imageTypes_{$key}" value="{$type.name}" {if $key == 0}checked="checked"{/if}>
<label for="imageTypes_{$key}" >
{$type.name} <span>{l s='%dpx by %dpx' sprintf=[$type.width, $type.height]}</span>
</label>
</p>
{/foreach}
</div>
</div>
<div class="form-group">
<label class="control-label col-lg-3" for="resultImage">
<span class="label-tooltip" data-toggle="tooltip"
title="{l s='The tag to copy/paste into the description.'}">
{l s='Image tag to insert'}
</span>
</label>
<div class="col-lg-4">
<input type="text" id="resultImage" name="resultImage" />
</div>
<p class="help-block"></p>
</div>
</div>
{/if}
 
<div class="form-group">
<label class="control-label col-lg-3" for="tags_{$id_lang}">
<span class="label-tooltip" data-toggle="tooltip"
title="{l s='Each tag has to be followed by a comma. The following characters are forbidden: %s' sprintf='!<;>;?=+#"°{}_$%'}">
{l s='Tags:'}
</span>
</label>
<div class="col-lg-9">
{if $languages|count > 1}
<div class="row">
{/if}
{foreach from=$languages item=language}
{literal}
<script type="text/javascript">
$().ready(function () {
var input_id = '{/literal}tags_{$language.id_lang}{literal}';
$('#'+input_id).tagify({delimiters: [13,44], addTagPrompt: '{/literal}{l s='Add tag' js=1}{literal}'});
$({/literal}'#{$table}{literal}_form').submit( function() {
$(this).find('#'+input_id).val($('#'+input_id).tagify('serialize'));
});
});
</script>
{/literal}
{if $languages|count > 1}
<div class="translatable-field lang-{$language.id_lang}">
<div class="col-lg-9">
{/if}
<input type="text" id="tags_{$language.id_lang}" class="tagify updateCurrentText" name="tags_{$language.id_lang}" value="{$product->getTags($language.id_lang, true)|htmlentitiesUTF8}" />
{if $languages|count > 1}
</div>
<div class="col-lg-2">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
{$language.iso_code}
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
{foreach from=$languages item=language}
<li>
<a href="javascript:hideOtherLanguage({$language.id_lang});">{$language.name}</a>
</li>
{/foreach}
</ul>
</div>
</div>
{/if}
{/foreach}
{if $languages|count > 1}
</div>
{/if}
</div>
</div>
<div class="panel-footer">
<a href="{$link->getAdminLink('AdminProducts')}" class="btn btn-default"><i class="process-icon-cancel"></i> {l s='Cancel'}</a>
<button type="submit" name="submitAddproduct" class="btn btn-default pull-right"><i class="process-icon-save"></i> {l s='Save'}</button>
<button type="submit" name="submitAddproductAndStay" class="btn btn-default pull-right"><i class="process-icon-save"></i> {l s='Save and stay'}</button>
</div>
</div>
<script type="text/javascript">
hideOtherLanguage({$default_form_language});
var missing_product_name = '{l s='Please fill product name input field' js=1}';
</script>
 
une idée?

Share this post


Link to post
Share on other sites

Est ce que tu as un Skype ? Ajoute moi cela sera un peut plus facile tout de même :

WebalsaceInfo

 

Ensuite si tu as bien ajouter le fichier dans la bonne partie sur les TPL Admin, si tu l'as mis comme chez moi dans le price.tpl, il faut que tu aille dans une fiche produit( admin) et que tu clique sur prix !

Share this post


Link to post
Share on other sites

Est ce que tu as un Skype ? Ajoute moi cela sera un peut plus facile tout de même :

WebalsaceInfo

 

Ensuite si tu as bien ajouter le fichier dans la bonne partie sur les TPL Admin, si tu l'as mis comme chez moi dans le price.tpl, il faut que tu aille dans une fiche produit( admin) et que tu clique sur prix !

Mais pour ajouter le champ dans le back office , on ne parle pas de fichier "price tpl"??

Share this post


Link to post
Share on other sites

oui mais j'ai déjà crée un fichier "product php" pour une colonne nommée "rrp"

alors comment utiliser le même fichier, ou le rajouter?Je pense que c'est la mise en forme du fichier ,qui ne va pas.Merci

Comme sur la photo dans ce tuto.Par contre j'ai remarqué que ma colonne "pointsforts" été vide.Et sur la photo il y à 10??? est ce normale qu'elle soit vide?

Share this post


Link to post
Share on other sites

Je vois pas de quel photo tu parle lool xD Si c'est vide, il faut que tu rajoute une valeur à l'intérieur ;) si tu ne rajoute rien ça ne marche pas ;)

 

Après si tu as rajouter une valeur et que ça ne s'affiche pas il faut suivre ce que J.Danse disait c'est à dire :

à partir d'ici :

http://www.prestashop.com/forums/topic/343411-r%C3%A9solu-ajouter-un-champs-dans-ladministration-presta-16/?do=findComment&comment=1732216

Share this post


Link to post
Share on other sites

Je vois pas de quel photo tu parle lool xD Si c'est vide, il faut que tu rajoute une valeur à l'intérieur ;) si tu ne rajoute rien ça ne marche pas ;)

 

Après si tu as rajouter une valeur et que ça ne s'affiche pas il faut suivre ce que J.Danse disait c'est à dire :

à partir d'ici :

http://www.prestashop.com/forums/topic/343411-r%C3%A9solu-ajouter-un-champs-dans-ladministration-presta-16/?do=findComment&comment=1732216

erreur de ma part j'ai oublié de modifier le fichier price.tpl.Maintenent  j'ai dans back office "stength" Par contre je ne peux écire que 4 caractères et quand j'enregistre plus rien n'est affiché dans la case. J'avance doucement

Share this post


Link to post
Share on other sites

Il doit y avoir une ligne mal écrite, essaye de repartir avec les explication de J.Danse dans le lien que je t'es donner précédemment ;)

Share this post


Link to post
Share on other sites

Il doit y avoir une ligne mal écrite, essaye de repartir avec les explication de J.Danse dans le lien que je t'es donner précédemment ;)

Tu as écrit:donc la colonne dans la base de donnée que j'ai créer dans product_lang, je la supprime et je la met dans products tout simplement c'est bien ça ?

Je ne comprends pas est ce la l'erreur?

Share this post


Link to post
Share on other sites

Effectivement, j'ai mis pointsforts dans la table ps_product

Donc je supprime l'autre?

Share this post


Link to post
Share on other sites

Oui supprime dans le product_lang et ajoute le dans le ps_product uniquement ;)

j'ai fais et j'ai cette erreur :jUne erreur s'est produite pendant la mise à jour de l'objet. product 

Share this post


Link to post
Share on other sites

qu'a tu fait exactement ?

pour supprimé la colonne dans la base ? t'as pas supprimé la table complète au moins :o

Share this post


Link to post
Share on other sites

qu'a tu fait exactement ?

pour supprimé la colonne dans la base ? t'as pas supprimé la table complète au moins :o

Non je n"ai effacé que la colonne .Par contre j'ai revu le tuto et le problème et peut être la.

A quelle ligne installe tu :

<span class="vppd">{l s='Sold in packs of :'}{$product->pointsforts|default:'NC'}</span>

 

Et aussi celle la:

<span class="vppd2">{l s='Sold in packs of :'}{$product.pointsforts|default:'NC'}</span>

 

Je ne les ai pas installées, c'est peut être l'erreur.

Share this post


Link to post
Share on other sites

Dans le Product.tpl j'ai ceci :

<span class="vppd">{l s='Sold in packs of :'}{$product->pointsforts|default:'NC'}</span>

Et dans le product-list.tpl j'ai mis ceci :

<span class="vppd2">{l s='Sold in packs of :'}{$product.pointsforts|default:'NC'}</span>

tu le vois de suite avec le le .pointsforts et pour le profuct.tpl c'est ->pointsforts

Share this post


Link to post
Share on other sites

Dans le Product.tpl j'ai ceci :

<span class="vppd">{l s='Sold in packs of :'}{$product->pointsforts|default:'NC'}</span>

Et dans le product-list.tpl j'ai mis ceci :

<span class="vppd2">{l s='Sold in packs of :'}{$product.pointsforts|default:'NC'}</span>

tu le vois de suite avec le le .pointsforts et pour le profuct.tpl c'est ->pointsforts

J'ai rajouté le premier code la:

 

*}
{include file="$tpl_dir./errors.tpl"}
{if $errors|@count == 0}
{if !isset($priceDisplayPrecision)}
{assign var='priceDisplayPrecision' value=2}
{/if}
{if !$priceDisplay || $priceDisplay == 2}
{assign var='productPrice' value=$product->getPrice(true, $smarty.const.NULL, $priceDisplayPrecision)}
{assign var='productPriceWithoutReduction' value=$product->getPriceWithoutReduct(false, $smarty.const.NULL)}
{elseif $priceDisplay == 1}
{assign var='productPrice' value=$product->getPrice(false, $smarty.const.NULL, $priceDisplayPrecision)}
{assign var='productPriceWithoutReduction' value=$product->getPriceWithoutReduct(true, $smarty.const.NULL)}
{/if}
<span class="vppd">{l s='Sold in packs of :'}{$product->pointsforts|default:'NC'}</span>
<p>{l s='Sold in packs of :'}{$product->pointsforts}</p>
<div class="primary_block row" itemscope itemtype="http://schema.org/Product">
{if !$content_only}
<div class="container">
<div class="top-hr"></div>
</div>
{/if}
 
et le deuxieme la:
 
{if isset($products) && $products}
{*define numbers of product per line in other page for desktop*}
{if $page_name !='index' && $page_name !='product'}
{assign var='nbItemsPerLine' value=3}
{assign var='nbItemsPerLineTablet' value=2}
{assign var='nbItemsPerLineMobile' value=3}
{else}
{assign var='nbItemsPerLine' value=4}
{assign var='nbItemsPerLineTablet' value=3}
{assign var='nbItemsPerLineMobile' value=2}
{/if}
{*define numbers of product per line in other page for tablet*}
{assign var='nbLi' value=$products|@count}
{math equation="nbLi/nbItemsPerLine" nbLi=$nbLi nbItemsPerLine=$nbItemsPerLine assign=nbLines}
{math equation="nbLi/nbItemsPerLineTablet" nbLi=$nbLi nbItemsPerLineTablet=$nbItemsPerLineTablet assign=nbLinesTablet}
<!-- Products list -->
<span class="vppd2">{l s='Sold in packs of :'}{$product.pointsforts|default:'NC'}</span>
<ul{if isset($id) && $id} id="{$id}"{/if} class="product_list grid row{if isset($class) && $class} {$class}{/if}{if isset($active) && $active == 1} active{/if}">
{foreach from=$products item=product name=products}
{math equation="(total%perLine)" total=$smarty.foreach.products.total perLine=$nbItemsPerLine assign=totModulo}
{math equation="(total%perLineT)" total=$smarty.foreach.products.total perLineT=$nbItemsPerLineTablet assign=totModuloTablet}
{math equation="(total%perLineT)" total=$smarty.foreach.products.total perLineT=$nbItemsPerLineMobile assign=totModuloMobile}
{if $totModulo == 0}{assign var='totModulo' value=$nbItemsPerLine}{/if}
{if $totModuloTablet == 0}{assign var='totModuloTablet' value=$nbItemsPerLineTablet}{/if}
{if $totModuloMobile == 0}{assign var='totModuloMobile' value=$nbItemsPerLineMobile}{/if}
<li class="ajax_bloc
 
Est ce la bonne position?

Share this post


Link to post
Share on other sites

 

J'ai rajouté le premier code la:

 

*}
{include file="$tpl_dir./errors.tpl"}
{if $errors|@count == 0}
{if !isset($priceDisplayPrecision)}
{assign var='priceDisplayPrecision' value=2}
{/if}
{if !$priceDisplay || $priceDisplay == 2}
{assign var='productPrice' value=$product->getPrice(true, $smarty.const.NULL, $priceDisplayPrecision)}
{assign var='productPriceWithoutReduction' value=$product->getPriceWithoutReduct(false, $smarty.const.NULL)}
{elseif $priceDisplay == 1}
{assign var='productPrice' value=$product->getPrice(false, $smarty.const.NULL, $priceDisplayPrecision)}
{assign var='productPriceWithoutReduction' value=$product->getPriceWithoutReduct(true, $smarty.const.NULL)}
{/if}
<span class="vppd">{l s='Sold in packs of :'}{$product->pointsforts|default:'NC'}</span>
<p>{l s='Sold in packs of :'}{$product->pointsforts}</p>
<div class="primary_block row" itemscope itemtype="http://schema.org/Product">
{if !$content_only}
<div class="container">
<div class="top-hr"></div>
</div>
{/if}
 
et le deuxieme la:
 
{if isset($products) && $products}
{*define numbers of product per line in other page for desktop*}
{if $page_name !='index' && $page_name !='product'}
{assign var='nbItemsPerLine' value=3}
{assign var='nbItemsPerLineTablet' value=2}
{assign var='nbItemsPerLineMobile' value=3}
{else}
{assign var='nbItemsPerLine' value=4}
{assign var='nbItemsPerLineTablet' value=3}
{assign var='nbItemsPerLineMobile' value=2}
{/if}
{*define numbers of product per line in other page for tablet*}
{assign var='nbLi' value=$products|@count}
{math equation="nbLi/nbItemsPerLine" nbLi=$nbLi nbItemsPerLine=$nbItemsPerLine assign=nbLines}
{math equation="nbLi/nbItemsPerLineTablet" nbLi=$nbLi nbItemsPerLineTablet=$nbItemsPerLineTablet assign=nbLinesTablet}
<!-- Products list -->
<span class="vppd2">{l s='Sold in packs of :'}{$product.pointsforts|default:'NC'}</span>
<ul{if isset($id) && $id} id="{$id}"{/if} class="product_list grid row{if isset($class) && $class} {$class}{/if}{if isset($active) && $active == 1} active{/if}">
{foreach from=$products item=product name=products}
{math equation="(total%perLine)" total=$smarty.foreach.products.total perLine=$nbItemsPerLine assign=totModulo}
{math equation="(total%perLineT)" total=$smarty.foreach.products.total perLineT=$nbItemsPerLineTablet assign=totModuloTablet}
{math equation="(total%perLineT)" total=$smarty.foreach.products.total perLineT=$nbItemsPerLineMobile assign=totModuloMobile}
{if $totModulo == 0}{assign var='totModulo' value=$nbItemsPerLine}{/if}
{if $totModuloTablet == 0}{assign var='totModuloTablet' value=$nbItemsPerLineTablet}{/if}
{if $totModuloMobile == 0}{assign var='totModuloMobile' value=$nbItemsPerLineMobile}{/if}
<li class="ajax_bloc
 
Est ce la bonne position?

 

je ne vois pas ou metre cette ligne; <input maxlength="5" id="pointsforts" name="pointsforts" type="text" value="{$product->pointsforts}" />

Share this post


Link to post
Share on other sites

Logiquement dans le price.tpl je l'ai mis après toi tu le met la ou tu veux que l'input s'affiche ;)

bonjour petite question ou installe ton cela : Product::$definition['fields']['pointsforts'] = array('type' => self::TYPE_HTML, 'lang' => false, 'validate' => 'isString');

 

Merci

Share this post


Link to post
Share on other sites

Super j'ai recommencé à zéro et tout fonctionne .Merci à toi.

Par contre je reste avec le problème du tuto "prix unitaire" qui s'affiche en Hors taxe sur la page d'accueille et TTC sur la page produit.

Merci

Share this post


Link to post
Share on other sites

Logiquement dans le price.tpl je l'ai mis après toi tu le met la ou tu veux que l'input s'affiche ;)

Bonsoir j' ai remarqué un petit bug quand je renseigne les quantités dans le back office et que je valide :

J'ai cette erreur;

 

Notice à la ligne 226 du fichier C:\wamp\www\se\cache\smarty\compile\f6\e4\60\f6e4603d8cb8374ea6cd0fde2aa2458846de8d1e.file.prices.tpl.php

[8] Undefined index: id_lang

 

Notice à la ligne 226 du fichier C:\wamp\www\se\cache\smarty\compile\f6\e4\60\f6e4603d8cb8374ea6cd0fde2aa2458846de8d1e.file.prices.tpl.php

[8] Trying to get property of non-object 

 

 

Alors je suis allé chercher le fichier : compile\f6\e4\60\f6e4603d8cb8374ea6cd0fde2aa2458846de8d1e

 

Et j'ai cela:

 

 

<!-- Prix par Paquet -->

 
<div class="form-group">
<label class="control-label col-lg-2" for="pointsforts_<?php echo $_smarty_tpl->tpl_vars['id_lang']->value;?>
">
  <?php echo $_smarty_tpl->getSubTemplate ("controllers/products/multishop/checkbox.tpl", $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, null, null, array('field'=>"pointsforts",'type'=>"tinymce",'multilang'=>"true"), 0);?>
 
  <span class="label-tooltip" data-toggle="tooltip"
title="<?php echo smartyTranslate(array('s'=>'Appears in the body of the product page.'),$_smarty_tpl);?>
">
<?php echo smartyTranslate(array('s'=>'Par quantité de:'),$_smarty_tpl);?>
 
</span>
</label>
<div class="col-lg-9">
  <input maxlength="5" id="pointsforts" name="pointsforts" type="text" value="<?php echo $_smarty_tpl->tpl_vars['product']->value->pointsforts;?>
" />
</div>
  </div> 
 
Alors je ne vois pas l'erreur.Une idée Merci?

Share this post


Link to post
Share on other sites

Hello,

 

Just for information, when i have to subdefine a template, i create an overriden template like this for better compatibilty:

 

{capture assign='ps_original_content'}
{include file='controllers/products/associations.tpl'}
{/capture}
 
{capture assign='plici_data_to_add'}
    HERE MY OWN CODE
{/capture}
 
{$ps_original_content|replace:'<div class="panel-footer">':($plici_data_to_add|cat:'<div class="panel-footer">')}

Share this post


Link to post
Share on other sites

Bonjour, à tous.

j'ai un probleme sur le meme genre d'ajout de champs sur un produit que je n'arrive pas à résoudre !

 

j'ai ajouter un champs supplémentaires à choix multiple (menu déroulant avec OUI ou NON) avec les réglages suivant :

 

j'ai ajouter ma ligne dans override product.php :

     class Product extends ProductCore
{
    public $editionoriginale;
    public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
    {
       Product::$definition['fields']['editionoriginale'] = array('type' => self::TYPE_STRING, 'shop' => true, 'validate' => 'isGenericName', 'values' => array('non', 'oui'), 'default' => 'non');
      parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
    }
 }

 

j'ai ajouter une table supplémentaire dans ma base de données phpmyadmin -> xxx_product_shop :

Nom : editionoriginale  

Type : ENUM

Taille/Valeurs* : 'non','oui'

Défaut : Tel que défini : non

Interclassement...... etc...

 

et j'ai rajouté mes lignes dans mon informations.tpl de l'admin pour avoir mon champs :

    <div class="form-group">
                <div class="col-lg-1"><span class="pull-right">
                {include file="controllers/products/multishop/checkbox.tpl" field="editionoriginale" type="default"}</span></div>
                <label class="control-label col-lg-2" for="editionoriginale">
                    {l s='editionoriginale'}
                </label>
                <div class="col-lg-3">
                    <select name="editionoriginale" id="editionoriginale">
                        <option value="non" {if $product->editionoriginale == 'non'}selected="selected"{/if} >{l s='non'}</option>
                        <option value="oui" {if $product->editionoriginale == 'oui'}selected="selected"{/if} >{l s='oui'}</option>
                     </select>
                </div>
            </div>


Donc tout marche bien à part une chose !c'est en admin, quand je clique sur enregistrer mon produit ca fonctionne mon choix est bien pris en compte et ce répercute en front office sur ma fiche produit, MAIS en admin une fois que je retourne sur ma fiche produit le choix revient toujours au choix par défaut !!! c'est à dire dans mon cas, j'ai par défaut NON et je peux choisir OUI, donc si je choisis OUI il le valide mais il reste toujours, une fois la page rafraichit, sur NON !

Pouvez vous me dire d'où vient mon problème et pourquoi la page admin produit ne garde pas en mémoire mon choix ?

merci d'avance à tous.

 

Sébastien

Share this post


Link to post
Share on other sites

Bonjour,

 

Si vous sélectionnez une boutique (en mode multi boutique) sur votre admin de prestashop, cela fonctionne-t-il ?

Pour ma part, j'aurai tendance à dupliquer la colonne créée sur la table "xxx_product"

Car de ce que j'en sais, "xxx_product_shop" sera utilisé pour toute modification pour une seule boutique alors que "xxx_product" sera utilisé pour le paramètre pour toutes les boutiques.

Donc, à mon goût il est normal d'avoir en double cette colonne.

 

Serait-ce une piste ?

Share this post


Link to post
Share on other sites

Bonjour et merci de votre réponse.

j'ai déjà testé de mettre aussi cela dans la table et le fichier de xxx_product et cela n'a rien changé !

J'ai même fait cela dans xxx_product_lang !

Share this post


Link to post
Share on other sites

Tout d'un coup ce pb me revient et je crois que cela vient de la définition trop propre :

<?php
class Product extends ProductCore
{
public $pointsforts;
public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
{
Product::$definition['fields']['pointsforts'] = array('type' => self::TYPE_HTML, 'lang' => false, 'validate' => 'isString');
parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
}
}
?>

Il me semble que pour certain cas on est obligé de redéfinir toute la $definition en ajoutant notre propre champ, sinon on peut avoir des comportements étranges.

Pour ma part je tenterai de mettre le champ sur shop et pas shop et de mettre la définition complètement copier/coller en ajoutant mon champ.

 

J'espère que cela aidera.

Share this post


Link to post
Share on other sites

je ne comprends pas trop ce que vous voulez dire ! désolé ! surtout dans votre dernière phrase :

 

Pour ma part je tenterai de mettre le champ sur shop et pas shop et de mettre la définition complètement copier/coller en ajoutant mon champ.

Share this post


Link to post
Share on other sites

Cela deviendrai cela niveau code (c'est moche mais des-fois c'est nécessaire) :

<?php
class Product extends ProductCore
{
public $pointsforts;

public static $definition = array(
        'table' => 'product',
        'primary' => 'id_product',
        'multilang' => true,
        'multilang_shop' => true,
        'fields' => array(
            /* Classic fields */
            'id_shop_default' =>            array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
            'id_manufacturer' =>            array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
            'id_supplier' =>                array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
            'reference' =>                    array('type' => self::TYPE_STRING, 'validate' => 'isReference', 'size' => 32),
            'supplier_reference' =>        array('type' => self::TYPE_STRING, 'validate' => 'isReference', 'size' => 32),
            'location' =>                    array('type' => self::TYPE_STRING, 'validate' => 'isReference', 'size' => 64),
            'width' =>                        array('type' => self::TYPE_FLOAT, 'validate' => 'isUnsignedFloat'),
            'height' =>                    array('type' => self::TYPE_FLOAT, 'validate' => 'isUnsignedFloat'),
            'depth' =>                        array('type' => self::TYPE_FLOAT, 'validate' => 'isUnsignedFloat'),
            'weight' =>                    array('type' => self::TYPE_FLOAT, 'validate' => 'isUnsignedFloat'),
            'quantity_discount' =>            array('type' => self::TYPE_BOOL, 'validate' => 'isBool'),
            'ean13' =>                        array('type' => self::TYPE_STRING, 'validate' => 'isEan13', 'size' => 13),
            'upc' =>                        array('type' => self::TYPE_STRING, 'validate' => 'isUpc', 'size' => 12),
            'cache_is_pack' =>                array('type' => self::TYPE_BOOL, 'validate' => 'isBool'),
            'cache_has_attachments' =>        array('type' => self::TYPE_BOOL, 'validate' => 'isBool'),
            'is_virtual' =>                array('type' => self::TYPE_BOOL, 'validate' => 'isBool'),


            /* Shop fields */
            'id_category_default' =>        array('type' => self::TYPE_INT, 'shop' => true, 'validate' => 'isUnsignedId'),
            'id_tax_rules_group' =>        array('type' => self::TYPE_INT, 'shop' => true, 'validate' => 'isUnsignedId'),
            'on_sale' =>                    array('type' => self::TYPE_BOOL, 'shop' => true, 'validate' => 'isBool'),
            'online_only' =>                array('type' => self::TYPE_BOOL, 'shop' => true, 'validate' => 'isBool'),
            'ecotax' =>                    array('type' => self::TYPE_FLOAT, 'shop' => true, 'validate' => 'isPrice'),
            'minimal_quantity' =>            array('type' => self::TYPE_INT, 'shop' => true, 'validate' => 'isUnsignedInt'),
            'price' =>                        array('type' => self::TYPE_FLOAT, 'shop' => true, 'validate' => 'isPrice', 'required' => true),
            'wholesale_price' =>            array('type' => self::TYPE_FLOAT, 'shop' => true, 'validate' => 'isPrice'),
            'unity' =>                        array('type' => self::TYPE_STRING, 'shop' => true, 'validate' => 'isString'),
            'unit_price_ratio' =>            array('type' => self::TYPE_FLOAT, 'shop' => true),
            'additional_shipping_cost' =>    array('type' => self::TYPE_FLOAT, 'shop' => true, 'validate' => 'isPrice'),
            'customizable' =>                array('type' => self::TYPE_INT, 'shop' => true, 'validate' => 'isUnsignedInt'),
            'text_fields' =>                array('type' => self::TYPE_INT, 'shop' => true, 'validate' => 'isUnsignedInt'),
            'uploadable_files' =>            array('type' => self::TYPE_INT, 'shop' => true, 'validate' => 'isUnsignedInt'),
            'active' =>                    array('type' => self::TYPE_BOOL, 'shop' => true, 'validate' => 'isBool'),
            'redirect_type' =>                array('type' => self::TYPE_STRING, 'shop' => true, 'validate' => 'isString'),
            'id_product_redirected' =>        array('type' => self::TYPE_INT, 'shop' => true, 'validate' => 'isUnsignedId'),
            'available_for_order' =>        array('type' => self::TYPE_BOOL, 'shop' => true, 'validate' => 'isBool'),
            'available_date' =>            array('type' => self::TYPE_DATE, 'shop' => true, 'validate' => 'isDateFormat'),
            'condition' =>                    array('type' => self::TYPE_STRING, 'shop' => true, 'validate' => 'isGenericName', 'values' => array('new', 'used', 'refurbished'), 'default' => 'new'),
            'show_price' =>                array('type' => self::TYPE_BOOL, 'shop' => true, 'validate' => 'isBool'),
            'indexed' =>                    array('type' => self::TYPE_BOOL, 'shop' => true, 'validate' => 'isBool'),
            'visibility' =>                array('type' => self::TYPE_STRING, 'shop' => true, 'validate' => 'isProductVisibility', 'values' => array('both', 'catalog', 'search', 'none'), 'default' => 'both'),
            'cache_default_attribute' =>    array('type' => self::TYPE_INT, 'shop' => true),
            'advanced_stock_management' =>    array('type' => self::TYPE_BOOL, 'shop' => true, 'validate' => 'isBool'),
            'date_add' =>                    array('type' => self::TYPE_DATE, 'shop' => true, 'validate' => 'isDate'),
            'date_upd' =>                    array('type' => self::TYPE_DATE, 'shop' => true, 'validate' => 'isDate'),
            'pack_stock_type' =>            array('type' => self::TYPE_INT, 'shop' => true, 'validate' => 'isUnsignedInt'),


            /* Lang fields */
            'meta_description' =>            array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255),
            'meta_keywords' =>                array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255),
            'meta_title' =>                array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 128),
            'link_rewrite' =>    array(
                'type' => self::TYPE_STRING,
                'lang' => true,
                'validate' => 'isLinkRewrite',
                'required' => true,
                'size' => 128,
                'ws_modifier' => array(
                    'http_method' => WebserviceRequest::HTTP_POST,
                    'modifier' => 'modifierWsLinkRewrite'
                )
            ),
            'name' =>                        array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isCatalogName', 'required' => true, 'size' => 128),
            'description' =>                array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'),
            'description_short' =>            array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'),
            'available_now' =>                array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255),
            'available_later' =>            array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'IsGenericName', 'size' => 255),
            'pointsforts' => array('type' => self::TYPE_HTML, 'lang' => false, 'validate' => 'isString'),
        ),
        'associations' => array(
            'manufacturer' =>                array('type' => self::HAS_ONE),
            'supplier' =>                    array('type' => self::HAS_ONE),
            'default_category' =>            array('type' => self::HAS_ONE, 'field' => 'id_category_default', 'object' => 'Category'),
            'tax_rules_group' =>            array('type' => self::HAS_ONE),
            'categories' =>                    array('type' => self::HAS_MANY, 'field' => 'id_category', 'object' => 'Category', 'association' => 'category_product'),
            'stock_availables' =>            array('type' => self::HAS_MANY, 'field' => 'id_stock_available', 'object' => 'StockAvailable', 'association' => 'stock_availables'),
        ),
    );} ?>

Et je poserai le champ 'pointsforts' sur la table ps_product et ps_product_shop.

Edited by pliciweb_stephane (see edit history)

Share this post


Link to post
Share on other sites

Bonjour,

je m'insère dans votre topic développeur, bien que je n'ai pas le niveau, c'est pour un help, please

après une installation ardue de mon prestashop > translation en français, problème classique de max var imput etc... Je ne pouvais pas faire de traduction, bref, d'ailleurs une partie du problème n'est pas résolue.

J'ai uploader le pack français après une bourde > installation en anglais,

suite à cet upload, quand je régénère mes url en rewriting, voici ce que j'ai

le champ link_rewrite (Français (French)) est invalide.

 

Version de PrestaShop 1.6.1.3

URL de votre boutique http://entre-vert.com/

Nom du thème utilisé panda

Informations sur votre serveur Linux #1 SMP Sun Sep 27 06:34:10 EDT 2015 x86_64

Version du logiciel serveur LiteSpeed

Version de PHP 5.5.31

Limite de mémoire 2048M

Temps d'exécution maximal (max_execution_time) 30

 

quelqu'un à une idée?

 

merci de vos retours,

Loolye

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

×
×
  • Create New...

Important Information

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