Template-parser foreach

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Front-end developer (React)

Functie Het frontend team bestaat momenteel uit 4 dedicated front-enders en is hard aan het groeien! Ook werken er diverse designers waar je veel mee schakelt. Samen leveren jullie een essentiële bijdrage aan de applicaties die ze voor hun klanten realiseren, jij bent hierin de schakel tussen de eindgebruiker en de slimme backend. Je werkt in het frontend team samen met de backend teams en product owners om te zorgen dat onze applicaties een fijne gebruikerservaring opleveren. Ze werken o.a. met: React, Atomic design, Styled components, JavaScript / TypeScript, NPM, Webpack Blade templates, HTML, SCSS, Git flow. Eisen • HBO

Bekijk vacature »

Medior Java developer

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 »

.NET Developer Medior Senior

Dit ga je doen Ontwikkelprocessen verder optimaliseren en verder ontwikkelen met C#; CI/CD-pipelines automatiseren; Herbruikbare componenten maken; Testen; Front-end pagina's gebruiksvriendelijk maken. Hier ga je werken Als .NET Developer kom jij terecht binnen een grote en internationale organisatie. Zij streven naar een positieve impact op de mens, milieu en maatschappij. Het bedrijf is oorspronkelijk een familiebedrijf en werkt aan de productie van hoogwaardige en technische systemen voor de gezondheidszorg. Momenteel willen zij betere ontwikkelprocessen creëren op internationaal gebied en staat kwaliteit en veiligheid voor hun op nummer 1! Als .NET Developer werk jij aan het ontwikkelen van verbeterde software voor

Bekijk vacature »

Oracle APEX Ontwikkelaar (3.500-6.000 euro)

Bedrijfsomschrijving Ben jij een getalenteerde Oracle APEX ontwikkelaar met minimaal één jaar ervaring in het ontwikkelen van Oracle APEX-applicaties? Ben je gepassioneerd over het ontwikkelen van bedrijfskritische oplossingen en wil je werken bij een toonaangevend consultancybedrijf? Dan zijn wij op zoek naar jou! Deze organisatie beschikt over zowel inhouse als externe projecten, maar bovenal over een sterk team en netwerk van opdrachten waardoor jij jezelf verder kunt ontwikkelen. Het team bestaat uit een aantal junior en medior developers, maar vooral uit senioren. De business unit managers binnen het team zijn mensen die hun vak verstaan en zelf als Oracle APEX

Bekijk vacature »

Junior .NET developer

Functie Wij zijn bezig met het ontwikkelen van een nieuw product en wij hebben jouw hulp hierbij nodig! Als junior .NET ontwikkelaar krijg jij de kans om samen met ons deze nieuwe uitdaging aan te gaan! Momenteel bestaat ons team uit drie interim Software Engineers. Twee hiervan zijn zeer ervaren .NET specialisten die inmiddels hun strepen in dit vakgebied al hebben behaald. Ook hebben wij een junior als onderdeel van ons team die zich op dit moment nog bezig houdt met de Front-end (Angular/TypeScript), maar zich nu ook meer gaat verdiepen in de backend. Wij willen ons team graag verder

Bekijk vacature »

No-Code Betty Blocks ontwikkelaar

Bedrijfsomschrijving Wil jij de bedrijfsprocessen van klanten revolutionair digitaliseren en optimaliseren zonder beperkt te worden door programmeertalen? Kom werken bij een snelgroeiende en professionele organisatie met een gezonde dosis humor en veel vrijheid om jezelf te ontwikkelen. Als No-Code Betty Blocks ontwikkelaar werk je vanuit ons kantoor in het hart van Nederland, je thuiswerkplek of op locatie bij de klant. We faciliteren de juiste trainingen en ondersteuning zodat je een echte Betty Blocks expert wordt. Naast het werk zijn er bij ons bijzondere events, zoals een jaarlijkse zeildag, een zomerse barbecue en een knus kerstdiner om de grillige maanden door

Bekijk vacature »

Front end developer

Functie Qua type opdrachten is er echt een verscheidenheid aan afnemers, zo werken ze met grote multinationals, maar ook met startups. Zo kom je te werken in een gevarieerde omgeving en kan je ook schakelen tussen verschillende culturen. De projecten variëren van greenfield projecten tot langdurige ontwikkeltrajecten. Hier wordt alleen maar gewerkt met aan front end projecten. Daarom maakt het onze partner niet uit waar jij kennis van hebt, als je maar gedegen kennis hebt van Javascript frameworks, Unit testing en ook bekend bent met de scrum methodiek. Eisen Minimaal 4 jaar relevante werkervaring Kennen en ervaring van Javascript frameworks

Bekijk vacature »

SAP ABAP Developer

Dit ga je doen Software ontwikkeling met behulp van o.a. ABAP, Sapscript en Smartforms Maatwerk development op SAP ECC 6.0, in de toekomst S/4 HANA Samenwerken met Business Analisten die functioneel en technisch ontwerpen aanleveren Testen van opgeleverde software Bugfixing Ondersteuning van eindgebruikers Hier ga je werken Onze klant, een internationaal gevestigd productiebedrijf dat mensen blij maakt, is ter versterking op zoek naar een ABAP Developer voor hun SAP team. Het team van 4 mensen verzorgt de ontwikkeling van maatwerk voor de SAP omgeving waar wordt gewerkt met modules SD, FI/CO, PM en MM. Momenteel draait het bedrijf op SAP

