Template-parser foreach

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

Senior .NET developer

Klaar voor een nieuwe uitdaging? Welke technologieën gaan schuil achter de dagelijkse energievoorziening? Als senior .NET developer bij Kenter maak jij samen met je team het verschil, zowel voor de interne organisatie als voor eindklanten. Samen bouwen jullie aan innovatieve dienstverlening met behulp van de nieuwste technologieën en tools. Het is een functie met veel vrijheid, goede arbeidsvoorwaarden én je draagt jouw steentje bij aan de energietransitie. Klinkt dit als iets voor jou? Lees dan verder of solliciteer direct! Wat ga je doen als senior .NET developer? Als senior .NET developer bij Kenter (onderdeel van Alliander) ben je van onschatbare

Bekijk vacature »

Embedded Software Developer

Functie omschrijving Voor een mooi softwarebedrijf in omgeving Moordrecht zijn wij op zoek naar een Embedded Software developer. Ben jij enthousiast en een echte team player? Lees dan snel of dit iets voor jou is! Binnen deze rol houdt jij je bezig met alle werkzaamheden die nodig zijn om een functionaliteit te bouwen. Denk aan ontwerpen, architectuur, programmeren en algoritmes. Je voert test en validatie werkzaamheden uit bij de implementatie bij de klant. Ben jij een Embedded Software Developer die affiniteit heeft met de allernieuwste technieken? Laat dan snel wat van je horen! Bedrijfsprofiel Onze opdrachtgever bestaat uit een groot

Bekijk vacature »

Backend Developer Scrummaster .NET

Samengevat: Deze werkgever is een ambitieus internetbedrijf met een passie voor digitale communicatie. Ben jij geschikt als Backend Developer? Heb je ervaring met .NET platform? Vaste baan: Backend Developer / SCRUM Master Scrum HBO WO €3.800 - €6.000 Deze werkgever is een innovatief bedrijf met enthousiaste mensen die jarenlang ervaring hebben met het ontwikkelen internet- en intranetoplossingen. Wij houden van korte lijnen en open en eerlijke communicatie. Wij zetten graag onze jarenlange ervaring in om perfect werkende oplossingen te ontwikkelen. Wij ondersteunen dienstverlenende organisaties bij het ontwikkelen en realiseren van een effectief, adaptief communicatieplatform. Je ontwikkelt met ons de meest

Bekijk vacature »

Java Ontwikkelaar

Java/Kotlin Developer Ben jij een ervaren Java/Kotlin developer met een passie voor het automatiseren van bedrijfsprocessen? Wil je graag deelnemen aan uitdagende projecten bij aansprekende klanten? En ben je op zoek naar een professioneel, ambitieus en dynamisch bedrijf om je carrière verder te ontwikkelen? Kom dan ons team bij Ritense in Amsterdam versterken! Zo ziet de functie eruit: Als Java/Kotlin developer bij Ritense ben je verantwoordelijk voor de ontwikkeling en implementatie van applicaties die bedrijfsprocessen automatiseren, zodat onze klanten slimmer, efficiënter en klantgerichter kunnen werken. Als developer ben je in de lead en zorg je voor de correcte oplevering van

Bekijk vacature »

Android developer

De functie Schiphol is een plek om te reizen, te verblijven en te werken. Door middel van data en technologie richten we op al deze gebieden het leef- en werkklimaat optimaal in en zorgen we voor een slimmere en efficiëntere operatie. Wij ontwikkelen nieuwe producten en diensten vanuit de wensen en behoeften van onze klanten, voorspellen passagier flows en testen digitale oplossingen om rijen en andere pijnpunten in het proces te verminderen. Met slimme feedback van sensortechnologie maken we zelfs data van toiletten en stoelen inzichtelijk en bruikbaar. Het Commercial Platform bestaat uit multidisciplinaire teams met een end-2-end verantwoordelijkheid voor

Bekijk vacature »

Junior Software Developer C# Verhuursector Verhuur

Samengevat: Wij ontwikkelen en leveren softwaresystemen voor de logistieke sector en de verhuursector. Ben jij geschikt als Junior Software Developer? Heb je ervaring met Delphi? Vaste baan: C# Software Developer Logistiek HBO €2.500 - €3.900 Deze werkgever is een software ontwikkelaar, gericht op software voor de logistieke sector. Deze werkgever heeft eigen producten ontwikkelen en leveren ook maatwerk. Ons bedrijf kent een boeiende en inspirerende werkomgeving met een open cultuur en mogelijkheden voor je verdere ontwikkeling. Bij bij hun werk je aan onze eigen bedrijfsapplicaties. Je ontwikkelt met ons de meest nieuwe software. Wij blinken uit als het gaat om

Bekijk vacature »

Front-end Developer

