Salut à toutes et à tous!
Je viens de suivre le tuto de Grafikart sur l'internationalisation et le premier problème que je rencontre se situe au moment où l'on enregistre les champs dans plusieurs langues. Il est fort possible que ce soit à cause de la version de cake, je suis sous la 2.2.
Voici ce que j'ai fais jusqu'à présent :
bootstrap
Configure::write('Config.languages', array('fra','eng'));
Configure::write('Config.language','fra');
Post model
<?php
class Post extends AppModel{
public $actsAs = array(
'Translate' => array(
'name' => 'nameTranslation',
'slug' => 'slugTranslation',
'content' => 'contentTranslation'
)
);
PostsController
function admin_edit(){
if (!empty($this->request->data)) {
$this->Post->locale = Configure::read('Config.languages');
$this->Post->create();
if ($this->Post->save($this->request->data)) {
// $this->redirect(array('action' => 'index'));
}
}
}
admin_edit.ctp
<div class="page-header">
<h1>Editer un article</h1>
</div>
<?php echo $this->Form->create('Post', array('class' => 'form-horizontal','type' => 'file')); ?>
<div class="control-group">
<?php echo $this->Form->label('file', 'Image (format png/jpg)', 'control-label'); ?>
<div class="controls">
<?php echo $this->Form->input('file', array('div' => false, 'label' => false,'type' => 'file')); ?>
</div>
</div>
<?php foreach (Configure::read('Config.languages') as $lang): ?>
<div class="control-group">
<?php echo $this->Form->label('photo', 'Image name ('.$lang.')', 'control-label'); ?>
<div class="controls">
<?php echo $this->Form->input('Post.photo.'.$lang, array('div' => false, 'label' => false)); ?>
</div>
</div>
<div class="control-group">
<?php echo $this->Form->label('name', 'News title ('.$lang.')', 'control-label'); ?>
<div class="controls">
<?php echo $this->Form->input('Post.name.'.$lang, array('div' => false, 'label' => false)); ?>
</div>
</div>
<div class="control-group">
<?php echo $this->Form->label('slug', 'URL ('.$lang.')', 'control-label'); ?>
<div class="controls">
<?php echo $this->Form->input('Post.slug.'.$lang, array('div' => false, 'label' => false)); ?>
</div>
</div>
<div class="control-group">
<?php echo $this->Form->label('content', 'News content ('.$lang.')', 'control-label'); ?>
<div class="controls">
<?php echo $this->Form->textarea('Post.content.'.$lang, array('div' => false, 'label' => false)); ?>
</div>
</div>
<?php endforeach; ?>
<?php echo $this->Form->input('id'); ?>
<div class="control-group">
<?php echo $this->Form->label('online', 'Put online', 'control-label'); ?>
<div class="controls">
<?php echo $this->Form->input('online', array('div' => false, 'label' => false)); ?>
</div>
</div>
<div class="control-group">
<div class="controls">
<?php echo $this->Form->submit('Create',array('class' => 'btn primary')); ?>
</div>
</div>
<?php echo $this->Form->end(); ?>
Pour la vue j'utilise le bootstrap de twitter d'où l'organisation des champs un peu bizzare.
Et enfin voici l'erreur que je rencontre lorsque je sauvegarde :
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Array' in 'field list'
SQL Query: INSERT INTO `cakeint`.`posts` (`photo`, `created`, `online`, `name`, `slug`, `content`) VALUES (Array, 'CURRENT_TIMESTAMP', '1', Array, Array, Array)
Je suis certain que le problème vient du fait que le tuto est une version antérieure et de fait en passant sur la 2.2 le résultat agit differement. Malheureusement la doc de cakephp est très vague et il m'est difficile de comprendre comment solutionner ce problème.
Je vous remercie grandement par avance pour vos lumières, j'ai tout un site à internationaliser avec tables existantes et liées, bref je suis pas sortit de l'auberge! :)