Comment compter??

Eléphant du PHP | 418 Messages

14 févr. 2012, 04:15

Salutation à tous

Je cherche le moyen de compter le nombre de ligne pour un forum, dans un code En effet à l'instar du site du zéro et d'autre, j'aimerais avoir le nombre de ligne sur le coté des codes

Exemples:

Code : Tout sélectionner

1. Ligne 1 2. Ligne 2 3. Ligne 3 ...
Merci de votre aide, sachant que j'ai créer un zcode d'après le tutoriel de se site Lien

Cordialement

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

14 févr. 2012, 06:53

Salut,

Au pif (vu le code) va falloir compter les <br /> Dans la balise code (ou celle qui te sert à délimiter les portions de code.

Je serais curieux de savoir si l'auteur ne connais pas nl2br ou s'il y a une raison particulière d'utiliser un preg_match ^^

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 418 Messages

14 févr. 2012, 08:16

J'utilise nl2br

voici mon code: (j'aurais dû le mettre plus tot Oo)
<?php
function parseZCode($content) {
	// Parsage des balises
	$zcode = array(  
		'`<gras>(.+)<\/gras>`isU',  
		'`<italique>(.+)<\/italique>`isU',
		'`<souligne>(.+)<\/souligne>`isU',
		'`<lien>(.+)<\/lien>`isU',
		'`<lien url="(.+)">(.+)<\/lien>`isU',
		'`<image>(.+)<\/image>`isU',
		'`<citation nom="(.+)">(.+)<\/citation>`isU',
		'`<citation nom="(.+)">(.+)<\/citation>`isU',
		'`<citation nom="(.+)">(.+)<\/citation>`isU',
		'`<citation>(.+)<\/citation>`isU',
		'`<citation>(.+)<\/citation>`isU',
		'`<citation>(.+)<\/citation>`isU',
		'`<code>(.+)<\/code>`isU',
		'`<code type="(.+)">(.+)<\/code>`isU',
		'`<secret>(.+)<\/secret>`isU',
		'`<taille valeur="(.+)">(.+)</taille>`isU',
		'`<couleur nom="(.+)">(.+)<\/couleur>`isU',
		'`<police nom="(.+)">(.+)<\/police>`isU',
		'`<liste><br(?: /)>(.+)`isU',
		'`<\/liste>(<br(?: /)>)`isU',
		'`<puce>(.+)<\/puce><br(?: /)>`isU'
	);  

	$html = array(  
		'<b>$1</b>',  
		'<i>$1</i>',
		'<u>$1</u>', 
		'<a href="$1">$1</a>',
		'<a href="$1" title="$2">$2</a>',
		'<img src="$1" alt="Image" />',
		'<span class="citation">Citation : $1</span><div class="citation2">$2</div>',
		'<span class="citation">Citation : $1</span><div class="citation2">$2</div>',
		'<span class="citation">Citation : $1</span><div class="citation2">$2</div>',
		'<span class="citation">Citation</span><div class="citation2">$1</div>',
		'<span class="citation">Citation</span><div class="citation2">$1</div>',
		'<span class="citation">Citation</span><div class="citation2">$1</div>',
		'<span class="code">Code : </span><div class="code2"><code>$1</code></div>',
		'<span class="code">Code $1: </span><div class="code2"><code>$2</code></div>',
		'<span class="spoiler">Secret <a href="#" onclick="switch_spoiler_hidden(this); return false;">(cliquez pour afficher)</a></span><div class="spoiler2" return false;"><div class="spoiler3">$1</div></div></span>',
		'<span class="$1">$2</span>',
		'<span class="$1">$2</span>',
		'<span class="$1">$2</span>',
		'<ul>$1',
		'</ul>',
		'<li>$1</li>'
	);
	// $content = htmlspecialchars_decode($content);	
	$content = htmlspecialchars($content);
	$nb_lignes = substr_count($content, "<br />");
	$content = nl2br($content);
	$content = preg_replace($zcode, $html, $content);
	
	// parsage des smilies
	$smiliesName = array(':magicien:', ':colere:', ':diable:', ':ange:', ':ninja:', '>_<', ':pirate:', ':zorro:', ':honte:', ':soleil:', ':snif:', ':waw:', ':\\)', ':D', ';\\)', ':p', ':lol:', ':euh:', ':\\(', ':o', ':colere2:', 'o_O', '\\^\\^', ':\\-°');
	$smiliesUrl  = array('magicien.png', 'angry.gif', 'diable.png', 'ange.png', 'ninja.png', 'pinch.png', 'pirate.png', 'zorro.png', 'rouge.png', 'soleil.png', 'snif.png', 'waw.png', 'smile.png', 'heureux.png', 'clin.png', 'langue.png', 'rire.gif', 'unsure.gif', 'triste.png', 'huh.png', 'mechant.png', 'blink.gif', 'hihi.png', 'siffle.png');
	$smiliesPath = "images/smilies/";
	
	for ($i = 0, $c = count($smiliesName); $i < $c; $i++) {
		$content = preg_replace('`' . $smiliesName[$i] . '`isU', '<img src="' . $smiliesPath . $smiliesUrl[$i] . '" alt="smiley" />', $content);
	}
	
	// Rtours &agrave; la ligne
	
	return $content;
}
?>
Cordialement

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

14 févr. 2012, 09:41

J'utilise nl2brvoici mon code: (j'aurais dû le mettre plus tot Oo)
ah vi effectivement je me suis basé sur le code du tuto dont tu fournis le lien plus haut :mrgreen:
// Rtours à la ligne
	$content = preg_replace('`\n`isU', '<br />', $content); 
revenons a nos montons.
pourquoi utiliser un div autour des balise code au final ? code est aussi une balise de type bloc tu peux très bien l'utiliser sans le div et lui appliquer ta class css
<code  class="code2">$1</code>
par exemple

pourquoi remplacer <code></code> par un <span class="code"></span> ? cette balise est la bonne.

Par contre si tu veux coloriser le code je peux comprendre, par contre il va te falloir utiliser preg_replace_callback.
dans la fonction de callback tu peux utiliser substr_count.

a partir de la tu pourra compter les saut de ligne et ensuite ajouter la colo du code, si tu le souhaite, pour cela je te conseil GeSHi ;)


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 418 Messages

