Bonjour amis de grafikart,

j'ai un probleme en suivant le tutoriel CMS jour 2 à la partie où on peut cliquer sur une image dans le textarea pour l'editer en redmodifiant son alignement etc...
Quand je clic sur le bouton je me mange une erreur : Error: The action log_show%20 is not defined in controller MediasController.

J'ai regardé de plus pret mon fichier editor_plugin.js et ce qui fait que mon url déconne c'est le "%20" collé à show.

Voic la partie du fichier :

var el = ed.selection.getNode();

                var url = ed.settings.image_explorer;
                if(el.nodeName == 'IMG'){
                    url = ed.settings.image_edit;
                    url += '?src='+ed.dom.getAttrib(el,'src')+'&alt='+ed.dom.getAttrib(el,'alt')+'&class='+ed.dom.getAttrib(el,'class');
                }

J'ai déjà testé si le script reconnait bien quand c'est une image de selectionné c'est le cas, j'ai l'impression que ce qui déconne c'est la ligne qui commence par "url += '?src etc ..."
Je vois vraiment pas ce que viens faire ce %20 si quelqu'un aurait une idée ?

l'id 20 représente l'id d'une image que je cherche meme pas a inserer bizare

Merci d'avance

9 réponses


tapesec
Auteur
Réponse acceptée

J'ai trouvé !
Pour une fois je suis content de moi lol, tout d abord merci de ton aide acharné ça m'a donné un peu espoir !

Maintenant la réponse pour tout ceux a qui ça pourrait arriver :

dans mon fichier édit où se trouve mon formulaire d'ajout d'article j'ai écrit :

image_edit : '<?php echo $this->Html->url(array('controller' => 'medias', 'action' => 'show')); ?> ',

et bien il ne faut pas d'espace entre la balise de fermeture php et le guillement simple sinon ca crée un espace quand c'est emboité avec ça :

url += "?src="+ed.dom.getAttrib(el,"src")+"&alt="+ed.dom.getAttrib(el,"alt")+"&class="

Les espaces en url sont des caractères spéciaux qui sont convertit en caractère hexadécimal voir ici et l'espace vous l'avez deviné ca donne en hexadécimal "%20" du coup url bugué !

C'était finalement simple mais pas facile a détecter quand on a le nez trop prés du code merci je marque résolu :)

Salut,
Regarde si le problème est similaire à ce topic là : cakephp jour 2 message d'erreur: current()
Tiens nous au courant.
A+

tapesec
Auteur

C'est la première chose que j'ai fait avant de poster ce topic, j'ai essayé de rajouter is_numeric mais c'est pas ça.
Je comprends pas déjà pourquoi il y a le signe "%" qui ce met alors qu'il n'a été codé nul part.

Essaye de mettre

$id && is_numeric($id)

et non seulement is_numeric.

tapesec
Auteur

Non ça ne marche Pas mais mon problème vient quand je sélectionne une image que jai déjà inséré dans mon article donc sans &id cest plutôt la partie else &d = &this->request->query qui intervient si je me trompe pas

tapesec
Auteur

Si ça peut aider je met mes sources mais bon :

function log_show($id=null){
        $d = array();
        if($this->request->is('post')){
            $this->set($this->request->data'Media']);
            $this->layout = false;
            $this->render('tinymce');
            return;
        }
        if(is_numeric($id)){
            $this->Media->id = $id;
            $media = current($this->Media->read());
            $d'src'] = Router::url('/img/'.$media'url']);
            $d'alt'] = $media'name'];
            $d'class'] = 'alignLeft';
        }else{
            $d = $this->request->query'src'];

        }
        $this->layout = "admin" ;
        $this->set($d);
    }

Mon formulaire pour ecrire un article :

echo $this->Html->script('tiny_mce/tiny_mce.js', array('inline' => false));
echo $this->Html->scriptStart(array('inline' => false)); ?>
        tinyMCE.init({
            mode : 'textareas',
            theme : 'advanced',
            plugins : 'inlinepopups, image',
            theme_advanced_buttons1 : 'bold, italic, underline, |, bullist, numlist,|, justifyleft, justifycenter, justifyright,justifyfull, |, link, unlink, image,|, formatselect, code',
            theme_advanced_buttons2 : '',
            theme_advanced_buttons3 : '',
            theme_advanced_buttons4 : '',
            theme_advanced_toolbar_location: 'top',
            theme_advanced_statusbar_location: 'bottom',
            theme_advanced_resizing: false,
            image_explorer : ' <?php echo $this->Html->url(array('controller' => 'medias', 'action' => 'index', 
                                                            $this->request->data'Post']'id'])); ?> ',
            image_edit : '<?php echo $this->Html->url(array('controller' => 'medias', 'action' => 'show')); ?> ',
            relative_urls : false,
            content_css : "<?php echo $this->Html->url('/theme/css/wysiwyg.css'); ?>"
        })
        function send_to_editor(content){
            var ed = tinyMCE.activeEditor;
            ed.execCommand('mceInsertContent',false,content);
        }

et show.ctp

<div id="cadre1">
<h3>Inserer une image</h3>
<img src="<?php echo $src; ?>" style="max-width:200px;">
</div>
<?php
echo '<div id="cadre2">';
echo '<div id="part3">';
echo '<h3>Images manager</h3>';
echo $this->Form->create('Media');
echo $this->Form->input('alt', array('label' => "Description de l'image", 'class'=>'input_profil', 'value' => $alt));
echo $this->Form->input('url', array('label' => "Chemin de l'image", 'class'=>'input_profil', 'value' => $src));
echo $this->Form->input('class', array('legend' => "Alignement", 'class'=>'input_profil', 'options' =>array(
"alignLeft" => "Aligner à gauche", 
"alignCenter" => "Centrer",
"alignRight" => "Aligner à droite"), 'type' => 'radio', 'value' => $class)).'<br/>';
echo $this->Form->submit('Inserer dans mon article', array('class' => 'button', 'div' => false));
echo $this->Form->end();
echo '</div>';
echo '</div>';
?>
tapesec
Auteur

Ca c'est le genre d'url que mon controller ne comprends pas normal, http://localhost/cake2/log/medias/show%20?src=/cake2/img/2012/02/twitter.png&alt=twitter&class=alignLeft

Le problème est que dans l'url qui se crée il s'insere un "%20" après l'action show et le début des paramètres que j'envoie à l'url grâce à ce script :

if(el.nodeName == 'IMG'){
                    url = ed.settings.image_edit;
                    url += "?src="+ed.dom.getAttrib(el,"src")+"&alt="+ed.dom.getAttrib(el,"alt")+"&class="
                    +ed.dom.getAttrib(el,"class");
                }

J'ai déjà essayé en enlevant url += "?src ... etc .. " là ça marche l'url devient bien http://localhost/cake2/log/medias/show.
Des que je remet la ligne avec les paramètres il apparait ce sacré %20 entre show et le début des paramètres.
Ca peut venir de quoi ça ?

Salut,
Dans ta fonction log_show, après ton else, essaye de mettre ça :

$d = $this->request->query;
$d'src'] = urldecode($d'src']);

Bien joué !! j'étais loin de la solution ,et je crois que j'aurais galérer grave aussi avec cette erreur..
Enfin maintenant si cela m'arrive, je serais où chercher.