Pagination class review?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Laravel PHP developer in een jong team

Bedrijfsomschrijving Als je op zoek bent naar een werkplek waar plezier en uitdaging hand in hand gaan, dan is dit bedrijf de juiste keuze voor jou. Hier kun je werken aan uitdagende projecten en krijg je als developer veel verantwoordelijkheid. Het bedrijf waardeert kwaliteit boven kwantiteit en richt zich op het ontwikkelen van hoogwaardige applicaties en websites waar klanten enthousiast over zijn. Dit bedrijf is vooruitstrevend en streeft naar het leveren van de best mogelijke resultaten voor hun klanten. Als medior PHP ontwikkelaar met 3 jaar ervaring ben jij de persoon die we zoeken. Je krijgt hier de kans om

Bekijk vacature »

Software Developer

Dit ga je doen Je bent verantwoordelijk voor de warehouse applicatie die een integratie heeft met de PLC laag; Je ontwikkelt in C#/.Net; Je bent verantwoordelijk voor het ontwikkelen van interfaces en het visualiseren van componenten; Je denkt mee over het design voor business oplossingen; Je bent verantwoordelijk voor het testen van de gebouwde oplossing. Hier ga je werken Voor een internationale organisatie in de transport zijn wij momenteel op zoek naar een Software Developer. Ze zijn wereldwijd de grootste speler en lopen voorop met het automatiseren van alle processen van de warehouses. Op dit moment wordt er nog gebruik

Bekijk vacature »

C# .NET Developer

Functie omschrijving Wij zijn op zoek naar een C# .NET Developer voor een leuke opdrachtgever in de omgeving van Hilversum! Voor een leuk bedrijf in de omgeving van Hilversum zijn wij op zoek naar een Back-end developer die klaar is voor een nieuwe uitdaging. Ben jij iemand die graag aan verschillende projecten werkt en het ook leuk vindt om bij klanten op bezoek te gaan? Dan ben jij de perfecte kandidaat! Deze functie is erg divers, je moet dus goed kunnen schakelen. Je komt te werken in een klein team van developers. Binnen het bedrijf hangt er een gemoedelijke informele

Bekijk vacature »

PHP developer (Symfony, Doctrine)

Functie Als PHP developer wordt er een hoge mate van zelfstandigheid verwacht, maar ook dat je goed opereert in een team waar kennis wordt gedeeld en dingen als codereviews erg veel voorkomen. Kwaliteit staat voorop, mede hierom werken ze bijvoorbeeld zonder echte deadlines in hun sprints. De SaaS-applicatie wordt volledig ontwikkeld in PHP en Symfony. De module bestaat uit een stuk informatie verrijking en intelligentie wat resulteert in een medische check. De logica wordt daarom in de code geïntrigeerd. Je bent onder andere bezig met complexe databases waar meer dan 80.000 medicijnen op verschillende niveaus in staan, die maandelijks worden

Bekijk vacature »

C#.NET Developer

Dit ga je doen Ontwikkelen van de Back-end in .NET6 / C# en WebAPI (Focus);) Ontwikkelen van de Front-End in Nodje.js en Angular (secundair); Opstellen van een technisch ontwerp; Testen, documenteren en implementeren van de nieuwe applicatie; Verzorgen van de nazorg, na de implementatie; Het oplossen van bugs en incidenten. Hier ga je werken Als C#.NET Developer binnen deze organisatie kan jij het verschil maken. Zij werken momenteel nog met programmatuur die is ontwikkeld in C++. Hiervan gaan zij afscheid nemen zodra alle nieuwe software in C#.NET geschreven is. Een grootschalig en langdurig project. Voor hen is deze software van

Bekijk vacature »

Als PHP developer bijdragen aan beter onderwijs?

Functie Momenteel zijn ze op zoek naar een PHP developer die mee gaat werken aan de (door)ontwikkeling van de producten en zo helpt aan de uitvoering van hun ontwikkelprojecten. Je komt te werken binnen hun development team bestaande uit 6 ontwikkelaars. Ze staan zowel open voor meer junior als medior/senior developers. Je kunt snel veel verantwoordelijkheid krijgen en doorgroeien binnen het bedrijf. Bovendien ben je betrokken bij het bepalen van de product roadmap en de inbreng van (nieuwe) technologieën. De applicaties waaraan je werk worden gebruikt op onderwijsinstellingen door heel Nederland. De tech-stack bestaat voornamelijk uit Laravel (PHP), Vue.js en

