Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: bbcode quote functio

nozies [05.03.2010 07:08:16]

#

ongelmana siis:

<?php
       function parseQuotesRecursive($input)
        {
            $regex = '#\[quote\=?"?(.*?)"?\]((?:[^[]|\[(?!/?quote\])|(?R))+)\[/quote\]#i';
            if (is_array($input))
            {
                $input = '<blockquote style="margin: 5px 20px 20px;">'
                    .'<div class="quote-topic">'
                    .'Quote'.( (strlen($input[1])>0) ? ' from <strong>'.$input[1].'</strong>' : '' ).','
                    .'</div>'
                    .'<div class="quote-body">'
                    .$input[2]
                    .'</div>'
                    .'</blockquote>';
            }
            return preg_replace_callback($regex, 'parseQuotesRecursive', $input);
        }
?>

tarkotus siis, että pystyy tehä useemman kuin yhden quoten tyyliin:

moi kirjoitti:

moi kirjoitti:

123

functio toimii hyvin kunhan käyttää pelkkää

[quote][quote]123[/quote][/quote]

, mutta jos lisää vaikka

[quote="joku"][quote="joku"]123[/quote][/quote]

vain ensimmäinen quote toimii niinku pitää.

EDIT. kuva: http://img38.imageshack.us/img38/2544/moimx.jpg

Metabolix [05.03.2010 09:14:09]

#

Tuo preg_replace_callback on siinä määrin harvinainen funktio, että kun kirjoitat sen hakulaatikkoon, löydät keskustelusta erään koodini, jossa on toteutettu pinon avulla vastaavien tagien tunnistus. Ideana on siis sillä löytää kaikki tagit ja säilyttää pinossa avoimeksi jääneitä tageja eli toteuttaa tavallaan rekursio käsin. Idean saa toimimaan toivomallasi tavalla, kun lisää tunnistettaviin elementteihin vielä tagittoman tekstin, jolloin voi muotoilla sen aina pinon päällimmäisen tagin mukaan sopivasti.

Omasta funktiostasi pääset samaan tulokseen, kun et yritä hakea lausekkeella koko lainausta vaan vain seuraavan avaus- tai sulkutagin. Tagin tyypin perusteella voit sitten syventää rekursiota tai palata ylemmäs.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta