Een spoiler BBcode

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jyy An

Jyy An

22/01/2012 22:39:45
Quote Anchor link
Hallo,

Voor in Joomla! heb ik een spoiler BB-Code geschreven. Nou Zit er schijnbaar ergens een fout in, ik kan alleen maar niet ontdekken waar ;s Misschien dat iemand mij hiermee kan helpen?
Wat er fout gaat is dat hij ergens in mijn loopje blijft hangen. Als ik bijvoorbeeld 3 spoilers heb, dan krijgt de eerste spoiler de div "spoiler0", de tweede "spoiler1" maar om een of andere reden de derde spoiler ook "spoiler1" in plaats van "spoiler2". Ik heb gekeken of er iets mis was met de loop maar als ik echo $i; neerzet telt hij prima door.

Dit is de functie:
http://pastebin.com/VL2bSnap
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
protected function _process(&$row, &$matches, $count, $regex, $style)
{


    for ($i = 0; $i < $count; $i++) {
        echo $i . '<br />'; // Deze werkt helemaal prima, en telt gewoon door.
        $load = str_replace('[spoiler=\'', "<div style=\"text-transform: uppercase; border-bottom: 1px solid #CCCCCC; margin-bottom: 3px; font-size: 0.8em; font-weight: bold; display: block;\">
                                                <span onclick=\"if (document.getElementById('spoiler"
. $i . "').style.display == 'none') {
                                                document.getElementById('spoiler"
. $i . "').style.display = 'block';
                                                } else {
                                                document.getElementById('spoiler"
. $i . "').style.display = 'none';
                                                }\" /><a href=\"#\" onclick=\"return false;\">"

                , $matches[0][$i]);

        $load = str_replace('\']', "</a></span></div><div id=\"spoiler" . $i . "\" style=\"display: none;\">", $load);

        $load = str_replace('[/spoiler]', '</div>', $load);

        $row->text = preg_replace('{' . preg_quote($matches[0][$i]) . '}', $load, $row->text);
    }
}

?>


Iemand enig idee waar de fout zit?

Bij voorbaat dank!
Jyy
Gewijzigd op 23/01/2012 09:00:12 door Kees Schepers
 
PHP hulp

PHP hulp

15/05/2024 15:58:59
 
Jelle -

Jelle -

23/01/2012 08:26:02
Quote Anchor link
Kun je het misschien tussen code tags zetten in plaats van in een quote?
 
Kees Schepers

kees Schepers

23/01/2012 09:00:38
Quote Anchor link
Ik heb het even aangepast voor Jyy An :) Wat bedoel je overigens met dat je 'loopje blijft hangen'? Dat je een oneindige loop hebt? Heb je al gekeken naar de inhoud van $count?
Gewijzigd op 23/01/2012 09:02:28 door kees Schepers
 
Jyy An

Jyy An

23/01/2012 13:13:05
Quote Anchor link
nee, het cijfer blijft hangen. In mijn str_replace() print ik een paar keer $i; in de eerste keer in de loop wordt het netjes de 0, de tweede keer een 1 maar elke keer daarna als dus de $i een 4 is bijvoorbeeld, komt er in mijn str_replace() alsnog een 1 wanneer mijn $i erin staat ;s
 
Erwin H

Erwin H

23/01/2012 13:47:21
Quote Anchor link
Probeer eens uit te leggen wat je in die functie precies doet. Ik loop vooral vast op de laatste regel, wat is daar precies de bedoeling van?
Gewijzigd op 23/01/2012 13:47:37 door Erwin H
 
Jyy An

Jyy An

23/01/2012 15:16:55
Quote Anchor link
Wat er voor de functie nog gebeurd (in een andere functie) is dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
         // expression to search for
         $regex = "/\[spoiler='((\s|.)+?)'\]((\s|.)+?)\[\/spoiler\]/";

        preg_match_all( $regex, $row->text, $matches );

         $count = count( $matches[0] );


Weet je Erwin, het gaat misschien heel bijzonder op je overkomen, maar heel erg bedankt! Wat de functie doet, is, hij neemt alle spoilercodes(dus de [spoiler=''] codes, met preg_match_all()), bewerkt deze naar een echte spoiler (zie hierboven) en plaatst ze dan terug (de laatste regel). Omdat ik testte met allemaal precies dezelfde stukjes tekst in de spoiler, verving hij ze dus allemaal op het einde (ongeveer). Ver verschillende teksten doet hij het.

Hoe ik dat laatste foutje kan fixen zie ik zo-even niet, maar ik weet ook niet of dat wel nodig is (:
Gewijzigd op 23/01/2012 15:17:27 door Jyy An
 
Erwin H

Erwin H

23/01/2012 15:21:30
Quote Anchor link
Jyy An op 23/01/2012 15:16:55:
Weet je Erwin, het gaat misschien heel bijzonder op je overkomen, maar heel erg bedankt!

Nou nee :-)
Dit is de beste les die mijn moeder me ooit heeft geleerd. Ze snapte de ballen niet van wiskunde, maar als ik ooit ergens mee zat hoefde ze me alleen maar te vragen om het uit te leggen. Na de uitleg begreep zij het nog steeds niet, maar was mijn probleem opgelost :-)

Ennuh, ik begrijp je probleem ook nog steeds niet helemaal, maar als het is opgelost maakt dat dus ook niet meer uit....
 
Jyy An

Jyy An

23/01/2012 17:10:25
Quote Anchor link
Het is zegmaar
stap 1: preg_match, vind de bbcode
stap 2: bewerk wat je gevonden hebt
stap 3: verander wat je in stap 1 gevonden hebt, met wat je er in stap 2 van gemaakt hebt.

Maar als je in stap 1 3x exact hetzelfde vindt, weet hij in stap 3 niet welke van de 3 stukjes code je op dat moment bewerkt hebt en welke hij dus precies moet vervangen.

Anyways, ik heb nog 1 klein vraagje, met betrekking tot preg_match.

Ik wil dat hij wél triggert als hij zoiets ziet:
[spoiler='titel']Tekst! [/spoiler]
maar níét als hij zoiets ziet:
[spoiler='titel' group='5']Tekst! [/spoiler]

En andersom, maar dat is een stuk makkelijker (:
 
Erwin H

Erwin H

23/01/2012 17:21:57
Quote Anchor link
Ik ben geen regular expression expert (verre van), maar kan je dan niet het aantal ' tellen? bij 2 wel, bij meer dan 2 niet?
 
Jyy An

Jyy An

23/01/2012 17:41:12
Quote Anchor link
Nouja, dan zou ik geen ' mogen gebruiken in mijn spoilertekst... ;s dus zegmaar de tekst die tussen [spoiler] en [/spoiler] staat.

Edit: Maar misschien zou ik inderdaad een tweede preg_match kunnen zetten...?

Edit2: Gefixt, nu zit ik met het volgende probleem... Maar hier post ik wel een nieuw thread voor, het is overigens geen php probleem...

In ieder geval heel erg bedankt iedereen!
Gewijzigd op 23/01/2012 18:12:15 door Jyy An
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.