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 »

Remote - Front-end Angular developer

Functie The IT team currently consists of the IT Manager, 2 back-end developers, 1 full-stack developer, 1 designer, and a DevOps engineer. They are currently looking for an experienced Front-end developer who will work autonomously and in a disciplined manner, being the only developer working on their Front-end applications at the start. They do have the ambition to find a second developer soon, who you will then be able to supervise. You will be working on the further development of their existing UI in Angular. But also developing a mobile app. They place great value on User Experience and opt

Bekijk vacature »

Software Ontwikkelaar

Functie omschrijving Voor een echt familiebedrijf in de omgeving van 's-Hertogenbosch ben ik op zoek naar een Software Developer. Jij gaat in de functie van Software Developer werken met C# en .NET framework Jij gaat maatwerk software ontwikkelen en softwareoplossingen creëren. Daarnaast optimaliseer je de bestaande software. Oplossingen waar de klant echt iets aan heeft, jij krijgt er energie van op dit te realiseren. Je gaat werken in een Microsoft omgeving(ASP.NET) en gebruikt daarnaast C# en MVC. Samen met het huidige IT team binnen deze organisatie verwerk je de wensen van de klant tot een (eind)product. Bedrijfsprofiel Deze organisatie is

Bekijk vacature »

Low-code developer

Functie omschrijving Heb jij altijd al een training willen volgen in het buitenland? Voor een leuke opdrachtgever in omgeving Alphen ad Rijn zijn wij op zoek naar kandidaten die aan de slag willen als Low Code Developer! Beschik jij over HBO/WO nivo, bij voorkeur Informatica, maar een ander technische opleiding zoals bijv. wiskunde, natuurkunde is ook goed. Heb jij aantoonbare affiniteit met IT en ben jij gedreven, enthousiast, communicatief vaardig en klantgericht? Lees dan snel verder! Je wordt getraind tot een volwaardig Low Code Developer, het traject ziet er als volgt uit: Start 1e week januari, opleiding van 3 weken

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 »

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 »

SQL ontwikkelaar

Functieomschrijving Voor een gave werkgever in regio Breda zijn wij per direct op zoek naar een SQL ontwikkelaar/ functioneel consultant. Hier wordt jij mede verantwoordelijk voor zowel de design en implementatie van SQL-databases als voor het verstaan van de processen van klanten naar het vertalen van deze processen naar IT-oplossingen. Jouw takenpakket komt als volgt uit te zien: Je test de ontwikkelde oplossingen om er zeker van te zijn dat deze voldoen aan de functionele specificaties en de behoeften van de organisatie; Je ontwerpt, ontwikkelt en implementeert SQL-databases om de data behoeften van de organisatie te ondersteunen; Je stelt op

Bekijk vacature »

Senior Java Ontwikkelaar

Dit ga je doen Werken aan uiteenlopende interne projecten voor grote (internationale) organisaties; Ontwikkelen van diverse (web)applicaties en platformen met technieken als Java, Azure en ASP.NET; Complexe vraagstukken tackelen met jouw expertise en ervaring; Waar nodig help jij je collega's om samen tot de juiste oplossing te komen. Hier ga je werken Als Java Developer kom je te werken bij een internationale organisatie in regio Amsterdam die zich richt op procesoptimalisatie door middel van zeer complexe IT oplossingen. Dit doen zij op het allerhoogste niveau met vestigingen over heel de wereld en met een groot aantal aansprekende, maatschappelijk betrokken klanten.

Bekijk vacature »

Senior .NET developer

Functie Als Senior .NET ontwikkelaar ga jij aan de slag in ons Research & development team. Ons team bestaat uit 17 collega’s! Wij zijn momenteel druk bezig met het opzetten van een geheel nieuwe architectuur voor een nieuw product. Hierbij maken wij o.a. gebruik van VS2022 en .NET 6.0. Jouw functie is dan ook voornamelijk backend georiënteerd bij ons. Aangezien wij meetapparatuur ontwikkelen voor de chemische industrie is het ook erg belangrijk om kwalitatief hoogwaardige software te ontwikkelen voor de besturing hiervan. Verder ben jij verantwoordelijk voor het designen, implementeren en testen van nieuwe features. Ook zorg jij voor toekomstbestendige

Bekijk vacature »

Ervaren Magento developer gezocht!