Bekijk vacature »

Senior Node.js developer Digital Agency

Functie Door de groei van de organisatie zijn ze op zoek naar een Tech Lead. Als tech lead ben jij verantwoordelijk Als Back end Node.js developer kom je terecht in een van de 8 multidisciplinaire teams in het projectenhuis. Afhankelijk van jouw interesses, wensen en capaciteiten word je bij projecten en onderwerpen naar keuze betrokken. Als ervaren ontwikkelaar zul jij vaak leiding nemen in de projecten en in het team een aanvoerder zijn van technische discussies. Uiteindelijk wil jij natuurlijk de klantwensen zo goed mogelijk vertalen naar robuuste code. De projecten kunnen varieren van langlopende- tot kleinschalige trajecten. Voorheen werkte

Bekijk vacature »

Software Programmeur PHP

Functie Ben jij op zoek naar een nieuwe uitdaging als PHP developer en zoek je een leuke platte organisatie? Lees dan snel verder! Voor een opdrachtgever in omgeving Capelle aan den IJssel dat zich gespecialiseerd heeft in het realiseren van veilige netwerkverbindingen zijn wij op zoek naar een leuke software developer ter versterking van het huidige team. Hoe kan jouw dag er straks uitzien? Je gaat software en webapplicaties ontwikkelen met behulp van de talen PHP, JAVA en Node.js. Je gaat technische klussen uitvoeren op locatie bij klanten. Je onderhoudt contact met de projectleider om er zeker van te zijn

Bekijk vacature »

Fullstack Webdeveloper .NET Azure Big Data SaaS

Bedrijfsomschrijving Deze klant van ons is recentelijk onderdeel geworden van een grote moederorganisatie, ze zijn dé partij als het gaat om software maken voor ambitieuze ondernemers, ze maken maatwerk software. Vanuit het fantastisch vormgegeven hightech gebouw te Rotterdam centrum werken ze met zo'n 40 medewerkers aan hoogwaardige software gericht op financiële data, betaalinformatie, maar ook backoffice software. De software wordt webbased, desktop en mobile aangeboden en er worden zeer moderne ontwikkeltechnieken toegepast. Je moet dan denken aan patroonherkenning, Big Data, Machine Learning en OCR. Als Developer, ongeacht je niveau, ga je hier te maken krijgen met de allerleukste kant van

Bekijk vacature »

Java developer - procesoptimalisatie (Inhouse)

Functie Wat ga je doen als Java developer? Jij als back end developer hebt al enige ervaring opgedaan in jouw vakgebied. Voornamelijk het werken met Java en Spring spreekt jou aan. Jij wordt samen met je collega developers in het team verantwoordelijk voor de gehele back end van de applicatie. Hierdoor heb jij veel zelfstandigheid in je rol en zul je ook zelf beslissingen samen met de PO maken. Er wordt gewerkt volgens de SCRUM methodiek, om zo structuur te creëren in de werkzaamheden. Binnen de 2-wekelijkse sprints pak jij je taken op die samen met de PO afgestemd zijn.

Bekijk vacature »

Applicatieontwikkelaar ABAP

Bedrijfsomschrijving Functieomschrijving De kandidaat zal worden ingezet binnen een van de DevOps teams binnen SCI (Service Centrum Inburgering) voor het ontwerpen en bouwen in SAP ABAP van de binnen SCI gebruikte informatiesystemen. Voornaamste voorkomende werkzaamheden zijn het aanpassen van en bouwen van nieuwe programmatuur in ABAP (Objects), waarbij ook gebruikt wordt gemaakt van DDD (Domain Driven Design) en het opstellen/aanpassen van Functionele/Technische ontwerpen. Daarnaast moeten ook formulieren met SAP Smartforms worden aangepast. Verder speelt de overgang naar SAP4Hana en SAP CPI. Vanwege het veelvuldig gebruik van SAP PO is kennis hiervan een pré. Achtergrond opdracht Momenteel werken meerdere DevOps teams

Bekijk vacature »