Onze klant is sinds 2 jaar actief als adviseur en bemiddelaar in de verzekeringsmarkt. Sindsdien proberen zij deze slapende markt flink wakker te schudden. Dit willen zij doen door het bouwen van slimme vergelijkers op hun eigen website en die van partners. Het bedrijf wil continu voorop lopen, zodat consumenten eenvoudig de verzekeringen kunnen vinden die het beste bij ze past. Functieomschrijving Als Front-end Developer werk je aan vergelijkingsmodules die consumenten dagelijks gebruiken bij het vergelijken en afsluiten van verzekeringen. Je vindt het leuk om samen te werken met de product owner, bestaande modules te verbeteren en nieuwe vergelijkers "from

Bekijk vacature »

Junior .NET developer

Functie Om half 9 kom jij binnen en pak jij als eerst natuurlijk een bakje koffie of thee. Vervolgens ga jij je voorbereiden op de stand-up van kwart voor 9. Zijn er bijvoorbeeld dingen waar jij nog tegen aan loopt? Of is er nog code die getest of gereviewd moet worden? Vervolgens starten jullie met de stand up en na de stand up zoeken jullie elkaar op en gaan jullie aan de slag. Als team met 6 developers werken jullie in drie wekelijkse sprints. Het einde van een sprint is altijd op een donderdag zodat jullie op vrijdag de demo

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

Full stack .NET developer Microsoft 365

Wat ga je doen als Full stack .NET developer Microsoft 365? Je stelt je op als sparringpartner voor het team en PO over toekomstige functionaliteiten, architectuur en mogelijke nieuwe producten. Je bent mede-verantwoordelijk voor het vertalen en omzetten van een user story in een passend technisch design. Je implementeert functionaliteiten op basis van een technisch design en user story. Je bent mede-verantwoordelijk voor het beheer van Azure DevOps, waaronder het beheer van GIT, Build Pipelines, Release Pipelines en geautomatiseerde testen. Hier herken jij jezelf in Hbo werk- en denkniveau of hoger aangevuld met relevante certificeringen en/of cursussen; Minimaal 3 jaar

Bekijk vacature »

Full stack Developer / .NET / Angular / Azure

Dit ga je doen Jij gaat je als Full Stack .NET Developer voornamelijk bezighouden met: Het vertalen van concepten naar passende innovatieve en duurzame oplossingen; Het ontwikkelen van bedrijf kritische en gebruiksvriendelijke applicaties voor de internationale markt en intern gebruik; Bouwen aan software om het Internet of Things netwerk te ondersteunen; Het maken en onderhouden van interfaces tussen systemen aan de hand van API's; Het onderhouden en blijven verbeteren van de ontwikkelde software. Hier ga je werken Binnen deze organisatie zal jij als Full Stack .NET Developer een belangrijke rol krijgen en ga je dagelijks de uitdaging aan om maatwerk

Bekijk vacature »

.NET developer

Functie Als developer heb jij de keuze om aan te sluiten bij het team (13 developers) die op locatie projectmatig bij klanten werkt. Wanneer jij liever intern bij de werkgever werkt is er ook alle ruimte voor jou in het interne team (8 developers) van dit bedrijf. Je werkt samen aan verschillende projecten bij of voor de klant. Het project wordt aangeleverd door sales aan de project manager. Die maakt samen met de Resourcer een planning en op basis daarvan wordt uit het development team een “projectgroep” opgesteld. Hoeveel en welke projecten jij wilt oppakken gebeurt geheel in samenspraak met

Bekijk vacature »

Mendix Developer

Voor Troostwijk Groep zoeken wij een: Mendix Developer Wij zoeken Je bent een getalenteerde en ervaren Mendix Developer en het is tijd om je horizon te verbreden. Je wilt minder coderen en meer modelleren, minder bezig zijn met allerlei technische details en randvoorwaarden en meer met functionaliteit. Daarnaast ben je trots op de innovatieve en gebruiksvriendelijke applicaties die je in de loop van de jaren hebt gebouwd. Werk je graag in een enthousiast team, wil je veel vrijheid en kun je tegelijkertijd goed met deadlines omgaan, dan ben jij absoluut degene die wij zoeken! Wat je nodig hebt is ruime

Bekijk vacature »
Write Down

Write Down

11/08/2011 12:13:49
Quote Anchor link
Update Gelieve naar mijn laatste post te kijken.

Hallo,

Ik heb momenteel een simpele template parser gemaakt die doet wat hij moet doen. Nu zou ik er toch nog een kleine toevoeging aan willen doen, waardoor ik werkelijk alle HTML zou kunnen scheiden van mijn PHP-code.

