Symfony: Cómo usar widgets con formularios i18n en backend (doctrina)
-
22-07-2019 - |
Pregunta
No puedo lograr tener widgets i18n y tinyMCE en campos internacionalizados. Si pongo ambos, tendré campos internacionalizados para todos los campos de mis objetos, pero no tinyMCE para ellos. Tendré tantos pequeños campos MCE como he declarado, pero no corresponderán a ningún idioma, estarán al principio o al final. Funcionó perfectamente antes de internacionalizar los objetos
Aquí hay un ejemplo de código:
// config / doctrine / schema.yml
MyObject:
actAs:
I18n:
fields: [title, subtitle, intro, text]
columns:
title: {type: string(500)}
subtitle: {type: string(500)}
intro: {type: string(4000)}
text: {type: string(16000)}
// lib / form / doctrine / MyObject.class.php
public function configure()
{
$this->embedI18n(array('en', 'fr', 'es'));
$this->widgetSchema->setLabel('fr', 'Français');
$this->widgetSchema->setLabel('en', 'Anglais');
$this->widgetSchema->setLabel('es', 'Español');
$this->widgetSchema['intro'] = new sfWidgetFormTextareaTinyMCE(
array(
'width'=>600,
'height'=>100,
'config'=>'theme_advanced_disable: "anchor,image,cleanup,help"',
'theme' => sfConfig::get('app_tinymce_theme','simple'),
),
array(
'class' => 'tiny_mce'
)
);
$this->widgetSchema['text'] = new sfWidgetFormTextareaTinyMCE(
array(
'width'=>600,
'height'=>100,
'config'=>'theme_advanced_disable: "anchor,image,cleanup,help"',
'theme' => sfConfig::get('app_tinymce_theme','simple'),
),
array(
'class' => 'tiny_mce'
)
);
$js_path = sfConfig::get('sf_rich_text_js_dir') ? '/'.sfConfig::get('sf_rich_text_js_dir').'/tiny_mce.js' : '/sf/tinymce/js/tiny_mce.js';
sfContext::getInstance()->getResponse()->addJavascript($js_path);
}
Entonces, supongo que cuando uso $ this- > widgetSchema ['intro'], la " intro " el nombre no corresponde a toda la introducción de i18n '' campos. Intenté 'en_intro' e 'intro_en', pero no hace ninguna magia. Entonces, ¿podrías ayudarme?
Solución
Así que encontré cómo hacer esto y pensé que podría interesarle a alguien:
En lugar de
$this->widgetSchema['intro'] = ...
Poner
$this->widgetSchema['en']['intro'] = ...
con todos los idiomas.
Otros consejos
también puedes usar:
$this->widgetSchema->moveField('en',sfWidgetFormSchema::BEFORE,'intro');
mueva la etiqueta y el campo i18n al campo de introducción anterior.