IoT Software Developer PHP

Functie omschrijving Voor een klein softwarebedrijf in Breda, zijn wij op zoek naar een IoT software developer met kennis van PHP. In deze rol wordt je verantwoordelijk voor het vernieuwen van het multimedia platform van een super tof bedrijf in Breda. Je gebruikt PHP als programmeerlaag, en bent in staat om de helicopterview te pakken / projectmatig te werken. Jouw werkzaamheden zien er als volgt uit: Je gaat aan de slag met de ontwikkeling en vernieuwing van het "intern" ontwikkelde multimedia platform. Je neemt de lead in het moderniseren van het platform door het deels opnieuw op te zetten of

Bekijk vacature »

C# Developer

Dit ga je doen Je gaat aan de slag in het websites team of portals team waarin je je bezighoudt met concept & design, implementatie en ook een stukje bugfixing en onderhoud; Je werkt met je team volgens de Scrum werkwijze; Zo adviseer je ook de PO & Scrum Master over de technische architectuur, koppelingen en integratie met externe systemen en API’s; Je blijft op de hoogte van de laatste ontwikkelingen en trends op het gebied van C# / .NET en deelt deze kennis binnen de organisatie. Hier ga je werken Onze klant is een internationale organisatie gevestigd in de

Bekijk vacature »

Mendix Consultant / Developer

Dit ga je doen Het in kaart brengen en analyseren van de functionele wensen van de klant rondom Mendix applicaties; Het fungeren als sparringpartner voor de (interne) klanten; Het opstellen van requirements en het vertalen hiervan naar technische mogelijkheden; Het opstellen van user stories; Het bouwen van de Mendix applicaties in samenwerking met jouw team of zelfstandig; Het testen van op te leveren software en het zorg dragen voor de implementatie; Trainen van gebruikers in het gebruik van de applicatie; Werken in een Agile omgeving. Hier ga je werken De organisatie begeeft zich in de retail branche en focust zich

Bekijk vacature »

Teamlead PHP Developer

Functieomschrijving Voor een gewaardeerde werkgever in de buurt van Middelburg zijn wij op zoek naar een gemotiveerde teamlead PHP developer met affiniteit met Symfony/Laravel. Een enthousiast persoon die het ontwikkelteam komt versterken met het aanpakken van uitdagende projecten. Ben jij op zoek naar een uitdaging waar je de tijd en ruimte krijgt jezelf te ontwikkelen en je eigen IT-team aan te sturen? Lees dan snel verder! Die ga je doen: Bijdragen aan de implementatie van aanpassingen, verbeteringen en aanvullingen in de PHP based applicaties; Ontwikkeling en beheer van de serviceportal in Symfony en de webshops in de tweede versie van

Bekijk vacature »
Joakim Broden

Joakim Broden

08/02/2013 20:35:56
Quote Anchor link
Ik heb een pagination class geschreven en zou het graag met jullie willen delen en feedback van jullie willen ontvangen? Is dit praktisch/handig/goed enzo hoe ik het doe (moet alleen de link nog aanpassen, maar dat doe ik morgen want verwijst nu nog naar test.html).

Hoe gebruik je de 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
<?php
    echo new Pagination(array(
        'current'    => 1,     // De currente pagina (default = 1)
        'total'        => 25,     // Het aantal items (default = 0)
        'count'        => 5,    // Het aantal items per pagina (default = 5)
        'pages'        => 3,    // Het aantal pagina's in de pagination (default = 3)
    ));

    // Output
    // <ul class="pagination">
    //    <li class="prev"><span>&laquo; Vorige</span></li>
    //    <li class="active"><span>1</span></li>
    //    <li><a href="test.html" title="2">2</a></li>
    //    <li><a href="test.html" title="3">3</a></li>
    //    <li class="next"><a href="test.html" title="Volgende &raquo;">Volgende &raquo;</a></li>
    //</ul>

?>

