Jump to content

Configurar Back Office para añadir campo en artículos - Prestashop 1.4


Recommended Posts

Hola..

quiero añadir un campo para rellenar al entrar un producto, pero no acabo de solucionarlo ya que he podido crearlo, pero no se me guarda en la base de datos por lo cual, cuando guardo el producto, no se guarda y por lo tanto no se visualiza. Les adjunto un foto para que sirva de ayuda:

 

Los pasos que he hecho por si a alguien le interesa es modificar el archivo AdminProducts.php las siguientes lineas:

 

  'hola' => array('title' => $this->l('Hola'), 'align' => 'center', 'width' => 20),

	Tools::getValue('attribute_hola'),

Tools::getValue('attribute_hola'),

<tr><td>'.$this->l('Hola').'</td>
  <td style="padding-bottom:5px;">
   <input size="55" type="text" name="hola" value="'.htmlentities($this->getFieldValue($obj, 'hola'), ENT_COMPAT, 'UTF-8').'" style="width: 130px; margin-right: 44px;" />
   <span class="hint" name="help_box">'.$this->l('Special characters allowed:').' .-_#\<span class="hint-pointer"> </span></span>
  </td>
 </tr>

 

asi me queda en el back office, pero cuando introduzco un valor, el valor no se me guarda:

 

21343354.jpg

 

Por cierto, tambien he modificado la base de datos, creando los campor "hola" en :

" ps_product" y " ps_product_attibute "

 

 

Gracias..

Link to comment
Share on other sites

Gracias por el aporte, pero no me ha servido de mucho, a lo mejor es por mis justos conocimientos de programación, pero no lo consigo. En el paso de instroducir el código:

 

public function updateCampoNuevo($id_product, $campo)
{
$sql = ‘
UPDATE `’._DB_PREFIX_.’product’.'`
SET `campo_prueba` = “‘.intval($camp0).’”
WHERE `id_product` = “‘.intval($id_product).’”‘;
return Db::getInstance()->Execute($sql);
}

 

no me deja ya que la construccion delk código me sale como incorrecta. Quizas es por la version de Prestashop que la estructura de la programacion no es la misma que en la que se creó.

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

Dejo el post para que se vean las modificaciones que voy haciendo por si surge alguna idea:

Intento crear el campo " hola "

 

de la carpeta miweb/admin/tabs/ en el archivo AdminProducts.php he añadido lo siguiente:

 

$this->fieldsDisplay = array(
  'id_product' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 20),
  'image' => array('title' => $this->l('Photo'), 'align' => 'center', 'image' => 'p', 'width' => 45, 'orderby' => false, 'filter' => false, 'search' => false),
  'name' => array('title' => $this->l('Name'), 'width' => 220, 'filter_key' => 'b!name'),
  'reference' => array('title' => $this->l('Reference'), 'align' => 'center', 'width' => 20),
[color=#ff0000] 'hola' => array('title' => $this->l('Hola'), 'align' => 'center', 'width' => 20),[/color]
  'price' => array('title' => $this->l('Base price'), 'width' => 70, 'price' => true, 'align' => 'right', 'filter_key' => 'a!price'),
  'price_final' => array('title' => $this->l('Final price'), 'width' => 70, 'price' => true, 'align' => 'right', 'havingFilter' => true, 'orderby' => false),
  'quantity' => array('title' => $this->l('Quantity'), 'width' => 30, 'align' => 'right', 'filter_key' => 'a!quantity', 'type' => 'decimal'),
  'position' => array('title' => $this->l('Position'), 'width' => 40,'filter_key' => 'cp!position', 'align' => 'center', 'position' => 'position'),
  'a!active' => array('title' => $this->l('Displayed'), 'active' => 'status', 'filter_key' => 'a!active', 'align' => 'center', 'type' => 'bool', 'orderby' => false));

 

en el apartado ( del mismo archibo )// Change existing one:

 

Tools::getValue('attribute_hola'),

 

en el apartado ( del mismo archivo ) // Add new

 

Tools::getValue('attribute_hola'),

 

y en el mismo archivo para que se vea en el back office y con idiomas pongo lo siguiente:

 

