gu78 Posted November 19, 2015 Share Posted November 19, 2015 (edited) Buenas! He creado un módulo y tiene una tabla con su clase asociada.La tabla tiene 2 campos de idioma en su tabla _lang asociada.En el back office al agregar contenido todo funciona correctamente. Sin embargo, al actualizar, todo se graba menos los campos de idioma. He hecho trazas y no se llega a ejecutar la consulta SQL de actualización, así que he seguido haciendo trazas y el problema viene cuando en ObjectModel.php, linea 668 se hace la llamada $fields = $this->getFieldsLang(); y se recibe como respuesta un array vacío.Profundizando más, he encontrado que la funcion formatFields no hace su cometido, devolviendo valores correctos al insertar y un array vacio al actualizar. El modelo está definido como multi idioma, los campos con idiomas están debidamente identificados y el controlador del formulario del back office tiene también los idiomas definidos. También he probado a poner los campos como string en vez de cleanhtml, incluso quitando la validación. No hay errores SQL ni en el registro de errores del servidor web. El trazado de errores está activo. He probado el módulo en las versiones: 1.6.0.9 (instalación limpia), 1.6.0.14 (actualización desde 1.6.0.14), 1.6.1.2 (actualización desde 1.6.0.14 -> 1.6.1.0 -> 1.6.1.1) Edited November 20, 2015 by gu78 (see edit history) Link to comment Share on other sites More sharing options...
ozerom Posted November 19, 2015 Share Posted November 19, 2015 Comprueba que las diferentes carpetas de idiomas estén dentro del módulo. Link to comment Share on other sites More sharing options...
gu78 Posted November 20, 2015 Author Share Posted November 20, 2015 Comprueba que las diferentes carpetas de idiomas estén dentro del módulo. Creo que no lo has entendido, no se trata de los archivos de traducción, se trata de los campos de idioma. Link to comment Share on other sites More sharing options...
gu78 Posted November 20, 2015 Author Share Posted November 20, 2015 (edited) Bueno, pues es un problema en ObjectModel.php en la función getFieldsLang(), al editar el valor de $this->id_lang es un array y la función no contempla esto.Adjunto un mini módulo que parchea este problema.It's a problem at ObjectModel.php, in the function getFieldsLang(); when editing, the value of $this->id_lang is an array and the function doesn't expects this.I've attached a tiny module that patches this issue. public function getFieldsLang() { // Retrocompatibility if (method_exists($this, 'getTranslationsFieldsChild')) return $this->getTranslationsFieldsChild(); $this->validateFieldsLang(); $is_lang_multishop = $this->isLangMultishop(); $fields = array(); if (!is_int($this->id_lang)) { foreach (Language::getLanguages(false) as $language) { $fields[$language['id_lang']] = $this->formatFields(self::FORMAT_LANG, $language['id_lang']); $fields[$language['id_lang']]['id_lang'] = $language['id_lang']; if ($this->id_shop && $is_lang_multishop) $fields[$language['id_lang']]['id_shop'] = (int)$this->id_shop; } } else { $fields = array($this->id_lang => $this->formatFields(self::FORMAT_LANG, $this->id_lang)); $fields[$this->id_lang]['id_lang'] = $this->id_lang; if ($this->id_shop && $is_lang_multishop) $fields[$this->id_lang]['id_shop'] = (int)$this->id_shop; } return $fields; } patchmultilang.zip Edited November 20, 2015 by gu78 (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts