Template-parser foreach

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Account Developer

Voor Bol.com zijn wij per direct op zoek naar een Account Developer voor 32-40 uur per week op het kantoor in Utrecht. Wil jij een directe bijdrage leveren door partners van de juiste data-inzichten te voorzien en via campagnes op nieuwe platformkansen en features te wijzen? Ben jij analytisch sterk en kun jij dit vertalen naar plannen en inspirerende gesprekken? Lees dan snel verder! wat bieden wij jou Salaris van €2400 - €2600 obv 40 uur Minimaal 6 maanden Werklocatie is Utrecht Werken bij bol.com wie ben jij Jij bent commercieel gedreven en weet altijd aan de juiste knoppen te

Bekijk vacature »

Applicatie ontwikkelaar

Functie omschrijving Zelfstandige applicatie ontwikkelaar gezocht voor familiair bedrijf in omgeving Barendrecht! Ben jij op zoek naar een nieuwe uitdaging en zoek jij een informele werkgever waar je zelfstandig kunt werken binnen een leuk IT team, lees dan snel verder want wie weet zijn wij op zoek naar jou! Binnen deze rol houdt jij je met het volgende bezig: Onderhouden en ontwikkelen van de IT systemen; Opzetten van Azure Cloud systemen, denk aan interfaces, hardware op de Cloud, webportalen of BI functies; Werken aan scripts binnen verschillende software applicaties, denk aan ERP en CAD; Ontwikkelen en implementeren van MS PowerApps

Bekijk vacature »

Front end developer

Functie Het team bestaat uit User Experience designers, Data Scientists en Software Engineers met passie voor hun vak. De consultants en ontwikkelaars werken volgens de Design Thinking methode waarbij de eerste stappen van ontwerp en ontwikkeling zullen samenkomen in een proof of concept. Nadat is vastgesteld dat de oplossing voldoet aan de belangrijkste behoeftes worden producten of services gevalideerd door middel van korte iteraties. Hiermee zorgen ze ervoor dat het werk voldoet aan de technische vereisten en gebruikersbehoefte. Door het inzetten van de nieuwste technologieën die toekomstbestendig zijn weten ze klanten omver te blazen. Ook geven en organiseren ze veel

Bekijk vacature »

Traineeship ICT regio Amsterdam/Utrecht

Wat ga je doen? Het traineeship begint met een fulltime maand cursussen en praktijkdagen, waarin je de basis van het IT-vak leert op de Shared Servicedesk (SSD). Daarnaast ga je meteen aan de slag voor je eerste certificering! (ITILv4). Je start in een groep met 4 tot 10 deelnemers, waarmee jij gedurende die maand optrekt en je kennis kunt delen. Na het voltooien van de eerste maand ga je direct voor een langere periode aan de slag bij één van onze klanten of blijf je intern bij ons op de Shared Servicedesk. Je bent het eerste aanspreekpunt van de eindgebruikers

Bekijk vacature »

Back-end Developer

Functieomschrijving Heb jij kort geleden je HBO ICT Informatica diploma in ontvangst mogen nemen? Of heb je een aantal jaar ervaring als Software Developer en ben je klaar voor een nieuw hoofdstuk in jouw carrière? Voor een gewaardeerde werkgever in de regio van Goirle zijn wij op zoek naar een junior/medior Back-end Developer met affiniteit met MS Acess. Samen met een vooruitstrevend team ben je verantwoordelijk voor het ontwikkelen van maatwerk software voor hun klanten. Je hebt kennis of ervaring van SQL en affiniteit met MS Acess. Je bent klantvriendelijk en flexibel ingesteld en vindt het leuk om klanten te

Bekijk vacature »

.NET developer

Functie Als ervaren .NET ontwikkelaar start jij in één van onze vier scrumteams. Met 30 ontwikkelaars werk jij aan de doorontwikkeling van ons core product. Ook werkt jouw team aan maatwerkoplossingen op aanvraag van de klant en op projectbasis. Wij vinden het erg belangrijk dat onze ontwikkelaars met plezier naar werk gaan. Een deel hiervan ligt uiteraard bij jezelf, als jij ontwikkelen niet leuk vindt, ben jij bij ons echt aan het verkeerde adres. Jouw team bestaat namelijk uit een groep gepassioneerde vakidioten die dit werk doen omdat dit eerst een hobby was! Daarnaast wordt er intern rekening gehouden met

Bekijk vacature »

(Junior) PHP Ontwikkelaar bij een retail bedrijf i

Bedrijfsomschrijving Ben jij een ervaren PHP ontwikkelaar met een passie voor retail en ICT? Wil jij werken in een team dat zich bezighoudt met het ontwikkelen van uitdagende applicaties voor een groot retailbedrijf in Delft? Dan zijn zij op zoek naar jou! Functieomschrijving Als PHP Ontwikkelaar werk je in een team aan de ontwikkeling van applicaties die door de gehele organisatie worden gebruikt. Je bent verantwoordelijk voor het ontwikkelen, testen en implementeren van deze applicaties. Je werkt hierbij nauw samen met andere ontwikkelaars, projectmanagers en stakeholders binnen de organisatie. Je taken bestaan onder andere uit: Ontwikkelen van nieuwe functionaliteiten en

