Ubb
thyssimonis - 02/05/2005 01:34 (laatste wijziging 02/05/2005 01:36)
PHP interesse
Ik zoek ene ubb systeem met
- [code] met rijen die zijn genummerd.
- [page]
- [ quote] met en zonder posted by
- en dit moet ook kunnen:
bericht1: dsfsdfsdfds
bericht2: [quote ][quote ]sdfdsfdsfd[/quote ] dsfsdfsdfds[quote ] dfdsfs
bericht 2 gaat dan fout dan moet het zo worden. sadas
19 antwoorden
Gesponsorde links
Dekin - 02/05/2005 12:23
Nieuw lid
Ik denk dat je hier wel wat vind:p
Of op Google .
Tuinstoel - 03/05/2005 08:22
PHP expert
opsplitsen kan met explode, kzal even wat voor je typen:
<?php
$sTekst = "Pagina 0[page]Pagina 1
[page]Pagina 2";
$aPaginas = explode("[page]",$sTekst);
echo $aPaginas[0];
// Toont de eerste pagina, want arrays beginnen met 0.
?>
<?php
$sTekst = "Pagina 0[page]Pagina 1
[page]Pagina 2" ;
$aPaginas = explode ( "[page]" , $sTekst ) ; // Toont de eerste pagina, want arrays beginnen met 0.
?>
Kijk ook eens rond in de databank hierzo en op andere websites, want er zijn zo ongelovelijk veel ubb parsers.
thyssimonis - 03/05/2005 10:27 (laatste wijziging 03/05/2005 10:31)
PHP interesse
<?php
// Voorbeeld van een tekst, haal dit bvb uit database:
$dbtext = 'deel1[page]deel2[page]deel3[page]';
// We kappen de tekst in stukken op basis van '[break]'
$dbtext_array = explode('[/page]',$dbtext);
// Totaal aantal 'stukken':
$totaal_paginas = sizeof($dbtext_array);
// De actieve pagina halen we uit de url:
if (IsSet($_GET['p'])) {
$pagina = $_GET['p'];
}
else {
$pagina = 1;
}
// Print de juiste tekst en paginanummer:
echo $dbtext_array[$pagina-1];
echo '<hr />';
// Vorige:
if ($pagina > 1) {
echo '<a href="'.$_SERVER['PHP_SELF'].'?p='.($pagina-1).'"><< vorige</a>';
}
// Huidige:
echo ' | Dit is pagina '.$pagina.' van '.$totaal_paginas.' | ';
// Volgende:
if ($pagina < $totaal_paginas) {
echo '<a href="'.$_SERVER['PHP_SELF'].'?p='.($pagina+1).'">volgende >></a>';
}
echo '<br />De pagina\'s:<br />';
for($i = 1; $i <= $totaal_paginas; $i++) {
echo ' <a href="'.$_SERVER['PHP_SELF'].'?p=".$i.'">'.$i.'</a>';
}
?>
<?php
// Voorbeeld van een tekst, haal dit bvb uit database:
$dbtext = 'deel1[page]deel2[page]deel3[page]' ;
// We kappen de tekst in stukken op basis van '[break]'
$dbtext_array = explode ( '[/page]' , $dbtext ) ;
// Totaal aantal 'stukken':
$totaal_paginas = sizeof ( $dbtext_array ) ;
// De actieve pagina halen we uit de url:
$pagina = $_GET [ 'p' ] ;
}
else {
$pagina = 1 ;
}
// Print de juiste tekst en paginanummer:
echo $dbtext_array [ $pagina - 1 ] ;
// Vorige:
if ( $pagina > 1 ) {
echo '<a href="' . $_SERVER [ 'PHP_SELF' ] . '?p=' . ( $pagina - 1 ) . '"><< vorige</a>' ; }
// Huidige:
echo ' | Dit is pagina ' . $pagina . ' van ' . $totaal_paginas . ' | ' ;
// Volgende:
if ( $pagina < $totaal_paginas ) {
echo '<a href="' . $_SERVER [ 'PHP_SELF' ] . '?p=' . ( $pagina + 1 ) . '">volgende >></a>' ; }
echo '<br />De pagina\' s
:< br
/> '; for($i = 1; $i <= $totaal_paginas; $i++) {
echo ' < a href= "'.$_SERVER ['PHP_SELF'].'?p=" . $i . '">' . $i . '</a>' ;
}
?>
Deze vond ik maar heb lieft met [page][/page]
enhoe verwerk ik dat in me ubb.inc.php
Legolas - 03/05/2005 10:39 (laatste wijziging 03/05/2005 10:39)
Onbekend
Je split hem nu alleen op [/page]. volgens mij moet je met preg_match() hem ff splitten op [page] EN [/page]. Zoiets:
<?
$text = "[page]deel1[/page]";
preg_match('/\[page\](.*?)\[\/page\]/', $text, $match);
echo $match[1];
?>
<?
$text = "[page]deel1[/page]" ;
preg_match ( '/\[page\](.*?)\[\/page\]/' , $text , $match ) ; ?>
Dan haal je dus de content tussen de pages uit. dan kun je mss met een lus iets daaraan doen om meerdere pages te doen.
thyssimonis - 03/05/2005 10:45
PHP interesse
<?php
// Voorbeeld van een tekst, haal dit bvb uit database:
$dbtext = '[page]deel1[/page][page]deel2[/page][page]deel3[/page]';
// We kappen de tekst in stukken op basis van '[break]'
preg_match('/\[page\](.*?)\[\/page\]/', $dbtext, $match);
// Totaal aantal 'stukken':
$totaal_paginas = sizeof($match);
// De actieve pagina halen we uit de url:
if (IsSet($_GET['p'])) {
$pagina = $_GET['p'];
}
else {
$pagina = 1;
}
// Print de juiste tekst en paginanummer:
echo $match[$pagina-1];
echo '<hr />';
// Vorige:
if ($pagina > 1) {
echo '<a href="'.$_SERVER['PHP_SELF'].'?p='.($pagina-1).'"><< vorige</a>';
}
// Huidige:
echo ' | Dit is pagina '.$pagina.' van '.$totaal_paginas.' | ';
// Volgende:
if ($pagina < $totaal_paginas) {
echo '<a href="'.$_SERVER['PHP_SELF'].'?p='.($pagina+1).'">volgende >></a>';
}
echo '<br />De pagina\'s:<br />';
for($i = 1; $i <= $totaal_paginas; $i++) {
echo '<a href="'.$_SERVER['PHP_SELF'].'?p='.$i.'">'.$i.'</a>';
}
?>
<?php
// Voorbeeld van een tekst, haal dit bvb uit database:
$dbtext = '[page]deel1[/page][page]deel2[/page][page]deel3[/page]' ;
// We kappen de tekst in stukken op basis van '[break]'
preg_match ( '/\[page\](.*?)\[\/page\]/' , $dbtext , $match ) ;
// Totaal aantal 'stukken':
$totaal_paginas = sizeof ( $match ) ;
// De actieve pagina halen we uit de url:
$pagina = $_GET [ 'p' ] ;
}
else {
$pagina = 1 ;
}
// Print de juiste tekst en paginanummer:
// Vorige:
if ( $pagina > 1 ) {
echo '<a href="' . $_SERVER [ 'PHP_SELF' ] . '?p=' . ( $pagina - 1 ) . '"><< vorige</a>' ; }
// Huidige:
echo ' | Dit is pagina ' . $pagina . ' van ' . $totaal_paginas . ' | ' ;
// Volgende:
if ( $pagina < $totaal_paginas ) {
echo '<a href="' . $_SERVER [ 'PHP_SELF' ] . '?p=' . ( $pagina + 1 ) . '">volgende >></a>' ; }
echo '<br />De pagina\' s
:< br
/> '; for($i = 1; $i <= $totaal_paginas; $i++) {
echo ' < a href= "'.$_SERVER ['PHP_SELF'].'?p='.$i .'" > '.$i.' </ a> ';
}
?>
Hij doet het nog niet zo goed
Legolas - 03/05/2005 10:47 (laatste wijziging 03/05/2005 10:48)
Onbekend
Ja idd maar ik deed ook preg_match, het moet met preg_split. zal ff opzoeken in andere ubb parser hoe ze dat doen.:)
preg_match kan alleen met 1 pagina, heb je lekr veel aan^^
thyssimonis - 03/05/2005 10:52
PHP interesse
Oke merkte ik ook kreeg op 1e pagina noormale text en andere pagina alleen deel1
Thomas - 03/05/2005 11:07
Moderator
Denk eraan dat je alleen maar "UBB-code" hoeft uit te voeren op de pagina die je laat zien (je hoeft geen tags om te zetten van pagina's die je niet ziet, lijkt mij).
Je kunt dus prima volstaan met preg_match() als je éérst de pagina's splitst *, en dan de pagina die je wilt laten zien "parsed" (volgens mij is het niet eens parsing, maar goed) met je UBB-functies.
*: Het splitsen kan gewoon met explode, als je een enkele tag (geen dubbele (openings- en sluitingstag), dit lijkt me niet nodig) als pagina-scheiding gebruikt.
thyssimonis - 03/05/2005 11:10
PHP interesse
[page][/page] is handergier anders gaan mensen deze fout maken.
text[page]text[page]
of
[page]d[/page][page]d[/page]
[page][/page] is veiliger.
p.s. Hemel komt hier naar beneden
:)
Legolas - 03/05/2005 11:13 (laatste wijziging 03/05/2005 11:14)
Onbekend
@FangorN:
hoe bedoel je dit nou precies, bedoel je dat je dat met [page] gewoon kan exploden?
EDIT:
wat je ook kunt doen: een tag:
[nextpage] onder elke pagina, behalve de laatste. dan kan het HEEL makkelijk met explode():ooh:
Thomas - 03/05/2005 11:23
Moderator
Jah, ik was zoiets aan het maken voor een tutorial-achtig systeem:
tutorial.php
<?php
function getmicrotime() {
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
function tutorial($file, $sep="<!-- PAGE_BREAK -->") {
$handle = fopen($file, "rb"); // binary safe read
$content = fread($handle, filesize($file));
fclose($handle);
$content = str_replace($sep."\r\n", $sep."\n", $content);
$content = str_replace($sep."\n", $sep, $content);
return explode($sep, $content);
}
function tutorial_nav($cpage, $npage, $pvar="p") {
$ret = "";
$url = $_SERVER['PHP_SELF'].url(array($pvar)).(strlen($url) > 0 ? "&" : "?").$pvar."=";
if($cpage > 0) {
// first
$ret .= "<a href=\"".$url."0\"><<</a> ";
// previous
$ret .= "<a href=\"".$url.($cpage - 1)."\"><</a> ";
}
for($i=0; $i < $npage; $i++) {
if($i == $cpage) {
$ret .= "<b>".($i+1)."</b>\n";
} else {
$ret .= "<a href=\"".$url.$i."\">".($i+1)."</a>\n";
}
if($i+1 < $npage) $ret .= " - ";
}
if($cpage+1 < $npage) {
// next
$ret .= " <a href=\"".$url.($cpage + 1)."\">></a>";
// last
$ret .= " <a href=\"".$url.($npage - 1)."\">>></a>";
}
return $ret;
}
function url($exclude=array(), $safe=1) {
$amp = ($safe) ? "&" : "&";
$ret = "";
$aret = array();
foreach($_GET as $k => $v) {
if(!in_array($k, $exclude)) {
$aret[] = $k."=".$v;
}
}
if(sizeof($aret)) $ret .= "?".implode($amp, $aret);
return $ret;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>html template</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type="text/css">
<!--
table {
width: 90%;
}
body {
font-family: Arial;
font-size: 9pt;
color: #000000;
}
p {
text-align: justify;
margin: 0;
padding: 0;
}
h1 {
font-size: 14pt;
font-weight: bold;
margin: 0;
padding: 0;
}
h2 {
font-size: 12pt;
font-weight: bold;
font-style: italic;
margin: 0;
padding: 0;
}
pre {
margin: 0;
padding: 0;
}
.table {
width: 90%;
border: 1px solid #000;
background-color: #fcfcfc;
padding-top: 15px;
padding-bottom: 15px;
padding-left: 10px;
padding-right: 10px;
}
.nav {
width: 90%;
}
td {
font-family: Arial;
font-size: 9pt;
color: #000;
}
//-->
</style>
</script>
</head>
<body>
<?php
$tijd = getmicrotime();
$tut = tutorial("test.tut");
$page = 0;
if(isset($_GET['p']) && is_numeric($_GET['p']) && $_GET['p'] > -1 && $_GET['p'] < sizeof($tut)) {
$page = $_GET['p'];
}
?>
<div align="center">
<table class="table">
<tr>
<td width="100%">
<?= $tut[$page] ?>
</td>
</tr>
</table>
<table class="nav">
<tr>
<td width="50%">
<?= tutorial_nav($page, sizeof($tut)) ?>
</td>
<td width="50%" align="right">
took <?= round(getmicrotime() - $tijd, 3) ?>s
<?= ($page+1) ?>/<?= sizeof($tut) ?>
</td>
</tr>
</table>
</div>
</body>
</html>
<?php
function getmicrotime( ) {
return ( ( float) $usec + ( float) $sec ) ;
}
function tutorial( $file , $sep = "<!-- PAGE_BREAK -->" ) {
$handle = fopen ( $file , "rb" ) ; // binary safe read
$content = str_replace ( $sep . "\r \n " , $sep . "\n " , $content ) ; }
function tutorial_nav( $cpage , $npage , $pvar = "p" ) {
$ret = "" ;
$url = $_SERVER [ 'PHP_SELF' ] . url
( array ( $pvar ) ) . ( strlen ( $url ) > 0 ?
"&" : "?" ) . $pvar . "=" ;
if ( $cpage > 0 ) {
// first
$ret .= "<a href=\" " . $url . "0\" ><<</a> " ;
// previous
$ret .= "<a href=\" " . $url . ( $cpage - 1 ) . "\" ><</a> " ;
}
for ( $i = 0 ; $i < $npage ; $i ++ ) {
if ( $i == $cpage ) {
$ret .= "<b>" . ( $i + 1 ) . "</b>\n " ;
} else {
$ret .= "<a href=\" " . $url . $i . "\" >" . ( $i + 1 ) . "</a>\n " ;
}
if ( $i + 1 < $npage ) $ret .= " - " ;
}
if ( $cpage + 1 < $npage ) {
// next
$ret .= " <a href=\" " . $url . ( $cpage + 1 ) . "\" >></a>" ;
// last
$ret .= " <a href=\" " . $url . ( $npage - 1 ) . "\" >>></a>" ;
}
return $ret ;
}
function url
( $exclude = array ( ) , $safe = 1 ) { $amp = ( $safe ) ? "&" : "&" ;
$ret = "" ;
foreach ( $_GET as $k => $v ) {
$aret [ ] = $k . "=" . $v ;
}
}
return $ret ;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>html template</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type="text/css">
<!--
table {
width: 90%;
}
body {
font-family: Arial;
font-size: 9pt;
color: #000000;
}
p {
text-align: justify;
margin: 0;
padding: 0;
}
h1 {
font-size: 14pt;
font-weight: bold;
margin: 0;
padding: 0;
}
h2 {
font-size: 12pt;
font-weight: bold;
font-style: italic;
margin: 0;
padding: 0;
}
pre {
margin: 0;
padding: 0;
}
.table {
width: 90%;
border: 1px solid #000;
background-color: #fcfcfc;
padding-top: 15px;
padding-bottom: 15px;
padding-left: 10px;
padding-right: 10px;
}
.nav {
width: 90%;
}
td {
font-family: Arial;
font-size: 9pt;
color: #000;
}
//-->
</style>
</script>
</head>
<body>
<?php
$tijd = getmicrotime( ) ;
$tut = tutorial( "test.tut" ) ;
$page = 0 ;
$page = $_GET [ 'p' ] ;
}
?>
<div align="center">
<table class="table">
<tr>
<td width="100%">
<?= $tut [ $page ] ?>
</td>
</tr>
</table>
<table class="nav">
<tr>
<td width="50%">
<?= tutorial_nav
( $page , sizeof ( $tut ) ) ?> </td>
<td width="50%" align="right">
took
<?= round ( getmicrotime
( ) - $tijd , 3 ) ?> s
<?= ( $page + 1 ) ?> /
<?= sizeof ( $tut ) ?> </td>
</tr>
</table>
</div>
</body>
</html>
test.tut:
<h1>1. Inleiding</h1>
<br />
<p align="justify">
Deze tutorial beschrijft TemplatePower - een in PHP geschreven template-engine die
code en opmaak van je webpage 100% scheidt.
</p>
<br />
<h2>1.1 TemplatePower - een kennismaking</h2>
<br />
Blaat.
<!-- PAGE_BREAK -->
<h1>2. TemplatePower verder uit de doeken gedaan</h1>
<br />
<p align="justify">
</p>
<h2>2.1 Basiskennis PHP</h2>
<!-- PAGE_BREAK -->
<h1>3. Methoden bij het TemplatePower object</h1>
<br />
Blaat.<br />
<br />
<h2>methode 1</h2>
<br />
Blaat.<br />
<br />
<h2>methode 2</h2>
<br />
Blaat.<br />
<br />
<h2>methode 3</h2>
<br />
Blaat.<br />
<br />
<!-- PAGE_BREAK -->
<h1>4. Voorbeeld</h1>
<br />
<div style="width: 90%; border: 1px solid #cccccc; background-color: #eeeeee;">
<pre>
<?php
echo "Hello world";
?>
</pre>
</div>
< h1> 1. Inleiding</ h1>
< br />
< p align= "justify" >
Deze tutorial beschrijft TemplatePower
- een in PHP geschreven template
- engine
die code en opmaak van je webpage 100 % scheidt.
</ p>
< br />
< h2> 1.1 TemplatePower - een kennismaking</ h2>
< br />
Blaat.
<!-- PAGE_BREAK -->
< h1> 2. TemplatePower verder uit de doeken gedaan</ h1>
< br />
< p align= "justify" >
</ p>
< h2> 2.1 Basiskennis PHP</ h2>
<!-- PAGE_BREAK -->
< h1> 3. Methoden bij het TemplatePower object</ h1>
< br />
Blaat.< br />
< br />
< h2> methode 1 </ h2>
< br />
Blaat.< br />
< br />
< h2> methode 2 </ h2>
< br />
Blaat.< br />
< br />
< h2> methode 3 </ h2>
< br />
Blaat.< br />
< br />
<!-- PAGE_BREAK -->
< h1> 4. Voorbeeld</ h1>
< br />
< div style= "width: 90%; border: 1px solid #cccccc; background-color: #eeeeee;" >
< pre>
& lt; ?php
?& gt;
</ pre>
</ div>
thyssimonis - 03/05/2005 21:49 (laatste wijziging 03/05/2005 22:42)
PHP interesse
Deze snap ik neti zo!
heb nog geen goede:(
CelestialCelebi - 04/05/2005 08:29 (laatste wijziging 04/05/2005 08:30)
PHP gevorderde
En als je dit werk nu eens door de database laat doen met SUBSTRING()? Zou heel wat sneller zijn..
EDIT: Of dan inderdaad met explode() ja..
Thomas - 04/05/2005 11:29
Moderator
[page][/page] lijkt mij niet echt zinnig - wat doe je met tekst die buiten een [page][/page]-blok valt ? Hier vallen volgens mij meer fouten mee te maken dan een simpele pagina-scheiding "[page]" (je kan namelijk de sluitingstag vergeten / uitpoetsen - dan gaan twee of meer pagina's door elkaar lopen lijkt me).
Een enkele tag "[page]" lijkt me voldoende - deze geeft de scheiding tussen twee pagina's aan. Als mensen beginnen met [page] dan hebben ze gewoon de werking van de tag duidelijk niet begrepen (en in het ergste geval krijgt iemand een lege pagina te zien, wat me nog altijd minder storend lijkt dan twee pagina's die door elkaar lopen).
thyssimonis - 04/05/2005 13:08
PHP interesse
als ik dan met [page] veder ga heb ik een goede nodig die ik zo in em ubb.inc.php kan zetten
thyssimonis - 05/05/2005 12:37 (laatste wijziging 05/05/2005 13:41)
PHP interesse
ik heb nu dit
<?php
## Dit haal je bijvoorbeeld uit de database o.i.d.
$input_data = "[page]Hallo.[/page]";
$input_data .= "[page]Hier komt pagina twee![/page]";
## Array ##
$paginas = array( );
if(preg_match_all( "!\[page\](.+)\[\/page\]!Usi" , $input_data, $matches ))
{
for( $x = 0; $x < sizeof( $matches ); $x++ )
{
$paginas[ ] = $matches[ 1 ][ $x ];
}
}
if( empty( $_GET['pagina'] ) OR !is_numeric( $_GET['pagina'] ) OR $_GET['pagina'] > (count( $paginas )) )
$now = 0;
else
$now = ($_GET['pagina']-1);
?>
<?php
## Dit haal je bijvoorbeeld uit de database o.i.d.
$input_data = "[page]Hallo.[/page]" ;
$input_data .= "[page]Hier komt pagina twee![/page]" ;
## Array ##
if ( preg_match_all ( "!\[page\](.+)\[\/page\]!Usi" , $input_data , $matches ) ) {
for ( $x = 0 ; $x < sizeof ( $matches ) ; $x ++ ) {
$paginas [ ] = $matches [ 1 ] [ $x ] ;
}
}
if ( empty ( $_GET [ 'pagina' ] ) OR
! is_numeric ( $_GET [ 'pagina' ] ) OR
$_GET [ 'pagina' ] > ( count ( $paginas ) ) ) $now = 0 ;
else
$now = ( $_GET [ 'pagina' ] - 1 ) ;
?>
maar hoe verwerk ik dit dan in me ubb? en hoe doe ik eht met pagina navigatie? weet wel hoe meot maken maar hoe geef ik dat mee etc.
$bericht = preg_replace ("#\[size=(.*)\](.*)\[/size\]#si", "<font size=\"\\1\">\\2</font>", $bericht);
dit is een stukje je uit mijn ubb
Thomas - 05/05/2005 13:30 (laatste wijziging 05/05/2005 13:31)
Moderator
Het opsplitsen van tekst in pagina's en het toepassen van UBB-omzettingen (tag naar HTML) zijn echt twee verschillende dingen.
Je hoeft (zoals al eerder gezegd) alleen UBB-codes van de pagina die je afdrukt om te zetten, dus als je een functie ubb_code() hebt, die al je UBB-bewerkingen uitvoert, dan verander je regel 24 naar:
echo ubb_code($paginas[$now]);
?
Gesponsorde links
Dit onderwerp is gesloten .