[PHP] Preg_replace() en een unique id

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • EnsconcE
  • Registratie: Oktober 2001
  • Laatst online: 19-06 00:07
Ik gebruik preg replace om van een template tekst te wijzigen in een unique id, dit doe ik zodat elk plaatje een unieke naam heeft. Dit moet namelijk vanwege javascript, maar dat even terzijde. Nou kan ik een aantal regels code gaan schrijven die mijn probleem oplossen, alleen preg_replace is zoveel makkelijker. Ik zit alleen met het probleem dat elke keer als preg_replace {IMAGE_UNIQUE_ID} tegenkomt, deze dezelfde unique id krijgt. Ik doe het namelijk als volgt:
$text = preg_replace('/\{IMAGE_UNIQUE_ID\}/iSU',rand(1000000, 9999999), $text);
Is er ook een mogelijkheid dat die rand() bij het replacen elke keer opnieuw uitgevoerd wordt?

Acties:
  • 0 Henk 'm!

Verwijderd

Ik denk dat je deze functie zoekt: http://nl3.php.net/manual...preg-replace-callback.php

Acties:
  • 0 Henk 'm!

  • Flying_Thunder
  • Registratie: December 2001
  • Niet online
PHP:
1
preg_replace_callback('/\{IMAGE_UNIQUE_ID\}/iSU', create_function('', 'return rand(1000000, 9999999);'), $text);
?

edit:
Hmm, sneller refreshen :+

[ Voor 18% gewijzigd door Flying_Thunder op 12-08-2007 15:03 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

de e-modifier kan natuurlijk ook:
PHP:
1
$text = preg_replace('/\{IMAGE_UNIQUE_ID\}/ie', 'rand(1000000,9999999)', $text);
Dit moet namelijk vanwege javascript
ik kan daar niet echt een usecase bij bedenken die niet netter opgelost zou kunnen worden ;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • EnsconcE
  • Registratie: Oktober 2001
  • Laatst online: 19-06 00:07
crisp schreef op zondag 12 augustus 2007 @ 15:09:
de e-modifier kan natuurlijk ook:
PHP:
1
$text = preg_replace('/\{IMAGE_UNIQUE_ID\}/ie', 'rand(1000000,9999999)', $text);


[...]

ik kan daar niet echt een usecase bij bedenken die niet netter opgelost zou kunnen worden ;)
Beide manieren werken, maar niet zoals geplanned. Het zal mijn zondag zijn, want preg_replace is in ieder geval niet de beste manier. De reden: een div layer en een img moeten hetzelfde nummer hebben voor mijn javascript. De div layer laat namelijk informatie weergeven over de image. Het gaat om een systeem waarbij images geresized worden naar de opgegeven breedte om vervolgens de percentages van de gere grootte weer te geven.

Gezien jouw reactie cripz, lijkt het mij dat jij zegt dat het hele systeem wat ik gebruik anders kan. Dan vraag ik mij natuurlijk af: hoe? ;)


Ik had al beredeneerd dat ik preg_replace niet moest gebruiken, toch is het mij op deze zondag gelukt een topic daarover te starten 8)7

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

EnsconcE schreef op zondag 12 augustus 2007 @ 19:38:
[...]

Gezien jouw reactie cripz, lijkt het mij dat jij zegt dat het hele systeem wat ik gebruik anders kan. Dan vraag ik mij natuurlijk af: hoe? ;)
Dat ligt een beetje aan je markup; als je daarin een directe relatie kan leggen tussen je plaatje en je div heb je ueberhaupt geen id's nodig. Misschien is er ook een mogelijkheid om het puur unobtrusive te doen (waarbij je de markup benodigd voor de JS-behavior ook met JS genereerd).

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • EnsconcE
  • Registratie: Oktober 2001
  • Laatst online: 19-06 00:07
crisp schreef op zondag 12 augustus 2007 @ 22:40:
[...]

Dat ligt een beetje aan je markup; als je daarin een directe relatie kan leggen tussen je plaatje en je div heb je ueberhaupt geen id's nodig. Misschien is er ook een mogelijkheid om het puur unobtrusive te doen (waarbij je de markup benodigd voor de JS-behavior ook met JS genereerd).
Pfoe, veel van wat je zegt gaat langs me heen. Mijn vervanging voor de bbcode ziet er zo uit:
code:
1
<div id="postedimagediv{IMAGE_UNIQUE_ID}"></div><img id="postedimage{IMAGE_UNIQUE_ID}" src="{URL}" border="0" alt="" title="" />


Op deze manier creeer ik duidelijk een relatie tussen de div en de img. Wat het voor mij weer makkelijk maakt javascript te schrijven die alle img's binnenhaalt(getElementsByTagName), de id's ervan uitelkaar sloopt, de unique id pakt en deze achter postedimagediv plakt. Daarmee heb ik mijn div en kan ik ermee doen wat ik wil. Ik zou geen andere manier weten...

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

In dat geval is vanuit je image gezien de div gewoon de previousSibling.

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • ATS
  • Registratie: September 2001
  • Laatst online: 18-09 15:14

ATS

Of je zet de image in je div, en gebruikt de parent. Die div is anders toch maar zo leeg :-) Nouja, het hangt er vanaf wat je er verder mee wil.

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


Acties:
  • 0 Henk 'm!

  • EnsconcE
  • Registratie: Oktober 2001
  • Laatst online: 19-06 00:07
crisp schreef op zondag 12 augustus 2007 @ 23:18:
In dat geval is vanuit je image gezien de div gewoon de previousSibling.
Wauw, daar ging een wereld voor me open. Dit zocht ik laatst ook maar ik wist helaas de naam niet ;)
ATS schreef op maandag 13 augustus 2007 @ 09:49:
Of je zet de image in je div, en gebruikt de parent. Die div is anders toch maar zo leeg :-) Nouja, het hangt er vanaf wat je er verder mee wil.
Ik heb een border rond de image, de border een css(via js) van de image zelf. Daarboven zit dus de div om aan te geven hoeveel % de image geresized is en dat deze geresized is.

Daarnaast werkt previousSibling wel voor een geposte image, helaas gebruik ik de javascript ook voor avatars en signature images. En die moeten alle 3 anders behandelt worden. Nou kan ik wel kijken waar ze staan en aan de hand van die voorwaarden het plaatje aanpassen, wat ik aan het schrijven ben is een mod voor een standaard forum. Het moet dus ook geinstalleerd kunnen worden op andere templates. In dit geval lijkt het mij nog steeds beter iedere "type" image een ander id te geven om zo de verschillen makkelijk te zien.
Pagina: 1