Bekijk vacature »

Lead javascript developer Node.js React

Functie Als fullstack JavaScript developer vind jij het uitdagend om op basis van concrete klantvragen nieuwe functionaliteiten te ontwikkelen. Bij voorkeur worden deze functionaliteiten op een bepaalde manier geprogrammeerd, zodat ze door meerdere klanten te gebruiken zijn. Je hebt dus vaak te maken met abstracte vraagstukken. Om dit te kunnen realiseren sta je nauw in contact met de product owner en/of klant. Je bent niet alleen onderdeel van het development team, maar hebt ook vaak contact met de product-owner en/of klanten om daardoor inzichten te verzamelen die leiden tot productverbeteringen. • Inzichten verzamelen bij de klant en/of product owner •

Bekijk vacature »

C#.NET ontwikkelaar

Functieomschrijving Voor een gewaardeerde werkgever in regio Tilburg zijn wij op zoek naar een C#.NET ontwikkelaar. Je bent verantwoordelijk voor het ontwikkelen van dashboards, webapplicaties en apps voor de eigen IOT-oplossingen. Samen met een vooruitstrevend team van ontwikkelaars en engineers krijgen jullie de opdracht om de sensoren in de apparatuur te scannen en vervolgens de data om te zetten in belangrijke inzichten voor de klanten. Taken en verantwoordelijkheden: Heb jij ideeën over nieuwe technieken die jullie kunnen implementeren? Hier wordt echt naar je geluisterd en gekeken of jouw idee daadwerkelijk ingezet kan worden; Je gaat aan de slag met de

Bekijk vacature »

Low Code Developer - Consultant

Functie omschrijving Wil jij fungeren als een spin in het web en samenwerken met klanten? Voor een leuke en interessante opdrachtgever in omgeving Leiden zijn wij op zoek naar een Low Code developer die zich bezig gaat houden met het optimaliseren van bedrijfsprocessen bij klanten en het leiden van projecten. Ben jij toe aan een nieuwe uitdaging en heb jij verstand van datamodellering en NO CODE Platformen? Lees dan snel verder! Bij deze rol horen de volgende werkzaamheden: Je gaat geen code kloppen maar bedenken hoe applicaties eruit moet komen te zien. Je gaat werken met een non code platform,

Bekijk vacature »

Productontwikkelaar Food

Wat ga je doen Als Productontwikkelaar Food ga je nieuwe producten ontwikkelen en bestaande producten verbeteren. Je bent hierbij betrokken bij het gehele proces: van productconcept naar proefreceptuur, het realiseren va het product (op kleine schaal) en het testen van producten in een productieomgeving. Verder: Bewaak je de status van verschillende fases van productontwikkeling en lever je tijdig de benodigde data aan Ben je bezig met de optimalisatie van oude en nieuwe recepturen Begeleid of organiseer je proefsessies (sensorisch onderzoek) in het team en/of bij klanten Onderhoud je contacten met de klanten, leveranciers van grondstoffen e.a. externe partijen Houd je

Bekijk vacature »

IoT Developer

Ben jij innovatief, heb jij passie voor energie en ben je data gedreven? Bouw dan mee aan IoT binnen Bredenoord. Samen met een gedreven team werk jij aan mooie technische en innovatieve oplossingen. Wat houdt de functie van IoT Developer in? Binnen Bredenoord zijn wij momenteel volop in ontwikkeling met ons IoT platform. Als uitbreiding van ons team zijn wij op zoek naar een IoT Developer. Je zal in projectverband meehelpen met het implementeren van IoT vraagstukken binnen Bredenoord. Als IoT Developer op onze R&D-afdeling word je verantwoordelijk voor het verder inrichten en beheren van ons nieuwe IoT platform. Dat

Bekijk vacature »

Front End Ontwikkelaar (React)

In het kort Als front end developer ga je aan de slag met maatwerkprojecten voor onze klanten. Denk bijvoorbeeld aan het toevoegen van een machine aan een database of het corrigeren van formulieren voor ingestuurde orders. Voorbeeld van zo’n project is Smart Link. De projecten waar je op ingezet kunt worden liggen binnen het technische domein waar jij als front end developer een grote rol speelt om samen met je back end collega’s de juiste oplossingen te leveren. please note that this particular role requires fluent Dutch language skills. Dit vind je leuk om te doen Het omzetten van designs

Bekijk vacature »

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 »

Ervaren PHP ontwikkelaar

Functie Jij als PHP ontwikkelaar komt te werken in een team van 4 andere PHP ontwikkelaars. Je zult je voornamelijk bezig houden met: – Het ontwikkelen van nieuwe features – Doorontwikkelen van de API – Nadenken over de technische infrastructuur – Datakwaliteit Samen met het team ben jij verantwoordelijk voor de verdere ontwikkeling van de software en om de positie als marktleider in Europa te behouden. Ze werken volgens SCRUM in 2 wekelijkse sprints, werken met Jira voor alle tickets en communiceren veel via Slack. Eisen • Minimaal 3 jaar ervaring als back end developer • Je hebt affiniteit met

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 09:31:49
 
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.