Pagination class review?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

C# Ontwikkelaar

In het kort Als C# .NET Core ontwikkelaar ga je binnen onze business unit Transport en Logistiek aan de slag complexe maatwerk software voor bedrijf kritische systemen binnen de technische automatisering. Denk bijvoorbeeld een IoT-oplossing voor de logistieke sector waarbij we van ruim 200.000 machines de telemetrie en events verwerken. We zijn actief in de distributielogistiek, havenlogistiek en productielogistiek. Naast C# en .NET Core maken we ook gebruik van Azure technologie. En als trotse Microsoft Gold Partner leren we graag van en met jou. Wil jij jezelf blijven ontwikkelen binnen de technische automatisering met .NET, dan gaan we deze uitdaging

Bekijk vacature »

Software Developer

Functie omschrijving Heb jij affiniteit met ICT en een WO diploma in de pocket? Dan ben je hier aan het juiste adres. Voor een opdrachtgever in Amsterdam zijn wij op zoek naar kandidaten die (enige) ervaring hebben met Java, Javascript, C of C++. Je zal door middel van trainingen worden opgeleid tot een volwaardige Software Developer. Er wordt tijdens de training natuurlijk veel aandacht besteedt aan de vaktechnische aspecten, maar er gaat ook veel aandacht uit naar jouw persoonlijke ontwikkeling. Bedrijfsprofiel Bij deze opdrachtgever in de omgeving van Amsterdam zoeken ze meerdere enthousiaste kandidaten die hun carrière willen starten met

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 »

PHP Software Developer

Functie omschrijving PHP Software Developer gezocht! Voor een organisatie in de regio Zeist die zich bezighoud met het verbeteren van de medicatieveiligheid zoeken wij een Software Developer. In deze functie zijn wij op zoek naar een slimme en enthousiaste Developer die interesse heeft in farmacie, logistiek en ICT. Daarnaast beschik je over een goed analytisch vermogen en ben je van nature gestructureerd en resultaatgericht. Je moet in deze functie daadkrachtig, flexibel en communicatief goed zijn. Je verantwoordelijkheden bestaan uit: Object georiënteerd programmeren; Werken in een scrumteam aan de ontwikkeling van een medicatiebewakingssysteem; Meedenken over de mogelijkheden en onmogelijkheden van projecten;

Bekijk vacature »

.NET Developer

Functie omschrijving Net afgestudeerd en op zoek naar een leuke baan als developer? Zoek niet verder! Ik heb een functie beschikbaar als back-end developer, bij een leuk familiebedrijf. Je gaat werken met de Microsoft stack en de technieken C# en .NET. Verder maak je gebruik van MVC en Entity framework. SQL kent ook geen geheimen voor jou. Jouw verantwoordelijkheden: Nieuwe maatwerk software bouwen; API koppelingen bouwen; Applicaties en software optimaliseren; Back-end programmeren. Een erg uitdagende functie, met veel vrijheid. Je kan meerdere dagen thuis werken en als je op kantoor werkt wordt de lunch verzorgd. Heb je interesse, reageer dan

Bekijk vacature »

C# Ontwikkelaar

Functieomschrijving Voor een software ontwikkelaar in de omgeving van Vught zijn we op zoek naar een gemotiveerde C# ontwikkelaar. Deel jij hun passie voor development en dan vooral in C#.NET? Dan kan dit wel eens jouw droombaan zijn! Jouw werkzaamheden zullen er ongeveer als volgt uit gaan zien Door de wensen van de klant goed te begrijpen ga jij aan de slag dit om te zetten naar passende oplossingen en werk je deze uit tot een sterk eindproduct. Je gaat je bezighouden met de ontwikkeling van webapplicaties en websites, dit doe je door middel van ASP.NET, MVC Frameworks en C#.

Bekijk vacature »

Front-end Developer Magento 2/Wordpress

Voor het aantrekkelijk houden en steeds vernieuwen van de huidige websites en webshops en het meedenken in de marketing zijn wij per direct op zoek naar een ervaren Front-end developer met gedegen kennis van Magento 2 (webshops) en Wordpress (websites). Wat bieden wij jou Mooi salaris! Meteen op contract bij de opdrachtgever! Gezellig, Kempisch bedrijf! 35 uur per week! Auto van de zaak! Wie ben jij Van een front-end developer verwachten wij: Een afgeronde Bachelor ICT opleiding met profiel ICT & Media Design. Dat je in het bezit bent van een Magento 2 professional front-end developer certificaat; Je hebt ruime

Bekijk vacature »

Senior Front-end Developer

Dit ga je doen Met behulp van diverse programmeertalen ontwikkelen van Front-end software; Het begeleiden van het front-end team; Het oplossen van incidenten; Het bijhouden van een backlog; Je hebt een actieve bijdrage in de wekelijkse overleggen met de omliggende teams; Je houdt trends bij en adviseert het management hierover waar nodig; Helder communiceren met de stakeholders om hen zo mee te nemen in projecten en laten inzien wat de duur en toegevoegde waarde van bepaalde projecten is. Hier ga je werken Deze organisatie heeft circa 40 miljoen bezoekers per maand en heeft innovatie hoog in het vaandel staan. Het