De 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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
<?php
    namespace Library\Framework\Pagination;

    class Pagination {
        /**
         * @acces protected.
         * @var integer.
         */

        protected $template = array(
            'wrapper'        => '<ul class="pagination">{$pagination}</ul>',
            'prev'            => '<li class="prev"><a href="{$link}" title="&laquo; Vorige">&laquo; Vorige</a></li>',
            'prevDisabled'    => '<li class="prev"><span>&laquo; Vorige</span></li>',
            'next'            => '<li class="next"><a href="{$link}" title="Volgende &raquo;">Volgende &raquo;</a></li>',
            'nextDisabled'    => '<li class="next"><span>Volgende &raquo;</span></li>',
            'page'            => '<li><a href="{$link}" title="{$title}">{$title}</a></li>',
            'pageActive'    => '<li class="active"><span>{$title}</span></li>'
        );
        
        /**
         * @acces protected.
         * @var integer.
         */

        protected $current = 1;
        
        /**
         * @acces protected.
         * @var integer.
         */

        protected $total = 0;
        
        /**
         * @acces protected.
         * @var integer.
         */

        protected $count = 5;
        
        /**
         * @acces protected.
         * @var integer.
         */

        protected $pages = 3;
        
        /**
         * @acces public.
         * @param null|array $configuration.
         */

        public function __construct($configuration = null) {
            $this->setConfiguration($configuration);
        }

        
        /**
         * @acces public.
         * @param null|array $configuration.
         * @throws InvalidArgumentException.
         * @return self.
         */

        protected function setConfiguration($configuration) {
            if (!is_array($configuration)) {
                throw new Exception\InvalidArgumentException(sprintf('Failed to initialize %s, configuration is not an array; recieved "%s".', __CLASS__, gettype($configuration)));
            }
else {
                foreach ($configuration as $name => $config) {
                    switch (strtolower($name)) {
                        case
'template':
                            unset($configuration[$name]);
                            $this->setTemplate($config, $configuration);
                            break;
                        case
'current':
                            unset($configuration[$name]);
                            $this->setCurrent($config, $configuration);
                            break;
                        case
'total':
                            unset($configuration[$name]);
                            $this->setTotal($config, $configuration);
                            break;
                        case
'count':
                            unset($configuration[$name]);
                            $this->setCount($config, $configuration);
                            break;
                        case
'pages':
                            unset($configuration[$name]);
                            $this->setPages($config, $configuration);
                            break;
                    }
                }
            }
        }

        
        /**
         * @acces protected.
         * @param array $template.
         * @reutrn self.
         */

        public function setTemplate($template) {
            $this->template = array_merge($this->template, $template);
        }

        
        /**
         * @acces protected.
         * @param integer|string $current.
         * @return self.
         */

        public function setCurrent($current) {
            $this->current = $current;
            
            return $this;
        }

        
        /**
         * @acces protected.
         * @param integer|string $total.
         * @return self.
         */

        public function setTotal($total) {
            $this->total = $total;
            
            return $this;
        }

        
        /**
         * @acces protected.
         * @param integer|string $count.
         * @return self.
         */

        public function setCount($count) {
            $this->count = $count;
            
            return $this;
        }

        
        /**
         * @acces protected.
         * @param integer|string $pages.
         * @return self.
         */

        public function setPages($pages) {
            $this->pages = $pages;
            
            return $this;
        }

        
        /**
         * @acces protected.
         * @return array.
         */

        protected function calculatePages() {
            if (0 >= $this->current - (($this->pages - 1) / 2)) {
                $start = 0;
                $end = $this->pages;
            }
else if (ceil($this->total / $this->count) <= $this->current + (($this->pages - 1) / 2)) {
                $start = ceil($this->total / $this->count) - $this->pages;
                $end = ceil($this->total / $this->count);
            }
else {
                $start = $this->current - (($this->pages - 1) / 2);
                $end = $this->current + (($this->pages - 1) / 2);
            }

            
            if ($end > ceil($this->total / $this->count)) {
                $end = ceil($this->total / $this->count);
            }

            
            return array($start, $end);
        }

        
        /**
         * @acces protected.
         * @return string.
         */

        protected function generate() {
            list($start, $end) = $this->calculatePages();
            
            $pagination = array();

            $pagination[] = str_replace('{$link}', 'test.html', 0 === $start ? $this->template['prevDisabled'] : $this->template['prev']);

            for ($i = $start + 1; $i <= $end; $i++) {
                $pagination[] = str_replace(array('{$link}', '{$title}'), array('test.html', $i), $i == $this->current ? $this->template['pageActive'] : $this->template['page']);
            }


            $pagination[] = str_replace('{$link}', 'test.html', ceil($this->total / $this->count) === $end ? $this->template['nextDisabled'] : $this->template['next']);
            
            return str_replace('{$pagination}', implode(PHP_EOL, $pagination), $this->template['wrapper']);
        }

        
        /**
         * @acces public.
         * @return string.
         */

        public function __toString() {
            return $this->generate();
        }
    }