14 févr. 2012, 10:33

Alors, <span class=code> ça permet de mettre Code: (éventuellement le type de code)

Et pour la div, je vais essayer, pourquoi pas après tout ^^

Oui j'aimerais colorer le texte et compter les lignes, mais je ne sais pas comment utiliser cette fonction (enfin ses)

J'aurais besoin d'un exemple fonctionnel pour me permettre de comprendre le fonctionnement.

J'ai essayer :
<?php
function parseZCode($content) {
	// Parsage des balises
	$zcode = array(  
		'`<gras>(.+)<\/gras>`isU',  
		'`<italique>(.+)<\/italique>`isU',
		'`<souligne>(.+)<\/souligne>`isU',
		'`<lien>(.+)<\/lien>`isU',
		'`<lien url="(.+)">(.+)<\/lien>`isU',
		'`<image>(.+)<\/image>`isU',
		'`<citation nom="(.+)">(.+)<\/citation>`isU',
		'`<citation nom="(.+)">(.+)<\/citation>`isU',
		'`<citation nom="(.+)">(.+)<\/citation>`isU',
		'`<citation>(.+)<\/citation>`isU',
		'`<citation>(.+)<\/citation>`isU',
		'`<citation>(.+)<\/citation>`isU',
		'`<secret>(.+)<\/secret>`isU',
		'`<taille valeur="(.+)">(.+)</taille>`isU',
		'`<couleur nom="(.+)">(.+)<\/couleur>`isU',
		'`<police nom="(.+)">(.+)<\/police>`isU',
		'`<liste><br(?: /)>(.+)`isU',
		'`<\/liste>(<br(?: /)>)`isU',
		'`<puce>(.+)<\/puce><br(?: /)>`isU'
	);  

	$html = array(  
		'<b>$1</b>',  
		'<i>$1</i>',
		'<u>$1</u>', 
		'<a href="$1">$1</a>',
		'<a href="$1" title="$2">$2</a>',
		'<img src="$1" alt="Image" />',
		'<span class="citation">Citation : $1</span><div class="citation2">$2</div>',
		'<span class="citation">Citation : $1</span><div class="citation2">$2</div>',
		'<span class="citation">Citation : $1</span><div class="citation2">$2</div>',
		'<span class="citation">Citation</span><div class="citation2">$1</div>',
		'<span class="citation">Citation</span><div class="citation2">$1</div>',
		'<span class="citation">Citation</span><div class="citation2">$1</div>',
		'<span class="spoiler">Secret <a href="#" onclick="switch_spoiler_hidden(this); return false;">(cliquez pour afficher)</a></span><div class="spoiler2" return false;"><div class="spoiler3">$1</div></div></span>',
		'<span class="$1">$2</span>',
		'<span class="$1">$2</span>',
		'<span class="$1">$2</span>',
		'<ul>$1',
		'</ul>',
		'<li>$1</li>'
	);
	// $content = htmlspecialchars_decode($content);	
	$content = htmlspecialchars($content);
	$nb_lignes = substr_count($content, "<br />");
	$content = nl2br($content);
	$content = preg_replace($zcode, $html, $content);
	
	$pattern = '`<code>(.+)<\/code>`isU';
	$content = preg_replace_callback($pattern, function($matches)
	{
		$code = $matches[1];
		return '<span class="code">Code : </span><code class="code2">' . $code . '</code>';

	}, $content);

	// parsage des smilies
	$smiliesName = array(':magicien:', ':colere:', ':diable:', ':ange:', ':ninja:', '>_<', ':pirate:', ':zorro:', ':honte:', ':soleil:', ':snif:', ':waw:', ':\\)', ':D', ';\\)', ':p', ':lol:', ':euh:', ':\\(', ':o', ':colere2:', 'o_O', '\\^\\^', ':\\-°');
	$smiliesUrl  = array('magicien.png', 'angry.gif', 'diable.png', 'ange.png', 'ninja.png', 'pinch.png', 'pirate.png', 'zorro.png', 'rouge.png', 'soleil.png', 'snif.png', 'waw.png', 'smile.png', 'heureux.png', 'clin.png', 'langue.png', 'rire.gif', 'unsure.gif', 'triste.png', 'huh.png', 'mechant.png', 'blink.gif', 'hihi.png', 'siffle.png');
	$smiliesPath = "images/smilies/";
	
	for ($i = 0, $c = count($smiliesName); $i < $c; $i++) {
		$content = preg_replace('`' . $smiliesName[$i] . '`isU', '<img src="' . $smiliesPath . $smiliesUrl[$i] . '" alt="smiley" />', $content);
	}
	
	// Rtours &agrave; la ligne
	
	return $content;
}
?>
Mais je ne sais pas quoi faire d'autre Oo