Bekijk vacature »

Full stack developer

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 »

Medior/senior PHP ontwikkelaar E-commerce

Functie Het software development team bestaat momenteel 5 scrum teams . Ieder team heeft een eigen SCRUM Master en eigen tester. Zij werken voornamelijk in PHP en met hun eigen geschreven framework wat Symfony based is . Jij bent samen met je collega’s verantwoordelijk voor het interne softwaresysteem en alle projecten die daar omheen lopen. Alles wat jij ontwikkelt, wordt direct toegepast en uitgerold (wereldwijd). Dit maakt jouw werk tastbaar en uitdagend! Een greep uit jouw werkzaamheden: Toevoegen en ontwikkelen van nieuwe functionaliteiten Logistieke software ontwikkelen voor intern gebruik Tientallen gigabytes aan data inzichtelijk maken Altijd op zoek gaan naar

Bekijk vacature »

Back-end Developer Java

Dit ga je doen Het (door)ontwikkelen van een zelfgebouwde applicatie in Java, Spring Framework, SQL, HTML, CSS en Javascript; End-to-end beheer m.b.t. de applicatie en koppelen van applicaties binnen het landschap; Ontwikkelen van rapportages voor de interne organisatie; Ontwikkelen van aanvullende functionaliteiten m.b.t. de applicatie; Uitvoeren van testen en code reviews. Hier ga je werken Binnen deze organisatie kom je te werken op de afdeling die medische gegevens verzamelt vanuit het hele land. Denk hierbij aan vertrouwelijke persoonsgegevens. Het team verwerkt al deze data met als doel het waarborgen en verbeteren van de kwaliteit van de zorg in heel Nederland.

Bekijk vacature »

WordPress & Azure Developer

Dit ga je doen Zowel front- als back-end development aan de online website omgeving; Het up-to-date houden van alle WordPress-sites; Koppelingen maken tussen applicaties; Meedenken en adviseren over verbeteringen; Development door middel van WordPress, Javascript, HTML en CSS; Werken binnen Scrum/Agile team. Hier ga je werken Voor een grote overheidsinstelling in Den Haag zijn wij opzoek naar een WordPress developer, met kennis en ervaring op het gebied van Azure. De organisatie zit in een grote transitie waarbij de gehele website/online omgeving vernieuwd zal gaan worden. Binnen dit Scrum/Agile team ben je verantwoordelijk voor deze grote migratie/ombouw van de omgeving. De

Bekijk vacature »

Front-end Developer - Juniorfunctie

Functie omschrijving Ben jij op zoek naar een uitdagende baan als front-end developer, in een informele werksfeer, waar jij echt het verschil kan maken? Wil jij graag werken voor een bedrijf dat sportiviteit en een open communicatie, hoog in het vaandel heeft staan? Dan hebben wij de perfecte vacature voor je! Voor een klein bedrijf in Rijen dat gespecialiseerd is in het omzetten van digitale woningtekeningen naar managementinformatie, zijn wij per direct op zoek naar een allround front-end developer. Jouw werkzaamheden zien er als volgt uit: Ja gaat nauw samenwerken met de back-end developer. De database structuur is volledig gebouwd

Bekijk vacature »

Frontend Developer

Functieomschrijving Voor de NIPV zijn wij opzoek naar een Frontend Developer. Als Frontend Developer ga jij aan de slag om dashboards te bouwen vanuit het datawarehouse. Dit stelt NIPV in staat om snel en eenvoudig bij correcte bedrijfsvoeringsinformatie te kunnen. Je ontwikkelt dashboards in PowerBI, publiceert en onderhoud die, verzameld en verwerkt feedback in overleg met het ontwikkelteam. Naast dashboards ontwikkel en onderhoud je een datamodel in Excel waarmee adviseurs, controllers en analisten in staat worden gesteld om de gegevens uit de dashboards te raadplegen en anders te filteren of bepaalde gegevens nader te verfijnen, zodat verdiepende vragen kunnen worden

Bekijk vacature »

Full Stack Developer

Dit ga je doen Ontwikkelen van Product Informatie Management (PIM) systemen; Werken aan zowel grotere als kleine projecten voor toonaangevende klanten binnen o.a. de retail; Verantwoordelijk voor de front-end werkzaamheden; Naast de front-end werk je ook aan de backend. Hier ga je werken Als Full Stack Developer komt je te werken binnen een vooruitstrevende organisatie die Product Informatie Management (PIM) systemen levert aan hun klanten. Hun klanten zijn toonaangevende bedrijven binnen o.a. de retail. De organisatie zit gevestigd in regio Zwolle en bestaat uit zo'n 35 medewerkers, waarvan 30 IT. Je komt te werken binnen één van de zelfsturende development

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

28/11/2024 07:17:27
 
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.