Bonjour à tous,
Je suis actuellement à la recherche d'un éditeur de texte, me permettant d'inserer des images dynamiquement et de le recupérer dans un manager afin de les disposer dans un éventuelle article.
J'ai tenter summernote, mais je suis pas tres convaincu.
J'ai ensuite utiliser markdown de grafikart, mais il me semble qu'il n'est pas teminer?
Je rencontre actuellement deux problème:
1 - je recupère bien l'image que j'ai uploader mais lorsque je l'insere l'url n'est pas renseigner.
2 - je n'arrive pas a recupérer l'ensemble des images uploder dans un dossier.

Pouvez vous m'aider?
Merci

5 réponses


Mizzou
Auteur
Réponse acceptée

Bonsoir, après quelques heures de recherches, j'ai trouver la solution.. Je poste cette réponse afin qu'elle puisse aider les autres dev souhaitant utiliser le markdown de grafikart.
La Fonction uploader sert à la fois de d'upload et de suppression de l'image, je m'explique :

public function uploader($Location =  null){

        $destination = IMG_DIR;
        $directory_Images = BASE_URL.DS.'public'.DS.'attachmentImg';

        if($Location){
            if($this->Request->is('delete')) {
                $image_Delete = $destination . DS . $Location;
                unlink($image_Delete);
            }
        }else{
            if($this->Request->is('post')){
                $location = basename($_FILES['image']['name']);
                $uploadfile = $destination . $location;

                move_uploaded_file($_FILES['image']['tmp_name'], $uploadfile);
                // debug($directory_Images);
                $results = ['id' => $location, 'url' => $directory_Images.DS.$location];
                header('Content-Type: application/json');
                echo json_encode($results);
            }
        }

Afin d'afficher les images que vous avez pu uploader dans divers articles et les réutiliser. Voici une solution
Dans votre controller article, vous aller chercher toutes les images uplodaer et vous les lister comme la fonction. A l'issue vous faites un json encode et vous l'envoyer avec la fonction compact()

public function edit($idArticle){

            $directory_Images = ROOT.DS.'public'.DS.'attachmentImg';
            $directory_Images_2 = BASE_URL.DS.'public'.DS.'attachmentImg';

            $all_Image = array_diff(scandir($directory_Images), array('..', '.', '.DS_Store'));

            $images = [];
            foreach ($all_Image as $k => $loc){
                $images[] = ['id' => basename($loc), 'url' => $directory_Images_2.DS.$loc];
            }
            $imagesForMarkdown = json_encode($images);
            ..;
            ..
            ..
            ..
                    $this->Render('admin.article.edit', compact('form' , 'List_Categorie_Recursive', 'imagesForMarkdown'));

Ensuite dans votre vue d'edition, vous appeler avec jquery la librairir meditor


    $(document).ready(function() {

        var md = new MdEditor('.meditor', {
            uploader: url,
            preview: true,

            images: <?php echo $imagesForMarkdown;?>
        });
    });

Et voila à vous de jouer, pour mettre les liens en BDD et ainsi de suite.

Hello,

Pour ton point 1) si c'est pas inséré seulement en bdd et que l'upload est fait, c'est que tu as un soucis de requête sql (surement le nom du fichier)

Pour le point 2) en recherchant un minimum j'ai trouver ça:

<?php

$dir = 'photos/miniatures/*.{jpg,jpeg,gif,png}';
$files = glob($dir,GLOB_BRACE);

echo 'Listing des images du repertoire miniatures <br />';
foreach($files as $image)
{ 
   $f= str_replace($repertoire,'',$image);
   echo $f.'<br />';
}
?>

J'aimerais t'aider mais sans code, c'est pas aisé

Mizzou
Auteur

Bonjour, encore merci de bien vouloir m'aider voici le code de ma édition ou ajout d'un article

  var url = '<?php echo \kernel\core\Url::Url("admin/image/uploader")?>';
    var md = new MdEditor('#content', {
        uploader: url,
        preview: true,
        images: [
            {id: '1.jpg', url: '/Labs/MVC/public/attachmentImg/21f4546c4db8e436fda97edd76dd3dbd.jpeg'},
            {id: '1.jpg', url: 'http://lorempicsum.com/futurama/200/200/2'},
            {id: '1.jpg', url: 'http://lorempicsum.com/futurama/200/200/3'},
            {id: '1.jpg', url: 'http://lorempicsum.com/futurama/200/200/4'}
        ]

    });

Voici le code de ma fonction uploader

$destination = IMG_DIR;
        $location = basename($_FILES['image']['name']);
        $uploadfile = $destination . $location;

        move_uploaded_file($_FILES['image']['tmp_name'], $uploadfile);

        $file = '1.jpg';

        $directory_Images = ROOT.DS.'public'.DS.'attachmentImg';
        // $all_Image = scandir($directory_Images);
        $all_Image = array_diff(scandir($directory_Images), array('..', '.', '.DS_Store'));

        // debug($all_Image);

        foreach ($all_Image as $k => $loc){
            $results[] = ['id' => basename($loc), 'url' => $directory_Images.DS.$loc];
        }
        echo json_encode($results);

Le script est tres succint , je suis en phase de test. L'image est bien uploader dans le fichier .
Mais je ne vois pas ou je puis ou insérer le resultats qui en debug fonctionne bien, dans le js du markdown.

faut que tu fasse ta requête d'insertion dans ton foreach

Mizzou
Auteur

Humm , oki je vais faire cela, mais ce que je ne comprends pas , c'est que cela ne va pas changer le probleme que j'insere ou non, mon url dans la base de donnees.