[color=#ff0000]<td class="col-left">'.$this->l('Hola').' [/color]</td>
 <td style="padding-bottom:5px;" class="translatable">';
 foreach ($this->_languages as $language)
  echo '  <div class="lang_'.$language['id_lang'].'" style="display: '.($language['id_lang'] == $this->_defaultFormLanguage ? 'block' : 'none').'; float: left;">
	<input size="43" type="text" id="hola'.$language['id_lang'].'" name="hola'.$language['id_lang'].'"
	value="'.stripslashes(htmlspecialchars($this->getFieldValue($obj, 'hola', $language['id_lang']))).'"'.((!$obj->id) ? ' onkeyup="if (isArrowKey(event)) return; copy2friendlyURL();"' : '').' onkeyup="if (isArrowKey(event)) return; updateCurrentText();" onchange="updateCurrentText();" /><sup> *</sup>
	<span class="hint" name="help_box">'.$this->l('Invalid characters:').' <>;=#{}<span class="hint-pointer"> </span></span>
   </div>';
 echo '  </td>

 

mas abajo lo siguiente:

 

<input type="submit" name="submitProductAttribute" id="submitProductAttribute" value="'.$this->l('Add this combination').'" class="button" onclick="attr_selectall(); this.form.action += \'&addproduct&tabs=3\';" /> </span>
<span id="ResetSpan" style="float: left; margin-left: 8px; display: none;">
  <input type="reset" name="ResetBtn" id="ResetBtn" onclick="init_elems(); getE(\'submitProductAttribute\').value = \''.$this->l('Add this attributes group', __CLASS__, true).'\';
  getE(\'id_product_attribute\').value = 0; $(\'#ResetSpan\').slideToggle();" class="button" value="'.$this->l('Cancel modification').'" /></span><span class="clear"></span>
 </td>
</tr>
<tr><td colspan="2"><hr style="width:100%;" /></td></tr>
<tr>
 <td colspan="2">
 <br />
 <table border="0" cellpadding="0" cellspacing="0" class="table">
  <tr>
   <th>'.$this->l('Attributes').'</th>
   <th>'.$this->l('Impact').'</th>
   <th>'.$this->l('Weight').'</th>
   <th>'.$this->l('Reference').'</th>
   [color=#ff0000]	<th>'.$this->l('Hola').'</th>[/color]
   <th>'.$this->l('EAN13').'</th>

 

DESPUES EN la carpeta midominio/classes/ Product.php he modificado/agregado lo siguiente:

 

 

/** @var string campo prueva HOLA */
public  $hola;

 

mas abajo:

 

protected $fieldsValidate = array(
 'id_tax_rules_group' => 'isUnsignedId',
 'id_manufacturer' => 'isUnsignedId',
 'id_supplier' => 'isUnsignedId',
 'id_category_default' => 'isUnsignedId',
 'id_color_default' => 'isUnsignedInt', /* unsigned integer because its value could be 0 if the feature is disabled */
 'minimal_quantity' => 'isUnsignedInt',
 'price' => 'isPrice',
.........
 'unity' => 'isString',
 'reference' => 'isReference',
[color=#ff0000]'hola' => 'isHola',[/color]
 'supplier_reference' => 'isReference',
 'location' => 'isReference',

 

mas abajo....

 


public function getFields()
{
parent::validateFields();
if (isset($this->id))
$fields['id_product'] = (int)($this->id);
...........
$fields['upc'] = pSQL($this->upc);
$fields['reference'] = pSQL($this->reference);
[color=#ff0000]$fields['hola'] = pSQL($this->hola);[/color] .......

 

mas abajo....

 

[color=#ff0000]public static function getByReference($hola)
{
 Tools::displayAsDeprecated();
 if (!Validate::isHola($hola))
  die(Tools::displayError());[/b]
[b]  $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
 SELECT `id_product`
 FROM `'._DB_PREFIX_.'product` p
 WHERE p.`hola` = \''.pSQL($hola).'\'');
 if (!isset($result['id_product']))
  return false;[/b]
[b]  return new self((int)$result['id_product']);
}[/color]

cuando pongo este ultimo codigo y intento visualizar el backOffice, se me queda el explorador en blanco. y si lo borro se me ve ok, pero no me guarda el valor en la base de datos

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

Si tengo el ultimo codigo deshabilitado:

 

[color=#ff0000]public static function getByReference($hola)
{
 Tools::displayAsDeprecated();
 if (!Validate::isHola($hola))
  die(Tools::displayError());[/b]
[b]  $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
 SELECT `id_product`
 FROM `'._DB_PREFIX_.'product` p
 WHERE p.`hola` = \''.pSQL($hola).'\'');
 if (!isset($result['id_product']))
  return false;[/b]
[b]  return new self((int)$result['id_product']);
}[/color]

 

 

me da el siguiente error:

 

"función de validación no encontrada isHola"

 

el siguiente error:No entiendo porque me da este error si la estoy declarando:

 

protected $fieldsValidate = array(
 'id_tax_rules_group' => 'isUnsignedId',
 'id_manufacturer' => 'isUnsignedId',
 'id_supplier' => 'isUnsignedId',
 'id_category_default' => 'isUnsignedId',
 'id_color_default' => 'isUnsignedInt', /* unsigned integer because its value could be 0 if the feature is disabled */
 'minimal_quantity' => 'isUnsignedInt',
 'price' => 'isPrice',
.........
 'unity' => 'isString',
 'reference' => 'isReference',
[color=#ff0000]'hola' => 'isHola',[/color]
 'supplier_reference' => 'isReference',
 'location' => 'isReference',

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

Guest
This topic is now closed to further replies.
×
×
  • Create New...