Symfony: come usare i widget con i moduli i18n in backend (dottrina)
-
22-07-2019 - |
Domanda
Non riesco ad avere widget i18n e tinyMCE su campi internazionalizzati. Se inserirò entrambi, avrò campi internazionalizzati per tutti i campi dei miei oggetti, ma nessuna minzione per loro. Avrò tanti campi tinyMCE come ho dichiarato, ma non corrisponderanno a nessuna lingua, saranno all'inizio o alla fine. Ha funzionato perfettamente prima di internazionalizzare gli oggetti
Ecco un esempio di codice:
// 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);
}
Quindi immagino che quando utilizzo $ this- > widgetSchema ['intro'], l '& #; intro " il nome non corrisponde a tutti i18n "intro" campi. Ho provato sia 'en_intro' che 'intro_en', ma non fa nessuna magia. Quindi forse potresti aiutarmi?
Soluzione
Quindi ho scoperto come farlo e ho pensato che potesse interessare qualcuno:
Invece di
$this->widgetSchema['intro'] = ...
Inserisci
$this->widgetSchema['en']['intro'] = ...
con tutte le lingue.
Altri suggerimenti
inoltre puoi usare:
$this->widgetSchema->moveField('en',sfWidgetFormSchema::BEFORE,'intro');
sposta l'etichetta e il campo i18n prima del campo introduttivo.