[EDIT] J'ai résolu mon problème il y avait quelques lignes du helpers à modifié, quand j'aurai fini mon site je ferai un petit tuto dessus ça sera ma contribution.

:)

6 réponses


tapesec
Auteur
Réponse acceptée

Désolé j'ai pas accès au site du travail. Oui en Html standard ça fonctionne nickel ce qui prouve bien le problème vient du passage au bbcode parser. Dans le helper il y a cette fonction [code]/** * Parser to use in the preview * @param string $content The content to be parsed. * @return string Parsed content. */ function parse($content, $parser = '') { // This Helper is designed to be used with several kinds of parser // in a same project. // Drop your favorite parsers in the /vendor/ folder and edit lines below. switch($parser) { case 'bbcode': App::import('Vendor', 'bbcode', array('file' => 'bbcode'.DS.'markitup.bbcode-parser.php')); $parsed = BBCode2Html($content); break; case 'textile': //App::import('Vendor','classTextile', array('file'=>'classTextile.php')); //$psr = new Textile; $content = $psr->TextileThis($content); break; case 'markdown': // App::import('Vendor', 'markdown', array('file' => 'myFavoriteMarkDownParser')); // $parsed = myFavoriteMarkDownParser($content); break; default: // App::import('Vendor', 'favorite', array('file' => 'myFavoriteFavoriteParser')); // $parsed = myFavoriteFavoriteParser($content); } return $content; }[/code] J'ai dé commenté la case BBcode, ce qui fait si j'ai bien compris qu'il cherche à importer dans le dossier Vendor/bbcode/ (sur mon cake çà s'écrit vendors je sais pas si c'est grave)le fichier 'markitup.bbcode-parser.php' qui est mon parser bbcode que j'ai dl sur le site markitup. Dans la ligne en dessous a '$parsed = ' J'ai mis BBcode2html($content) qui correspond à la fonction de mon parser voici le code de ce dernier. [code]define ("EMOTICONS_DIR", "/images/emoticons/"); function BBCode2Html($text) { $text = trim($text); // BBCode [code] if (!function_exists('escape')) { function escape($s) { global $text; $text = strip_tags($text); $code = $s[1]; $code = htmlspecialchars($code); $code = str_replace("[", "[", $code); $code = str_replace("]", "]", $code); return '

'.$code.'

'; } } $text = preg_replace_callback('/[code](.*?)[\/code]/ms', "escape", $text); // Smileys to find... $in = array( ':)', ':D', ':o', ':p', ':(', ';)' ); // And replace them by... $out = array( ' ', ' ', ' ', ' ', ' ', ' ' ); $text = str_replace($in, $out, $text); // BBCode to find... $in = array( '/[b](.*?)[\/b]/ms', '/[i](.*?)[\/i]/ms', '/[u](.*?)[\/u]/ms', '/[img](.*?)[\/img]/ms', '/[email](.*?)[\/email]/ms', '/[url\="?(.*?)"?](.*?)[\/url]/ms', '/[size\="?(.*?)"?](.*?)[\/size]/ms', '/[color\="?(.*?)"?](.*?)[\/color]/ms', '/[quote](.*?)[\/quote]/ms', '/[list\=(.*?)](.*?)[\/list]/ms', '/[list](.*?)[\/list]/ms', '/[\]\s?(.\?)\n/ms' ); // And replace them by... $out = array( ' \1', '\1', '<u>\1</u>', ' ', ' \1', ' \2', '\2', '\2', '> \1', '
\2', '
\1', '- \1
' ); $text = preg_replace($in, $out, $text); // paragraphs $text = str_replace("\r", "", $text); $text = "

".preg_replace("/(\n){2,}/", "

", $text)."

"; $text = nl2br($text); // clean some tags to remain strict // not very elegant, but it works. No time to do better ;) if (!function_exists('removeBr')) { function removeBr($s) { return str_replace("
", "", $s[0]); } } $text = preg_replace_callback('/

