[BETA] Begrippenvervanging 0.2.0

Zelf bezig aan een modificatie? Wij kijken graag mee..
Forumregels

LEES: Algemene Voorwaarden. Denk eventueel aan tags (DEV, BETA, RC)!
phpBB3.0.x
Gebruikersavatar
Ger
Berichten: 4864
Lid geworden op: 03 jan 2006, 22:23
Locatie: 192.68.1.100
Contacteer:

[BETA] Begrippenvervanging 0.2.0

Bericht door Ger » 15 mar 2008, 16:32

Mod Title: Automatische begrippenvervanging
MOD version: BETA 0.2.0
MOD Description: Vervangt ingevoerde woorden/afkortingen door hetzelfde woord met uitleg (tooltip) en maakt het herkenbaar als zijnde een woord met uitleg. Zie screenshot.
Afbeelding
(tooltip verschijnt als je boven een begrip hangt, dat aangegeven is met cursief en onderstippelde tekst)
phpBB version: 3.0.0
Spoiler: bekijk
CREATE NEW FILE
./definities.php

Add

Code: Selecteer alles

<?php
$begrip = array(
	'hamon' => 'Golfpatroon in het staal van het snijvlak dat zichtbaar wordt na polijsting',
	'kassaki' => 'punt',
	'PC pk' => 'Practical katana van Paul Chen',
	'saya' => 'schede',  
	'tsuba' => 'Scheidt handvat van blad en voorkomt dat de hand langs het blad glijdt',
);
$message = preg_replace( 
    '/(?<=[>\s(?]|^)(' 
        . implode( 
            '|', 
            array_map( 
                create_function( 
                    '$s', 
                    'return preg_quote($s, "/");' 
                ), 
                array_keys( 
                    $begrip 
                ) 
            ) 
        ) 
        . ')(?=[\s.,<)?]|$)/ie', 
    '\'<dfn title="\' . htmlspecialchars(\$begrip[ucfirst(strtolower(\'$0\'))]) . \'">$0</dfn>\'', 
    $message 
);
?>
Opmerking: begrippen kunnen natuurlijk door van alles vervangen worden en uitgebreid worden

OPEN
./viewtopic.php

FIND

Code: Selecteer alles

$message = bbcode_nl2br($message);
AFTER, ADD

Code: Selecteer alles

//Start SFB MOD definitielijst
include($phpbb_root_path . 'definities.' . $phpEx);
//Einde SFB MOD definitielijst
OPEN
./includes/ucp/ucp_pm_viewmessage.php

FIND

Code: Selecteer alles

$message = bbcode_nl2br($message);
AFTER, ADD

Code: Selecteer alles

//Start SFB MOD definitielijst
include($phpbb_root_path . 'definities.' . $phpEx);
//Einde SFB MOD definitielijst
//Onderstaande is alleen gedaan tbv het onderscheid met cursieve tekst, dit is natuurlijk vrij naar inzicht te wijzigen:

OPEN
./styles/subsilver2/theme/stylesheet.css

FIND

Code: Selecteer alles

/* Misc
 ------------ */
AFTER, ADD

Code: Selecteer alles

dfn { 
   border-bottom: 1px dotted; 
}
En voor ProSilver is dat:

OPEN
./styles/prosilver/theme/common.css

FIND

Code: Selecteer alles

/* Miscellaneous styles
---------------------------------------- */
AFTER, ADD

Code: Selecteer alles

dfn { 
   border-bottom: 1px dotted; 
}

Gewijzigd in versie 0.2.0:
  • Als in een uitleg ook een ander begrip genoemd wordt, gaf dit grote lelijkheid in de berichten. Fixed.
  • Begrippen die een deel van een ander begrip in zich hadden (bijv. "hamon" en "ha") gaven ook grote lelijkheid. Dmv kijken wat er omheen staat ook opgelost.
  • Speciale tekens (incl. quotes) worden nu ook goed geparsed dmv specialchars.
Wijziging: Vragen zijn opgelost, dus de codes gewijzigd en de vragen weggehaald.
Laatst gewijzigd door Ger op 22 mar 2008, 15:27, 6 keer totaal gewijzigd.

Salomon
Berichten: 3878
Lid geworden op: 14 feb 2006, 16:15

Re: [DEV] Definitielijst

Bericht door Salomon » 15 mar 2008, 16:59

strtolower kan je gebruiken... En wat je misschien kan doen, is een BBCode aanmaken ofzo, en dan woordcensuur zetten.

Gebruikersavatar
Ger
Berichten: 4864
Lid geworden op: 03 jan 2006, 22:23
Locatie: 192.68.1.100
Contacteer:

Re: [DEV] Definitielijst

Bericht door Ger » 15 mar 2008, 18:28