?>
 
PHP hulp

PHP hulp

28/11/2024 08:53:32
 
Frank WD

Frank WD

08/02/2013 21:13:12
Quote Anchor link
Hoe zou deze class het beste te gebruiken zijn dan?
 
Joakim Broden

Joakim Broden

08/02/2013 21:56:52
Quote Anchor link
Nou dat spreekt toch voor zich of ligt dat aan mij?
 
- Raoul -

- Raoul -

08/02/2013 22:44:42
Quote Anchor link
Op L59 zie ik 'Exception\InvalidArgumentException', als het goed is zit die exception al standaard bij PHP of SPL, dan hoef je enkel \InvalidArgumentException te gebruiken. (correct me if i'm wrong).
 
Joakim Broden

Joakim Broden

08/02/2013 22:54:09
Quote Anchor link
Ik maak voor elke class die ik schrijf een aparte exception class, en die zitten in de map 'Exception' in de directory van de class. En vanwege de autoloader/namespaces doe ik dus Exception\InvalidArgumentException.

Dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
+ Library
  + Pagination
    + Exception
      ExceptionInterface
      InvalidArgumentException.php
    Pagination.php
Gewijzigd op 08/02/2013 22:55:41 door Joakim Broden
 
- Raoul -

- Raoul -

08/02/2013 22:57:44
Quote Anchor link
Ja, maar wat ik probeer duidelijk maken is dat SPL of PHP die exception al standaard heeft ingebouwd waardoor je die exception niet opnieuw moet maken. Dus gewoon callen met \InvalidArgumentException.
 
Wouter J

Wouter J

08/02/2013 23:13:58
Quote Anchor link
Raoul, dit wordt juist wel vaak gedaan. Wat je vaak ziet is dat mensen de exceptions gaan vervangen door specifiekere exceptions, of gewoon de exceptions overplaatsen. Dit wordt gezien als een best practise. In Symfony2 is er zelfs een bundle, JmsCommandsBundle, welke dit automatisch voor je doet.
 
- Raoul -

- Raoul -

08/02/2013 23:28:33
Quote Anchor link
Ah, dat wist ik nog niet. Maar waarom zou zo'n aparte class betere practice zijn terwijl PHP dit al ingebouwd heeft?
 
Write Down

Write Down

09/02/2013 00:48:27
Quote Anchor link
Aangezien je dan specifiek weet in welk deel van je applicatie een bepaalde exception optreedt.
 
Wouter J

Wouter J

10/02/2013 22:27:29
Quote Anchor link
Dan nog even op het script:

- Doe geen configuratie settings doormiddel van arrays. Gebruik hiervoor setters/getters en eventueel maak je in de constructor gebruik van parameters die deze instellen.
- Kijken of een parameter een array is zou ik eerder doen met setConfiguration(array $configuration) dan met zo'n if die jij nu hebt
- Je herhaalt telkens dezelfde code voor elke case in setConfiguration. Je kunt deze dus beter uit de cases halen, om code duplication te voorkomen.
- Je klasse heeft nu veel te veel verantwoordelijkheden. Schrijf ze eens allemaal op een papiertje, knip vervolgens dat papiertje in stukken zodat op elk stuk 1 verantwoordelijkheid staat en zie nu elk stuk papier als 1 klasse. Ga dan verder uitdenken hoe je die klasse het beste kunt indelen.
- Behalve werken met magics zou ik ook altijd een method beschikbaar maken.
- Even een grote contradictie de wereld uithelpen: Library\Framework Een library is een set met functies en een framework is meerdere libraries gekoppeld waardoor je al een enorme basis voor elke website hebt.
Ik raad je aan je te houden aan de PSR-0 standaard en dus <vendor>\<project>\<component...>\<class> te gebruiken.
 



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.