Cordialement

Eléphant du PHP | 418 Messages

15 févr. 2012, 20:54

J'ai installer GeSHi mais j'ai un soucis

Tout fonctionne sauf que j'ai pas les bons caractères ^^

Voici mon code
<?php
if (!@include '../geshi.php') {
    if (!@include 'geshi.php') {
        die('Could not find geshi.php - make sure it is in your include path!');
    } else {
        $path = './';
    }
} else {
    $path = '../';
}
function parseZCode($content) {
	// Parsage des balises
	$zcode = array(  
		'`<gras>(.+)<\/gras>`isU',  
		'`<italique>(.+)<\/italique>`isU',
		'`<souligne>(.+)<\/souligne>`isU',
		'`<lien>(.+)<\/lien>`isU',
		'`<lien url="(.+)">(.+)<\/lien>`isU',
		'`<image>(.+)<\/image>`isU',
		'`<citation nom="(.+)">(.+)<\/citation>`isU',
		'`<citation nom="(.+)">(.+)<\/citation>`isU',
		'`<citation nom="(.+)">(.+)<\/citation>`isU',
		'`<citation>(.+)<\/citation>`isU',
		'`<citation>(.+)<\/citation>`isU',
		'`<citation>(.+)<\/citation>`isU',
		'`<secret>(.+)<\/secret>`isU',
		'`<taille valeur="(.+)">(.+)</taille>`isU',
		'`<couleur nom="(.+)">(.+)<\/couleur>`isU',
		'`<police nom="(.+)">(.+)<\/police>`isU',
		'`<liste><br(?: /)>(.+)`isU',
		'`<\/liste>(<br(?: /)>)`isU',
		'`<puce>(.+)<\/puce><br(?: /)>`isU'
	);  

	$html = array(  
		'<b>$1</b>',  
		'<i>$1</i>',
		'<u>$1</u>', 
		'<a href="$1">$1</a>',
		'<a href="$1" title="$2">$2</a>',
		'<img src="$1" alt="Image" />',
		'<span class="citation">Citation : $1</span><div class="citation2">$2</div>',
		'<span class="citation">Citation : $1</span><div class="citation2">$2</div>',
		'<span class="citation">Citation : $1</span><div class="citation2">$2</div>',
		'<span class="citation">Citation</span><div class="citation2">$1</div>',
		'<span class="citation">Citation</span><div class="citation2">$1</div>',
		'<span class="citation">Citation</span><div class="citation2">$1</div>',
		'<span class="spoiler">Secret <a href="#" onclick="switch_spoiler_hidden(this); return false;">(cliquez pour afficher)</a></span><div class="spoiler2" return false;"><div class="spoiler3">$1</div></div></span>',
		'<span class="$1">$2</span>',
		'<span class="$1">$2</span>',
		'<span class="$1">$2</span>',
		'<ul>$1',
		'</ul>',
		'<li>$1</li>'
	);
	// $content = htmlspecialchars_decode($content);	
	
	$content = htmlspecialchars($content);
	$content = nl2br($content);
	
	$pattern = '`<code>(.+)<\/code>`isU';
	$content = preg_replace_callback($pattern, function($matches)
	{
		$code = $matches[1];
		$type='';
			if ( get_magic_quotes_gpc() ) $code = stripslashes($code);
			if ( !strlen(trim($code)) )
			{
				$type = preg_replace('#[^a-zA-Z0-9\-_]#', '', $type);
				$code = implode('', @file($path . 'geshi/' . $type . '.php'));
				$type = 'php';
			}
			$geshi = new GeSHi($code, $type);
    
    
    // Enable line numbers. We want fancy line numbers, and we want every 5th line number to be fancy
	$geshi->enable_line_numbers(GESHI_FANCY_LINE_NUMBERS, 5);
	$geshi->get_stylesheet();
    
		return '<div class="codebox"><span class="code">Code : </span><div class="code2"><code>' . $geshi->parse_code() . '</code></div></div>';

	}, $content);
	
	$pattern = '`<code type="(.+)">(.+)<\/code>`isU';
	$content = preg_replace_callback($pattern, function($matches)
	{
		$type = $matches[1];
		$code = $matches[2];
			if ( get_magic_quotes_gpc() ) $code = stripslashes($code);
			if ( !strlen(trim($code)) )
			{
				$type = preg_replace('#[^a-zA-Z0-9\-_]#', '', $type);
				$code = implode('', @file($path . 'geshi/' . $type . '.php'));
				$type = 'php';
			}
			$geshi = new GeSHi($code, $type);
    
    
    // Enable line numbers. We want fancy line numbers, and we want every 5th line number to be fancy
	$geshi->enable_line_numbers(GESHI_FANCY_LINE_NUMBERS, 5);
	$geshi->get_stylesheet();
    
		return '<div class="codebox"><span class="code">Code ' . $type . ': </span><div class="code2"><code>' . $geshi->parse_code() . '</code></div></div>';

	}, $content);
	$content = preg_replace($zcode, $html, $content);

	// parsage des smilies
	$smiliesName = array(':magicien:', ':colere:', ':diable:', ':ange:', ':ninja:', '>_<', ':pirate:', ':zorro:', ':honte:', ':soleil:', ':snif:', ':waw:', ':\\)', ':D', ';\\)', ':p', ':lol:', ':euh:', ':\\(', ':o', ':colere2:', 'o_O', '\\^\\^', ':\\-°');
	$smiliesUrl  = array('magicien.png', 'angry.gif', 'diable.png', 'ange.png', 'ninja.png', 'pinch.png', 'pirate.png', 'zorro.png', 'rouge.png', 'soleil.png', 'snif.png', 'waw.png', 'smile.png', 'heureux.png', 'clin.png', 'langue.png', 'rire.gif', 'unsure.gif', 'triste.png', 'huh.png', 'mechant.png', 'blink.gif', 'hihi.png', 'siffle.png');
	$smiliesPath = "images/smilies/";
	
	for ($i = 0, $c = count($smiliesName); $i < $c; $i++) {
		$content = preg_replace('`' . $smiliesName[$i] . '`isU', '<img src="' . $smiliesPath . $smiliesUrl[$i] . '" alt="smiley" />', $content);
	}
	
	// Rtours &agrave; la ligne
	
	return $content;
}
?>
Et une image pour que vous compreniez l’erreur:
Image

