login  Naam:   Wachtwoord: 
Registreer je!
 Forum

string nummeren

Offline lolll - 24/07/2010 13:34
Avatar van lolllLid Ik zou graag voor mijn BBcode-script , al wat tussen [ code ] en [ / code ] staat automatisch nummeren.(Zoals hier op sitemasters ook.) Weet iemand hoe ik dat met een scriptje kan oplossen ik heb zelf al iets geprobeerd, maar dat werkte niet.
Voorbeeldje van wat ik bedoel :
  1. <- hier zal nummer 1 staan,
  2. <- hier nummer 2,
  3. <- enz... Dat wil ik dus hebben.


Grt,Lolll

8 antwoorden

Gesponsorde links
Offline vinTage - 24/07/2010 13:48
Avatar van vinTage Nieuw lid Je kan bv je string exploden op \n en dan middels een foreach, een tellertje laten optellen wat je gebruikt om op te tellen.

  1. <?php
  2. $str = "hallo
  3. hoe
  4. gaat
  5. het";
  6.  
  7. $exploded = explode("\n", $str);
  8. $nr = 0;
  9.  
  10. foreach($exploded as $newline)
  11. {
  12. echo $nr++ . " " . $newline . "<br />";
  13. }
Offline lolll - 24/07/2010 14:25 (laatste wijziging 24/07/2010 14:29)
Avatar van lolll Lid ok, thx.
Ik heb mijn code nu in dit veranderd :
  1. <?php
  2. $TxtBox=strip_tags($_POST['TxtBox']);
  3. function replace($str){
  4. $BBcodes=array("[b]","[/b]","[i]","[/i]","[u]","[/u]","[lijn]","[lijst*]","[lijst1]","[*]","[/lijst*]","[/lijst1]");
  5. $HTMLcodes=array("<b>","</b>","<i>","</i>","<u>","</u>","<hr>","<ul>","<ol>","<li>","</ul>","</ol>");
  6. $newStr=str_replace($BBcodes,$HTMLcodes,$str);
  7. $BBpregcodes=array('/\[url\](.+?)\[\/url\]/','/\[url\=(.+?)\](.+?)\[\/url\]/','/\[img\](.+?)\[\/img\]/','/\[color\=(.+?)\](.+?)\[\/color\]/','/\[size\=(.+?)\](.+?)\[\/size\]/','/\[code\=(.+?)\](.+?)\[\/code\]/');
  8. $HTMLpregcodes=array('<a href="$1">$1</a>','<a href="$1">$2</a>','<img src="$1">','<span style="color:$1;">$2</span>','<span style="font-size:$1">$2</span>','<div class="code" name="$1">$2</div>');
  9. $newStr=preg_replace($BBpregcodes,$HTMLpregcodes,$newStr);
  10. $newStr=nl2br($newStr);
  11. counter($newStr);
  12. }
  13. function counter($strtocount){
  14. $exploded=explode("\n",$strtocount);
  15. $number=1;
  16. foreach($exploded as $newline){
  17. echo $number++ . ". " . $newline;
  18. }
  19. }
  20. if(isset($_POST['sButton'])!=0 && $TxtBox){
  21. echo "<textarea name='TxtBox' id='TxtBox'>" . $TxtBox . "</textarea><br />";
  22. echo "<input type='submit' name='sButton' value='Show' class='submit' /><br />";
  23. echo "<div>" . replace($TxtBox) . "</div>";
  24. }else{
  25. echo "<textarea name='TxtBox' id='TxtBox'></textarea><br />";
  26. echo "<input type='submit' name='sButton' value='Show' class='submit' /><br />";
  27. echo "<div>Geen invoer</div>";
  28. }
  29. ?>

Dit werkt, voor de hele string, maar ik zou het zo moeten hebben dat er alleen nummers voor komen tussen mijn [ code ] en [ / code ].

En ik zou niet weten hoe ik dat moet oplossen.
Offline Martijn - 24/07/2010 14:29 (laatste wijziging 24/07/2010 14:39)
Avatar van Martijn Crew PHP exploden op de regels, en dan elke regel in een li zetten, en daaromheen een UL met

ul
{
list-style-image: decimal;
}