Nu, ik écht onhandig met regexxen en kom er niet bepaald goed uit. Ik ben momenteel wat aan het testen, maar het lukt me niet helemaal. Mijn bedoeling is dat de volgende syntaxis wordt gebruikt: (voorbeeldje)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
{$FOREACH_USERS@username@mail@gsm}
'Username: {@username} mail: {@mail} gsm: {@gsm} <br />
{$FOREAH_USERS}


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
/* in PHP zou ik dat dan als volgt doen */
$oTemplate->addForeach('foreach_users', array('usern' => 'Write', 'mail' => '[email protected]', 'gsm' => '0000000001'));

/* Uiteraard met meer dan 1 user */
?>


Ik ben alvast de volgende regex uitgekomen:
/{\$([A-Z0-9_-]+)@([A-Z0-9_-]+)}(.+?)\{\$([A-Z0-9_-]+)}/s

Nu, dat is nog niet helemaal wat ik wil. Momenteel kan er maar 1x @ gebruikt worden. Terwijl dit eigenlijk ongelimiteerd x zou moeten lukken.
Gewijzigd op 12/08/2011 16:31:55 door Write Down
 
PHP hulp

PHP hulp

05/01/2025 01:29:46
 
Fabian M

Fabian M

11/08/2011 15:01:39
Quote Anchor link
Je hoort geen REGEX te gebruiken voor een parser.
 
Write Down

Write Down

11/08/2011 15:07:39
Quote Anchor link
Wat dan wel? voor zover ik weet doet Smarty het ook met regex'en?

Toevoeging op 11/08/2011 21:14:59:

Niemand? Het geen waar ik eigenlijk iets moet op vinden is het volgende stukje: @([A-Z0-9_-]+)

Dat stukje zou zich meermaals moeten kunnen herhalen, en hoe ik dat kan bereiken, weet ik niet :(.

Toevoeging op 12/08/2011 11:15:39:

Ik heb enige vooruitgang geboekt, maar volgens mij kan het eenvoudiger:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$sTest
= '{$FOREACH@KEY1@KEY2@KEY3}
            blabla
          {$FOREACH}
          '
;
preg_match('/{\$([A-Z0-9_-]+)(.+?)}(.+?)\{\$([A-Z0-9_-]+)}/s', $sTest, $aArr);
preg_match_all('/@([A-Z0-9_-]+)/s', $aArr[2], $aArr);

echo '<pre>';
print_r($aArr);
echo '</pre>';
?>
Gewijzigd op 11/08/2011 15:10:07 door Write Down
 
Write Down

Write Down

12/08/2011 16:28:04
Quote Anchor link
Ik bedenk me trouwens dat het eenvoudiger zou zijn als ik het volgende zou doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$sTest
= '{$FOREACH}
            <tr><td>@KEY1</td><td>@KEY2</td><td>@KEY3</td></tr>
          {$FOREACH}
          '
;
preg_match('/{\$([A-Z0-9_-]+)}(.+?)\{\$([A-Z0-9_-]+)}/s', $sTest, $aArr);

echo '<pre>';
print_r($aArr);
echo '</pre>';
?>


Output geeft dan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
Array
(
    [0] => {$FOREACH}
            @KEY1@KEY2@KEY3
          {$FOREACH}
    [1] => FOREACH
    [2] =>
            @KEY1@KEY2@KEY3
          
    [3] => FOREACH
)


Probleem is dat ik dan de cellen van de tabel verlies, wat ik eigenlijk ook nog nodig heb...

Toevoeging op 12/08/2011 16:48:54:

Heb nog wat verder geprutst, maar volgens mij kan het allemaal nog een stuk eenvoudiger. Even wel vermelden, dit is echt test-code, uiteraard zet ik dit nog om naar een mooie class.

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
23
24
25
26
27
<?php
$aTest
= array(
  'slt1' => 'hoi',
    'slt2' => 'hej',
    'slt3' => 'hi'
);
$sTest = '{$FOREACH}
            <tr><td>{@KEY1}</td><td>{@KEY2}</td><td>{@KEY3}</td></tr>
          {$FOREACH}
          '
;
preg_match('/{\$([A-Z0-9_-]+)}(.+?)\{\$([A-Z0-9_-]+)}/s', $sTest, $aArrO);

echo '<pre>';
print_r($aArrO);
echo '</pre><hr />';

preg_match_all('/{\@([A-Z0-9_-]+)}/s', $aArrO[2], $aArr);

echo '<pre>';
print_r($aArr[0]);
echo '</pre><hr />';

$sReplace = str_replace('{$'.$aArrO[1].'}', '', $sTest);
echo '<table>';
echo str_replace($aArr[0], $aTest, $sReplace);
echo '</table>';
?>
Gewijzigd op 12/08/2011 16:31:02 door Write Down
 
Write Down

Write Down

15/08/2011 01:23:49
Quote Anchor link
Ok, nieuwe ontwikkeling. Het is me dan toch uiteindelijk perfect gelukt, alleen kan het volgens mij nog een stukje eenvoudiger.

De syntaxis die ik gebruik is de volgende geworden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
{$LOOP@START}
   <tr><td>{@KEY1}</td><td>{@KEY2}</td><td>{@KEY3}</td></tr>
{$LOOP@STOP}


Vanuit mijn template-parser (een klasse) roep ik in de constuctor een callback functie aan, als volgt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$this
->_sOutput = preg_replace_callback('/{\$([A-Z0-9_-]+)@START}(.+?)\{\$([A-Z0-9_-]+)@STOP}/s', array($this, 'replaceForeach'), $this->_sOutput);
?>


En de "replaceForeach" ziet er dan als volgt uit, let wel op dat mijn code nog niet al te netjes is!

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
    private function replaceForeach($aMatch) {
        $iStart = strpos($this->_sContent, '{$'.$aMatch[1].'@START}') + strlen(('{$'.$aMatch[1].'@START}'));
        $iStop = strpos($this->_sContent, '{$'.$aMatch[1].'@STOP}', $iStart);
        $this->_sForeach = substr($this->_sContent, $iStart, $iStop - $iStart);
        preg_match_all('/{\@([A-Z0-9_-]+)}/', $this->_sForeach, $this->_aForeach);
        
        $gegevens = count($this->_aReplacements[strtolower($aMatch[1])]);
        $replacements = count($this->_aForeach[0]);
        $rijen = $gegevens/$replacements;
        $vervang_geg = $this->_aReplacements[strtolower($aMatch[1])];
        $complete_output = '';
        for ($rij = 0; $rij < $rijen; $rij++) {
            $huidige_rij = $gegevens-($rij*$replacements);
            $start = $gegevens-$huidige_rij;
            for ($replace_start = 0; $replace_start < $replacements; $replace_start++) {
                $index = $start + $replace_start;
                $output_rij[$replace_start] = $vervang_geg[$index];
            }
            $complete_output .= str_replace($this->_aForeach[0], $output_rij, $this->_sForeach);
        }
        return $complete_output;
    }


Volgens mij kan de bovenstaande code echter nog een heel stuk eenvoudiger.
 
Kees Schepers

kees Schepers

15/08/2011 09:17:35
Quote Anchor link
Waarom wil je iegenlijk een eigen template parser bouwen? :)
 