Merci de m'aider en me disant comment résoudre ce problème.

Cordialement

Eléphant du PHP | 418 Messages

15 févr. 2012, 21:59

Sujet résolut

Voici le code final qui fonctionne à merveille.

Code : Tout sélectionner

<?php if (!@include '../geshi.php') { if (!@include 'geshi.php') { die('Could not find geshi.php - make sure it is in your include path!'); } else { $path = './'; } } else { $path = '../'; } function parseZCode($content) { // Parsage des balises $zcode = array( '`<gras>(.+)<\/gras>`isU', '`<italique>(.+)<\/italique>`isU', '`<souligne>(.+)<\/souligne>`isU', '`<lien>(.+)<\/lien>`isU', '`<lien url="(.+)">(.+)<\/lien>`isU', '`<image>(.+)<\/image>`isU', '`<citation nom="(.+)">(.+)<\/citation>`isU', '`<citation nom="(.+)">(.+)<\/citation>`isU', '`<citation nom="(.+)">(.+)<\/citation>`isU', '`<citation>(.+)<\/citation>`isU', '`<citation>(.+)<\/citation>`isU', '`<citation>(.+)<\/citation>`isU', '`<secret>(.+)<\/secret>`isU', '`<taille valeur="(.+)">(.+)</taille>`isU', '`<couleur nom="(.+)">(.+)<\/couleur>`isU', '`<police nom="(.+)">(.+)<\/police>`isU', '`<liste><br(?: /)>(.+)`isU', '`<\/liste>(<br(?: /)>)`isU', '`<puce>(.+)<\/puce><br(?: /)>`isU', '`<br(?: /)>`isU' ); $html = array( '<b>$1</b>', '<i>$1</i>', '<u>$1</u>', '<a href="$1">$1</a>', '<a href="$1" title="$2">$2</a>', '<img src="$1" alt="Image" />', '<span class="citation">Citation : $1</span><div class="citation2">$2</div>', '<span class="citation">Citation : $1</span><div class="citation2">$2</div>', '<span class="citation">Citation : $1</span><div class="citation2">$2</div>', '<span class="citation">Citation</span><div class="citation2">$1</div>', '<span class="citation">Citation</span><div class="citation2">$1</div>', '<span class="citation">Citation</span><div class="citation2">$1</div>', '<span class="spoiler">Secret <a href="#" onclick="switch_spoiler_hidden(this); return false;">(cliquez pour afficher)</a></span><div class="spoiler2" return false;"><div class="spoiler3">$1</div></div></span>', '<span class="$1">$2</span>', '<span class="$1">$2</span>', '<span class="$1">$2</span>', '<ul>$1', '</ul>', '<li>$1</li>', '' ); // $content = htmlspecialchars_decode($content); $content = htmlspecialchars($content); $content = nl2br($content); $pattern = '`<code>(.+)<\/code>`isU'; $content = preg_replace_callback($pattern, function($matches) { $code = $matches[1]; // $code = htmlspecialchars_decode($code); $type=''; if ( get_magic_quotes_gpc() ) $code = stripslashes($code); if ( !strlen(trim($code)) ) { $type = preg_replace('#[^a-zA-Z0-9\-_]#', '', $type); $code = implode('', @file($path . 'geshi/' . $type . '.php')); $type = 'php'; } $geshi = new GeSHi($code, $type); $geshi->enable_line_numbers(GESHI_FANCY_LINE_NUMBERS, 5); $geshi->set_overall_style('color: #000066; background-color: #f0f0f0;', true); $geshi->set_line_style(' color: #003030;', 'font-weight: bold; color: #006060;', true); $geshi->set_code_style('color: #000020;', 'color: #000020;'); return '<div class="codebox"><span class="code">Code : </span><div class="code2"><code>' . $geshi->parse_code() . '</code></div></div>'; }, $content); $pattern = '`<code type="(.+)">(.+)<\/code>`isU'; $content = preg_replace_callback($pattern, function($matches) { $type = $matches[1]; $code = $matches[2]; $code = htmlspecialchars_decode($code); if ( get_magic_quotes_gpc() ) $code = stripslashes($code); if ( !strlen(trim($code)) ) { $type = preg_replace('#[^a-zA-Z0-9\-_]#', '', $type); $code = implode('', @file($path . 'geshi/' . $type . '.php')); $type = 'php'; } $geshi = new GeSHi($code, $type); $geshi->enable_line_numbers(GESHI_FANCY_LINE_NUMBERS, 5); $geshi->set_overall_style('color: #000066; background-color: #f0f0f0;', true); $geshi->set_line_style(' color: #003030;', 'font-weight: bold; color: #006060;', true); $geshi->set_code_style('color: #000020;', 'color: #000020;'); return '<div class="codebox"><span class="code">Code ' . $type . ': </span><div class="code2"><code>' . $geshi->parse_code() . '</code></div></div>'; }, $content); $content = preg_replace($zcode, $html, $content); // parsage des smilies $smiliesName = array(':magicien:', ':colere:', ':diable:', ':ange:', ':ninja:', '>_<', ':pirate:', ':zorro:', ':honte:', ':soleil:', ':snif:', ':waw:', ':\\)', ':D', ';\\)', ':p', ':lol:', ':euh:', ':\\(', ':o', ':colere2:', 'o_O', '\\^\\^', ':\\-°'); $smiliesUrl = array('magicien.png', 'angry.gif', 'diable.png', 'ange.png', 'ninja.png', 'pinch.png', 'pirate.png', 'zorro.png', 'rouge.png', 'soleil.png', 'snif.png', 'waw.png', 'smile.png', 'heureux.png', 'clin.png', 'langue.png', 'rire.gif', 'unsure.gif', 'triste.png', 'huh.png', 'mechant.png', 'blink.gif', 'hihi.png', 'siffle.png'); $smiliesPath = "images/smilies/"; for ($i = 0, $c = count($smiliesName); $i < $c; $i++) { $content = preg_replace('`' . $smiliesName[$i] . '`isU', '<img src="' . $smiliesPath . $smiliesUrl[$i] . '" alt="smiley" />', $content); } // Rtours &agrave; la ligne return $content; } ?>
Merci pour votre aide

Cordialement