BBcode gaat niet, want dat wordt geparsed voordat de censuur gedaan wordt. Als ik dan A wil vervangen door B, en dat met BBcode van definities wil voorzien gaat dat mis. Bovendien kan ik het dan niet buiten phpBB gebruiken.

strtolower gaat ook niet, want dan is de ouput altijd kleine letters. Wat ik wil is eigenlijk dat hoe dan ook, de input (bijv. "HamOn") met exact dezelfde hoofdletters of kleine letters gereturned wordt. Beste is dan om de variabele $begrip zelf te gebruiken, maar dan wordt die nogmaals door de replace gehaald.

Edit: Hah! Ik heb gevonden hoe includen hier werkt:
include($phpbb_root_path . 'definities.' . $phpEx);
Eerste vraag is dus opgelost. :)

Salomon
Berichten: 3878
Lid geworden op: 14 feb 2006, 16:15

Re: [DEV] Definitielijst

Bericht door Salomon » 15 mar 2008, 18:40

Code: Selecteer alles

$orig = $begrip;
$begrip = strtolower($begrip);
// Doe wat je wilt
$begrip = $orig; 

Gebruikersavatar
Ger
Berichten: 4864
Lid geworden op: 03 jan 2006, 22:23
Locatie: 192.68.1.100
Contacteer:

Re: [DEV] Definitielijst

Bericht door Ger » 17 mar 2008, 09:33

Die ken ik, maar dan zet je alles dus in kleine letters en da's dus precies wat ik niet wil. Ik weet wel hoe ik kan zorgen dat de herkenning niet hoofdlettergevoelig is (str_ireplace) maar het gaat me erom dat hetgeen dat ingevoerd is in het bericht met exact dezelfde letters (hoofd of klein) wordt gereturned.

Salomon
Berichten: 3878
Lid geworden op: 14 feb 2006, 16:15

Re: [DEV] Definitielijst

Bericht door Salomon » 17 mar 2008, 10:23

Je kan toch het originele returnen? Je moet dan niet replacen...

Code: Selecteer alles

$msg = '<blabla' . $title . '>'. $orig . '</blabla>

Gebruikersavatar
Ger
Berichten: 4864
Lid geworden op: 03 jan 2006, 22:23
Locatie: 192.68.1.100
Contacteer:

Re: [DEV] Definitielijst

Bericht door Ger » 17 mar 2008, 15:43

Dat kan natuurlijk, maar hoe krijg ik die vervanging dat terug in de $message? Dan zal ik toch met een replace moeten gaan werken.

Coen
Berichten: 5387
Lid geworden op: 03 aug 2004, 10:25

Re: [DEV] Definitielijst

Bericht door Coen » 17 mar 2008, 15:55

Ger schreef:Dat kan natuurlijk, maar hoe krijg ik die vervanging dat terug in de $message? Dan zal ik toch met een replace moeten gaan werken.
Even zonder in code te denken (dat werkt vaak beter).

Salomon is een eind in de goede richting, maar legt het misschien wat onduidelijk uit. Wat je moet doen, is de begrippen in kleine letters opslaan in de array met alle tekstjes. Vervolgens haal je de (in kleine letters geschreven) woorden door je filters en controleer je dus of er een description bij moet komen. Je behoudt echter het orgineel wat je later kunt retourneren.

Toch maar een code voorbeeldje;

Code: Selecteer alles

$orgineel = $invoer;
$invoer = strtolower($invoer);

foreach($begrip as $invoer => $uitleg) {
         $uitleg = '<dfn title="'.$uitleg.'">'.$orgineel.'</dfn>';

         $message = str_replace($orgineel, $uitleg, $message);
}
Wat ik hier doe, is een afgeleide van de term (in kleine letters) door de routine halen, maar uiteindelijk wel het orgineel laten zien. Het zou zo moeten werken! ;)

FIXJE: We moeten natuurlijk wel het orgineel (eventueel met hoofdletters e.d.) str_replacen aan het einde, niet de afgeleide met kleine letters! Code klopt nu volgens mij. :)
Laatst gewijzigd door Coen op 17 mar 2008, 16:09, 3 keer totaal gewijzigd.
Reden: Klein fixje doorgevoerd

Gebruikersavatar
Ger
Berichten: 4864
Lid geworden op: 03 jan 2006, 22:23
Locatie: 192.68.1.100
Contacteer:

Re: [DEV] Definitielijst

Bericht door Ger » 17 mar 2008, 19:02

Dat gaat dus niet. Kijk, als ik $origineel gelijkstel aan $invoer dan is dat op dat moment al in kleine letters. Immers, de array waar $invoer in staat, is in kleine letters.

Coen
Berichten: 5387
Lid geworden op: 03 aug 2004, 10:25