Fabian M

Fabian M

15/08/2011 10:02:08
Quote Anchor link
Write Down op 11/08/2011 15:07:39:
Wat dan wel? voor zover ik weet doet Smarty het ook met regex'en?

Toevoeging op 11/08/2011 21:14:59:

Niemand? Het geen waar ik eigenlijk iets moet op vinden is het volgende stukje: @([A-Z0-9_-]+)

Dat stukje zou zich meermaals moeten kunnen herhalen, en hoe ik dat kan bereiken, weet ik niet :(.

Toevoeging op 12/08/2011 11:15:39:

Ik heb enige vooruitgang geboekt, maar volgens mij kan het eenvoudiger:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$sTest
= '{$FOREACH@KEY1@KEY2@KEY3}
            blabla
          {$FOREACH}
          '
;
preg_match('/{\$([A-Z0-9_-]+)(.+?)}(.+?)\{\$([A-Z0-9_-]+)}/s', $sTest, $aArr);
preg_match_all('/@([A-Z0-9_-]+)/s', $aArr[2], $aArr);

echo '<pre>';
print_r($aArr);
echo '</pre>';
?>


Regex is veelste ingewikkelt om een template parser mee te bouwen, het kan geen sytax errors mee opsporen, etc.

http://stackoverflow.com/questions/3887548/need-to-optimize-regex-for-a-template-parser
Gewijzigd op 15/08/2011 10:03:10 door Fabian M
 
Write Down

Write Down

15/08/2011 10:35:55
Quote Anchor link
@Kees

Ik ben er mij van bewust dat er een aantal goede parsers op het web zijn, met uitstek Smarty. Ik ben echter van mening dat deze te uitgebreid is, van heel het Smarty gebeuren heb ik amper een paar functies nodig. Verder is het natuurlijk ook gewoon leuk om zelf één te maken en daardoor kennis te verwerven. Waarom maken mensen een eigen CMS, buiten het feit dat het te commercialiseren is?

@Fabian
Ik heb even de informatie doorgenomen en wat verder gezocht. Ik moet je gelijk geven, hoe dieper je wilt gaan, hoe lastiger en hoe lastiger het is om met een regex het werkje te klaren. Echter, net als in één van de reacties stond, ik hoef zo diep niet te gaan. Overigens komt er in de andere functies van template parser geen regex voor, wat de prestaties dus toch nog relatief goed zou moeten houden.
 



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.