(.*?)/ms', "removeBr", $text);
    $text = preg_replace('/(.*?)/ms', "\\1", $text);

    $text = preg_replace_callback('/

(.*?)/ms', "removeBr", $text); $text = preg_replace('/

(.*?)/ms', "
\1", $text); return $text; } ?>[/code] J'ai donc crée le layout : /views/layouts/preview.ctp [code]<?php echo $content_for_layout ?> [/code] et le template pour afficher la fenêtre preview dans : views/posts/preview.ctp [code]<?php echo $markitup->parse($content, $parser) ; echo '

';
print_r ($content);
print_r ($parser);
echo '

'; ?>[/code] Tu vois j'ai essayé de débugger, quand je tape un mot en gras **essai** et je clique sur preview il apparait dans la fenêtre preview : ['b]fffffffff['/b] correspond au résultat de la fonction ['b]fffffffff['/b]bbcode qui correspond à print_r($content) et print_r($parser). (j'ai mis des ' pour pas que ton bbcode fonctionne LUI, chez moi il faut bien comprendre qu'on voit apparaitre les balises ca marche pas.) Conclusion le contenu du textarea ne passe pas à la moulinette du parser et pourtant l'argument bbcode passe bien. Voilà j'ai essayé dêtre le plus clair possible dans cette usine à gaz ;) PS : J'ai édité mon tout premier message ce matin c'est mon code le plus à jour :) Sauve moi grand chef je t'en prie

tapesec
Auteur

je l'ai regardé c'est la première chose que j'ai faites, reste à faire passer les infos traité par les regex en bdd et vice versa c'est ça qui est dur

tapesec
Auteur

voilà je reviens vers vous apres une aprés midi de recherche, je vais vous exposé où j'en suis peut être sauriez vous trouvé le problème finale qui débloquera tout.

Je résume : j'ai téléchargé donc "mark it up" et le setbbcode + le parser bbcode (nommé parser.bbcode-parser.php), puis le helper à cette page : Texte du lien j'ai ensuite mis à jour ce helper pour la version 1.3 de cakePhP.

1/ Dans ce helpers (nommé markitup.php) vers la ligne 100 j'ai dé-commenté la condition 'bbcode'

function parse($content, $parser = '') {
    // This Helper is designed to be used with several kinds of parser
    // in a same project.
        // Drop your favorite parsers in the /vendor/ folder and edit lines below.
        switch($parser) {
            case 'bbcode':
                 App::import('Vendor', 'bbcode', array('file' => 'markitupBbcodeParser'));
                 $parsed = markitupBbcodeParser($content);
                break;
            case 'textile':
        //App::import('Vendor','classTextile', array('file'=>'classTextile.php'));
        //$psr = new Textile;
            $content = $psr->TextileThis($content);
                break; etc ...

Un premier doute, faut t'il mettre 'file' => 'markitupBbcodeParser' ou alors le nom du fichier exact du parser à savoir 'markitup.bbcode-parser.php'.

2/ dans posts_controller.php j'ai mis la méthode suivante (conformément à ce qui est préconisé dans le helper Texte du lien)

function preview($parser = 'bbcode'){
        $this->layout = 'preview';
        $this->set('parser', $parser);        
        $this->set('content', $this->data);
        $this->autoRender = true;
        }

Là, j'ai un autre doute faut t'il mettre en argument 'bbcode' ou laissé '' comme c'est montré à la base ?

3/ j'ai crée aussi comme demandé dans layout un preview.ctp et j'ai mis dedans juste ça

<?php echo $markitup->parse($content, $parser); ?>

Je ne sais pas si c'est bien, c'est ce que j'ai cru comprendre dans le tuto du helper mais je vois pas à quoi ça sert ce layout.

4/ Dans edit.ctp j'ai fait la chose suivante (je vous met tous le code là)

<?php                                     
echo $form->create('Post', array('id' => 'newArticle', 'url' => array('action' => 'edit', 'div' => false)));
echo '<h3>Nouvel article</h3>';
echo '<p>Remplissez correctement chaque champs avant de valider votre nouvel article</p>';
echo '</p>';
echo $form->input('Post.titre', array('label' => 'Titre : ', 'div' => false));
echo $form->input('Post.category_id', array('label' => 'Tag : ', 'options' => $cats, 'div' => false));
echo '<p>';
echo $markitup->editor('Post.contenu', array('cols' => 75, 'rows' => 16, 'label' => false), array('set' => 'bbcode', 'parser' => '/posts/preview/'));
echo $form->input('Post.id', array('div' => false));
echo $form->submit('/theme/img/envoyer.png', array('div' => false, 'class' => 'submit'));
echo '</p>';
?>

5/ Dans admin.ctp j'ai mis en entête :

<head>
        <meta http-equiv="Content-type" content="text/html; charset=UTF-8"/>
        <?php echo $html->css('/theme/css/style.css'); 
              echo $html->css('/js/markitup/skins/simple/style.css');
              echo $html->css('/js/markitup/sets/bbcode/style.css');
        ?>
        <script class="jsbin" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
        <!--[if lt IE 9]>
            <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
        <![endif]-->
        <title>Frienddblog</title>
    </head

En bas de page :

<?php echo $html->script('/js/jquery/bbcode.js'); ?>
    <?php echo $html->script('/theme/js/click.js'); //ca c'est d'autres script à moi rien a voir ?>
    <?php echo $html->script('/theme/js/popup.js'); //ca c'est d'autres script à moi rien a voir ?>
    <?php echo $html->script('/js/markitup/jquery.markitup.js'); ?>
    <?php echo $html->script('/js/markitup/sets/bbcode/set.js'); ?>

6/ en ce qui concerne le fichier set.js qui contient la config des balises bbcode il y a cettre phrase

// ----------------------------------------------------------------------------
// markItUp!
// ----------------------------------------------------------------------------
// Copyright (C) 2008 Jay Salvat
// http://markitup.jaysalvat.com/
// ----------------------------------------------------------------------------
// BBCode tags example
// http://en.wikipedia.org/wiki/Bbcode
// ----------------------------------------------------------------------------
// Feel free to add more tags
// ----------------------------------------------------------------------------
mySettings = {
    previewParserPath:  '/vendors/markitup.bbcode-parser.php', // path to your BBCode parser
    markupSet: 
        {name:'Bold', key:'B', openWith:'<strong>', closeWith:'</strong>'},
        {name:'Italic', key:'I', openWith:'<em>', closeWith:'</em>'}, etc ...

est ce que je fais bien de mettre dans previewParserPath le lien vers mon fichier du parser ? de base c'est vide.

Voilà bon malgré tout ça j'ai les problèmes suivants :

1 - Le textaréa apparait bien mais les boutons b i u etc... sont pas en ligne mais en vertical (ca encore c'est qu'un problème de mise en page c'est pas grave ils fonctionnent quand même)

2- Quand je tape un texte que j'entoure de balise bbcode quand je fais prévisualiser ça convertit pas du tout en html et non plus quand j'envoie le message, ça l'écrit en bb code le parser ne fonctionne pas du tout.

Voilà j'ai mis le maximum d'élément, je suis désabusé là je vois pas le pb .. . quelqu'un est passé par cette galère ?

Merci d'avance désolé de vous saouler avec ça.

tapesec
Auteur

Je fais un petit up personne n'a d'idée ? comment vous faites vous pour integrer mark it up dans cake php ?

Oula ya trop d'élément :D
En HTML standart tu arrive à le faire fonctionner ?