Re: [DEV] Definitielijst

Bericht door Coen » 17 mar 2008, 19:51

Ger schreef:Dat gaat dus niet. Kijk, als ik $origineel gelijkstel aan $invoer dan is dat op dat moment al in kleine letters. Immers, de array waar $invoer in staat, is in kleine letters.
Ik zie niet waar dit gedaan wordt?

Ik maak eerst $orgineel aan, daarna pas ik pas strtolower toe! ;)

Gebruikersavatar
Ger
Berichten: 4864
Lid geworden op: 03 jan 2006, 22:23
Locatie: 192.68.1.100
Contacteer:

Re: [DEV] Definitielijst

Bericht door Ger » 17 mar 2008, 21:21

Ik ook. Kijk, het script ziet er nu zo uit:

Code: Selecteer alles

<?php
$begrip['saya']		= 'Schede'; 
$begrip['kassiki']	= 'Punt van de katana';
$begrip['hamon']	= 'Golfpatroon in het staal van het snijvlak dat zichtbaar wordt na polijsting';
$begrip['tsuba']	= 'Scheidt het handvat van het blad, voorkomt tevens dat het zwaard wegglijdt en de hand langs het blad glijdt';

foreach($begrip as $invoer => $uitleg) {
		$orgineel = $invoer;
		$invoer = strtolower($invoer);
		$uitleg = '<dfn title="'.$uitleg.'">'.$orgineel.'</dfn>';
		$message = str_replace($orgineel, $uitleg, $message);
		}
?>
(de gelijkstelling en strtolower moet pas na foreach, anders bestaan de variabelen in kwestie nog niet)

Dat begint dus met de array. Alles kleine letters.
Vervolgens benoem ik de key tot $invoer. Nog steeds kleine letters.
Dan zeg ik dat $origineel hetzelfde is als $invoer. En dat zijn dus nog steeds dezelfde kleine letters. Dat klopt ook, wat op dit moment is er nog niet eens naar het origineel gekeken. Op dat moment is $origneel dus opgeslagen als iets met alleen maar kleine letters.
Probeer maar eens na $origineel = $invoer $origineel te echoën. Je krijgt dan vrolijk allemaal kleine lettertjes.

Dan kan ik daarna wel met $invoer gaan replacen, die inderdaad altijd door str_replace herkend zal worden, maar da's gewoon een moeilijke manier van str_[b]i[/b]replace laten uitvoeren. Het resultaat waar ik op hoopte is er nog niet; namelijk dat het uiteindelijke origineel terugkomt in $uitleg.

Gebruikersavatar
Ger
Berichten: 4864
Lid geworden op: 03 jan 2006, 22:23
Locatie: 192.68.1.100
Contacteer:

Re: [DEV] Definitielijst

Bericht door Ger » 17 mar 2008, 22:27

Ik heb het! Dit is de code geworden:

Code: Selecteer alles

<?php
$begrip = array(
	'hamon' => 'Golfpatroon in het staal van het snijvlak dat zichtbaar wordt na polijsting',
	'kassaki' => 'punt',
	'PC pk' => 'Practical katana van Paul Chen',
	'saya' => 'schede',  
	'tsuba' => 'Scheidt handvat van blad en voorkomt dat de hand langs het blad glijdt',
);
foreach($begrip as $invoer => $uitleg) {
	$uitleg = '<dfn title="'.$uitleg.'">\1</dfn>';
	$message = preg_replace("/($invoer)/i", $uitleg, $message);
}
?>
Volgens Tweakers is wat ik wilde totaal niet mogelijk met str_replace, maar dus wel met preg_replace.

Nu kan ik dit fijntjes gaan uitbreiden en includen daar waar ik er zin in heb. :)

Coen
Berichten: 5387
Lid geworden op: 03 aug 2004, 10:25

Re: [BETA] Begrippenvervanging 0.1.0

Bericht door Coen » 17 mar 2008, 23:21

Geweldig! Dit is een erg leuke MOD om uit te brengen! :)

Succes er verder mee!

Gebruikersavatar
Johan
Berichten: 2376
Lid geworden op: 05 mei 2007, 15:24
Locatie: memberlist.php

Re: [BETA] Begrippenvervanging 0.1.0

Bericht door Johan » 18 mar 2008, 18:27

Super, ga je later ook nog een functie maken dat het aanmaakbaar is in je ACP, en dus niet steeds de codes inhoeft? ;)
Voormalig Support Teamlid

Gebruikersavatar
Ger
Berichten: 4864
Lid geworden op: 03 jan 2006, 22:23
Locatie: 192.68.1.100
Contacteer:

Re: [BETA] Begrippenvervanging 0.1.0

Bericht door Ger » 18 mar 2008, 18:50