Functie Je komt te werken in een zelfsturend team waarin vertrouwen voorop staat en inbreng en ideeën worden gewaardeerd. Ook staat innovatie centraal. Ze bieden jou de mogelijkheid om jezelf door te ontwikkelen. Denk hierbij aan cursussen en een persoonlijk ontwikkelplan. Je komt terecht in het team van momenteel 4 (ervaren) collega’s en zal meewerken aan de doorontwikkeling en nieuwbouw van de Magento platformen van meerdere opdrachtgevers volgens Agile/Scrum. Denk hierbij aan nieuwe functionaliteiten, UX en koppelingen met verschillende back-end systemen. Als ervaren developer zul je hiernaast ook andere developers assisteren en waar nodig de leiding nemen in het project.

Bekijk vacature »

C# Ontwikkelaar

Functie omschrijving We are looking for a dutch native speaker Wil jij graag aan de slag als C# ontwikkelaar en jouw skills verder ontwikkelen? Zoek niet verder! Als C# ontwikkelaar ga je aan de slag met de volgende taken: (verdere) ontwikkeling van de software voor de interne processen binnen een .net omgeving; optimaliseren van de dataprocessing; ontwerpen en implementeren van zowel desktop- als web-programmatuur; ontwikkeling van tools ten behoeve van consultants en klanten. Bedrijfsprofiel Deze organisatie is gevestigd in de regio van Den Bosch. Zij ontwikkelen business intelligence software voor een specifieke branche. Dit houdt in dat zij dashboards ontwikkelen

Bekijk vacature »

.NET Developer Microservices

Dit ga je doen Je taken zullen voornamelijk bestaan uit: Het ontwikkelen van software, inclusief vormgeving, implementaties, integraties en (automatisch) testen (.NET, C#, Azure, Docker, Microservices, Angular); Het in kaart brengen van software requirements; Zorgen dat jouw code kwalitatief hoogstaand is; Het uitvoeren van risico analyses; Een bijdrage leveren aan het continuous quality improvement process. Hier ga je werken Dat kanker een verschrikkelijke ziekte is die de wereld uit geholpen moet worden, is duidelijk. Binnen deze Gelderse organisatie die duizenden ziekenhuizen van producten voorziet, proberen ze daar via technische innovaties aan bij te dragen. Samen met 10 collega .NET developers

Bekijk vacature »

Full Stack C#.NET developer

Functieomschrijving Wij zijn op zoek naar een gepassioneerde Full Stack C#.NET Software Developer. Als Software Developer ben je verantwoordelijk voor het ontwikkelen van webapplicaties, apps en dashboards voor de eigen IOT-oplossingen. Je werkt samen met andere ontwikkelaars en engineers om de sensoren in machines uit te lezen en deze data om te zetten in management informatie voor jullie klanten. Taken en verantwoordelijkheden: Ontwikkelen en onderhouden van webapplicaties, apps en dashboards voor de eigen IOT-oplossingen. Testen en valideren van de ontwikkelde software. Actief deelnemen aan code reviews en bijdragen aan het verbeteren van de kwaliteit van de software. Je gaat aan

Bekijk vacature »

C# developer

Functie Als ervaren Software Engineer wordt jij verantwoordelijk voor het bedenken en ontwikkelen van technische (maatwerk) oplossingen voor onze klanten en dit samen met de klant af te stemmen. Jij wordt o.a. verantwoordelijk voor de doorontwikkeling het software pakket welke voor ons enorm belangrijk is. Dit pakket zorgt er namelijk voor dat wij complete productielijnen kunnen aansturen en monitoren. Daarnaast heb jij actief contact met onze hoofdvestiging om het software achter een van onze systemen te verbeteren en te herschrijven. Momenteel zijn onze C# applicaties geschreven met o.a. Winforms. Echter hebben wij de actieve ambitie om dit te gaan herschrijven

Bekijk vacature »

C# .NET Developer IoT SQL Server

Samengevat: Wij ontwikkelen innovatieve oplossingen om apparaten en bezittingen op een eenvoudige en flexibele manier te beveiligen. Ben jij een C# .NET developer? Heb jij ervaring met C# en SQL server? Vaste baan: C# .NET Developer IoT HBO €3.200 - €4.500 Deze werkgever is gespecialiseerd in hoogwaardige GSM/GPRS alarm- en telemetrietechnologie. Met een eigen productlijn en klantspecifieke ontwikkelingen biedt deze werkgever oplossingen om op afstand te meten, melden, loggen en aansturen, ook op plaatsen zonder stroomvoorziening. Onze producten worden gekarakteriseerd door flexibiliteit in de configuratie, betrouwbaarheid en een extreem laag stroomverbruik. Zij werken voor MKB klanten. Deze werkgever heeft veel

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

06/01/2025 22:30:14
 
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.