Jump to content

Fallo Al Actualizar Campo Multi Idioma En Modulo


gu78

Recommended Posts

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 by gu78 (see edit history)
Link to comment
Share on other sites

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 by gu78 (see edit history)
Link to comment
Share on other sites

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