jonysi_d Posted August 20, 2012 Share Posted August 20, 2012 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: 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 More sharing options...
nadie Posted August 20, 2012 Share Posted August 20, 2012 Revisa esta guía: http://blog.redegal....os-a-prestashop para añadir un nuevo campo en el producto. Un Saludo Link to comment Share on other sites More sharing options...
jonysi_d Posted August 20, 2012 Author Share Posted August 20, 2012 (edited) 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 August 20, 2012 by jonysi_d (see edit history) Link to comment Share on other sites More sharing options...
jonysi_d Posted August 21, 2012 Author Share Posted August 21, 2012 Alguna orientación ??? alguien podría hecharme una mano ??? para + informacion trabajo con version 1.4.8.2 gracias Link to comment Share on other sites More sharing options...
jonysi_d Posted August 21, 2012 Author Share Posted August 21, 2012 (edited) 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 August 21, 2012 by jonysi_d (see edit history) Link to comment Share on other sites More sharing options...
jonysi_d Posted August 21, 2012 Author Share Posted August 21, 2012 (edited) 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 August 21, 2012 by jonysi_d (see edit history) Link to comment Share on other sites More sharing options...
jonysi_d Posted August 21, 2012 Author Share Posted August 21, 2012 Por cierto...!!! olvide de decir que en la base de datos en la tabla " ps_product" he creado la columna "hola" Link to comment Share on other sites More sharing options...
jonysi_d Posted August 21, 2012 Author Share Posted August 21, 2012 Asi es como se me ve por si os sirve de guia: Link to comment Share on other sites More sharing options...
Recommended Posts