Bekijk vacature »

.Net ontwikkelaar - Het schoolsysteem verbeteren!

Bedrijfsomschrijving Onze klant is een prettige en kleinschalige organisatie waar hard gewerkt wordt om het onderwijs te verbeteren. Daarom werken ze aan complexe om administratieve, financiële en facilitaire processen te versnellen en te verbeteren. Dit doen ze vanuit een platte organisatie voor klanten die door geheel Nederland verspreid zitten, hier horen vanzelfsprekend een aantal aansprekende HBO scholen en universiteiten toe. Functieomschrijving Je komt terecht in een organisatie waar op dit moment 2 scrumteams werken. Jij zal als .Net developer binnen 1 van deze scrumteams functioneren, iedereen binnen dit team heeft zijn/haar eigen expertise waardoor er met verschillende invalshoeken aan een

Bekijk vacature »

Traineeship Full Stack .NET Developer

Dit ga je doen Start op 7 augustus 2023 bij de Experis Academy en ontwikkel jezelf tot een gewilde Full Stack .NET Developer. Maar hoe ziet het traineeship eruit en wat kun je verwachten? Periode 1 De eerste 3 maanden volg je fulltime, vanuit huis, een op maat gemaakte training in teamverband. Je leert belangrijke theorie en krijgt kennis van de benodigde vaardigheden en competenties die nodig zijn om de IT-arbeidsmarkt te betreden. Zowel zelfstandig als in teamverband voer je praktijkopdrachten op het gebied van front- en backend development uit. Wat er per week op het programma staat kun je

Bekijk vacature »

Medior/senior Front-end developer

Functie Je maakt deel uit van een DevOps Scrum team en werkt samen met back-end developers, test-engineers, interaction designers en een projectmanager. Er zijn verschillende groepen Scrum teams. Een roadmap team is jouw ‘’thuisbasis’’, daar wordt gewerkt aan doorontwikkeling van bestaande omgevingen voor een aantal klanten. Hiernaast zijn er projectteams waar nieuwe omgevingen worden gebouwd, of grote complexe wijzigingen worden doorgevoerd op bestaande omgevingen. Je kunt (afhankelijk van jouw wensen en doelen) dus afwisselend werken in beide teams. Hiernaast participeer je in het Chapter Front-end development waar gezamenlijk kennis en ervaring wordt gedeeld. Als Front-end developer is het jouw doel

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 »

SQL Developer

Functie omschrijving Altijd al willen werken bij een snelgroeiend bedrijf, actief in de logistieke sector? Dit is je kans! Ik ben op zoek naar een ervaren SQL Developer in de omgeving Tilburg. Dit bedrijf is gespecialiseerd in in de ontwikkeling van software en maatwerk oplossingen voor het automatiseren van logistieke processen. Klanten zijn o.a. BOL en andere grote distributiecentrums. Jouw taken worden vooral: Verantwoordelijk voor ontwikkelen van stored procedures, voor snelle afhandeling van data; Optimalisatie van de SQL query's en T-SQL query's; Jij gaat je bezig houden met ontwerpen, ontwikkelen en optimaliseren van de MS SQL Databases; In deze functie

Bekijk vacature »

Typescript Developer / Cloud platform

Dit ga je doen (Door)Ontwikkelen van het cloud platform; (Door)Ontwikkelen van microservices; Bouwen van nieuwe functionaliteiten; Verbeteringen aandragen voor het cloud platform; Sparren met de business. Hier ga je werken Onze opdrachtgever, gevestigd in regio Eindhoven, levert een compleet dienstenpakket op het gebied van IT. Zij pakken verschillende (complexe) vraagstukken van grote organisaties op. De sfeer intern is gezellig en informeel. Men houdt van hard werken maar gezelligheid door middel van een borrel of gezamenlijke lunch komt er veel voor. Als Typescript ontwikkelaar word je onderdeel van het team gericht op de (door)ontwikkeling van hun eigen cloud platform welke wordt

Bekijk vacature »

Junior .NET developer

Functie Als junior .NET developer begint jouw dag na een bak koffie met een stand up. De vorderingen worden tijdens de stand up besproken en de doelen worden opgesteld waar jullie als team in de volgende sprint naartoe gaan werken. Onze backend is geschreven in .NET Core en onze Front-end in Angular. Bij ons ga jij dan ook Fullstack aan de slag. Jij wordt hier opgeleid om zelfstandig te kunnen programmeren en applicaties te kunnen implementeren. Er wordt op projectbasis gewerkt, dit bied leuke uitdagingen omdat elke klant een andere visie heeft over de applicatie die wij maken. Je gaat

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

09/01/2025 20:27:28
 
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.