edit: En dat je t alleen wilt met je code tags, is met een preg_replace_callback()
Offline lolll - 24/07/2010 14:58
Avatar van lolll Lid
Martijn schreef:
exploden op de regels, en dan elke regel in een li zetten, en daaromheen een UL met

ul
{
list-style-image: decimal;
}

Ik denk dat je hiermee hetzelfde bedoelt als Vintage, alleen anders. Maar dan vind ik dat van Vintage toch gemakelijker.
Martijn schreef:
edit: En dat je t alleen wilt met je code tags, is met een preg_replace_callback()

En hier denk ik dat je een oplossing hebt voor mijn vraag om het tussen [ code ] en [ / code ] alleen te nummeren. Helaas heb ik op php.net gekeken naar preg_replace_callback() maar ik snap er helemaal niets van. Ik snap niet hoe ik daarmee alleen de tekst tussen mijn code tags kan laten nummeren. Zou je het even met een gemakkelijk voorbeeld kunnen uitleggen ?
Dan kan ik mss zelf voor de nummering tussen de code tags zorgen.

Grt,Lolll
Offline Martijn - 24/07/2010 17:15 (laatste wijziging 24/07/2010 17:17)
Avatar van Martijn Crew PHP
  1. $text = preg_replace_callback($rexegHier,"functieNaamZonderHaakjes",$text);


en denk dat je mijne ingewikkelder ziet dan nodig is. Je explode op de \n zoals je nu doet, en dan in je foreach doe je steeds "<li>".$waarde."</li>"
En dan voor en na je foreach echo je een <ul> en </ul> en je bent klaar. Voordeel hiervan is dat je de cijfers makkelijk een andere kleur kan geven, rechts kan uitlijnen (kijk maar naar r1-r9 tov r10+) en het eindigt allemaal gelijk ongeacht hoe lang het getal is

edit: En een bijkomt voordeel is is dat als je het selecteerd en kopierd de getallen niet meekopieren, en je zou ooit met javascript de list-style op none kunnen zetten om [zonder regelnummers] mogelijk te maken
Offline lolll - 25/07/2010 11:43 (laatste wijziging 28/07/2010 11:04)
Avatar van lolll Lid ok, ik snap het, ook je <li> en <ul> snap ik nu ook. Alleen werkt mijn preg_replace_callback nog niet zoals het moet, elke keer als ik op show druk, komt er gewoon niets meer op het scherm. Ik denk dat het aan mijn regex ligt, omdat ik nu eenmaal niet zo goed omkan met reguliere expressie. Ik zal hier ff mijn code plakken:
  1. /* eerste deel van functie replace. */
  2. if(preg_replace_callback("/\<div class\='code' name\='(.+?)'\>(.+?)\<\/div\>/","counter",$newStr)){
  3. preg_replace_callback("/\<div class\='code' name\='(.+?)'\>(.+?)\<\/div\>/","counter",$newStr);
  4. }else{
  5. echo $newStr;
  6. }
  7. }
  8. function counter($strtocount){
  9. $exploded=explode("\n",$strtocount);
  10. $number=1;
  11. foreach($exploded as $newline){
  12. echo $number++ . ". " . $newline;/* ik heb jou <li> en <ul> nog niet gebruikt, ik wou eerst de preg_replace_callback uitproberen. */
  13. }
  14. }


Grt,Lolll
Offline Martijn - 28/07/2010 20:07 (laatste wijziging 28/07/2010 20:08)
Avatar van Martijn Crew PHP dat moet zijn

  1. $newStr = "hoi [ code]codecode[/code ] hoi hoi";
  2. function counter($string){
  3. return "<b>".$string[1]."<b/>";
  4. return "<br />";
  5. }
  6. $newStr = preg_replace_callback("\[code\](.+?)\[/code\]","counter",$newStr);
  7. echo $newStr;


ongeveer
Offline lolll - 28/07/2010 21:51
Avatar van lolll Lid
Martijn schreef:
dat moet zijn

[..code..]

ongeveer

?? waarom haal je er <b> tags bij ? ik moest een script hebben dat automatisch nummert achter een linebreak.
Ik snap het echt niet meer.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.258s