Als iemand me verteld hoe.... :roll:
Ik zou dat namelijk echt niet weten. Het zal vast kunnen hoor, daar niet van, maar daarvoor is mijn kennis gewoon te beperkt. En op deze manier is het toch ook vrij simpel, je hebt 1 bestand die begint met de array met begrippen. En die heeft toch een vrij simpele structuur ('begrip' => 'uitleg',). Of je dat nou via een interface in de ACP doet of via dat bestand, dat maakt natuurlijk weinig uit.

BetaDevil
Berichten: 2810
Lid geworden op: 28 mei 2006, 15:27

Re: [BETA] Begrippenvervanging 0.1.0

Bericht door BetaDevil » 18 mar 2008, 19:00

Het is natuurlijk wel te maken maar daar heb je zeker wat PHP-kennis voor nodig (ACP-module schrijven is niet zo simpel...).

Gebruikersavatar
Johan
Berichten: 2376
Lid geworden op: 05 mei 2007, 15:24
Locatie: memberlist.php

Re: [BETA] Begrippenvervanging 0.1.0

Bericht door Johan » 18 mar 2008, 19:03

Ger schreef:Als iemand me verteld hoe.... :roll:
Ik zou dat namelijk echt niet weten. Het zal vast kunnen hoor, daar niet van, maar daarvoor is mijn kennis gewoon te beperkt. En op deze manier is het toch ook vrij simpel, je hebt 1 bestand die begint met de array met begrippen. En die heeft toch een vrij simpele structuur ('begrip' => 'uitleg',). Of je dat nou via een interface in de ACP doet of via dat bestand, dat maakt natuurlijk weinig uit.
Ik hb er geen problemen mee om het gewoon in de bestanden te veranderen, maar er kunnen best mensen zijn die daar foutjes in maken (bijv. een ' perongeluk verwijderen :oops: )
Voormalig Support Teamlid

Gebruikersavatar
Ger
Berichten: 4864
Lid geworden op: 03 jan 2006, 22:23
Locatie: 192.68.1.100
Contacteer:

Re: [BETA] Begrippenvervanging 0.1.0

Bericht door Ger » 19 mar 2008, 22:54

Vraagje: ik heb ook al een tijdje een custom bbcode voor begrippenuitleg. Ik zie dat als men nu bij een woord dat in de begrippenlijst staat zelf ook een uitleg ingeeft, het er dan zo uit komt te zien:

Code: Selecteer alles

<dfn title="eigen uitleg"><dfn title="uitleg van de mod">begrip</dfn></dfn>
De uitleg van de mod wordt dan getoond. Liefst heb ik dat andersom, zodat men ook een eigen uitleg kan geven. Waarschijnlijk moet ik de include van de mod dan verplaatsen, maar wat is dan je juiste plaats?

Gebruikersavatar
Ger
Berichten: 4864
Lid geworden op: 03 jan 2006, 22:23
Locatie: 192.68.1.100
Contacteer:

Re: [BETA] Begrippenvervanging 0.1.0

Bericht door Ger » 21 mar 2008, 09:56

Ger schreef:Vraagje: ik heb ook al een tijdje een custom bbcode voor begrippenuitleg. Ik zie dat als men nu bij een woord dat in de begrippenlijst staat zelf ook een uitleg ingeeft, het er dan zo uit komt te zien:

Code: Selecteer alles

<dfn title="eigen uitleg"><dfn title="uitleg van de mod">begrip</dfn></dfn>
De uitleg van de mod wordt dan getoond. Liefst heb ik dat andersom, zodat men ook een eigen uitleg kan geven. Waarschijnlijk moet ik de include van de mod dan verplaatsen, maar wat is dan je juiste plaats?
Nevermind, dit zal altijd zo blijven. Misschien kan ik eens kijken naar omringende tags. Dat kan met JS, ik weet niet of PHP daar ook iets van heeft.

Gebruikersavatar
Ger
Berichten: 4864
Lid geworden op: 03 jan 2006, 22:23
Locatie: 192.68.1.100
Contacteer:

Re: [BETA] Begrippenvervanging 0.2.0

Bericht door Ger » 22 mar 2008, 12:17

Flinke verbeterslag gemaakt, gepromoveerd naar versie 0.2.0:
Gewijzigd in versie 0.2.0:
  • Als in een uitleg ook een ander begrip genoemd wordt, gaf dit grote lelijkheid in de berichten. Fixed.
  • Begrippen die een deel van een ander begrip in zich hadden (bijv. "hamon" en "ha") gaven ook grote lelijkheid. Dmv kijken wat er omheen staat ook opgelost.
  • Speciale tekens (incl. quotes) worden nu ook goed geparsed dmv specialchars.

Plaats reactie