Dynamische paginatitels met output buffering

Door Erik-Jan op 11 juni 2007

Trefwoorden: .

Als ik een site programmeer, maak ik bijna altijd gebruik van een header.php en een footer.php. De eerste bevat o.a. de van een site en de onderste bevat vaak de onderste regels HTML code. In het middelste deel wordt bepaald welke content daar geplaatst moet worden. Dit betekent dat ik vaak wijzigingen wil doorvoeren in de content header.php, nadat header.php al geparsed is. Een typisch voorbeeld is de </code> van de pagina. Dit kun je oplossen door de output buffering functies van PHP.</p> <h2>Output buffering</h2> <p>In het kort komt het idee er op neer dat je de hele HTML bron die geprint zal gaan worden eerst in een variabele stopt. Vervolgens vervang je de content die je wilt vervangen en pas dan print je de HTML.</p> <p><!--break--></p> <h3>header.php</h3> <p>Helemaal bovenaan in header.php geven we d.m.v. <?php ob_start(); ?> aan dat de output buffering gestart moet worden. Er mag helemaal niks voor deze functie staan, ook geen spatie of een witregel.</p> <p>Vervolgens plaatsen we een variabele voor de paginatitel:</p> <p><code></code></p> <h3>Middenstuk</h3> <p>Als we in het middenstuk van onze pagina bepalen welke pagina geladen moet worden, kunnen we ook bepalen welke titel we moeten gebruiken. Deze stoppen we in de variabele <code>$paginaTitel</code>.</p> <h3>footer.php</h3> <p>In footer.php lezen we via de functie <code>ob_get_contents()</code> de waarde van de output buffer uit. Vervolgens vervangen we variabele van de pagina-titel en via <code>ob_end_clean()</code> legen we de output buffer. De laatste stap is dat we de variabele met de gewijzigde titel printen naar het scherm. In code komt dat hierop neer:</p> <p><?php<br /> $data = ob_get_contents();</p> <p>$data = str_replace("%paginaTitel%", $paginaTitel, $data);</p> <p>ob_end_clean();</p> <p>echo $data;<br /> ?></p><script src="http://connect.facebook.net/nl_NL/all.js#xfbml=1"></script><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script><script type="text/javascript" src="https://apis.google.com/js/plusone.js">{lang: "nl"}</script><style type="text/css">#tb_scoical_buttons { clear: both; list-style: none; } #tb_scoical_buttons li { margin: 0 15px 1em 0; list-style: none; float: left; background: none; padding: 0; }</style><ul id="tb_scoical_buttons"><li><div id="fb-root"></div><fb:like href="http://netters.nl/paginatitels-output-buffering/" send="true" layout="button_count" width="160" show_faces="false" font=""></fb:like></li><li><a href="http://twitter.com/share" onclick="javascript:_gaq.push(['_trackEvent','outbound-article','http://twitter.com']);" data-url="http://netters.nl/paginatitels-output-buffering/" data-text="Dynamische paginatitels met output buffering" data-count="horizontal" data-via="nettersnl" class="twitter-share-button">Tweet</a></li><li><g:plusone size="medium"></g:plusone></li></ul><br style="clear: both;" /></div> <div class="comments"> <small> Je kunt <a href="#respond">een reactie</a>, achterlaten of een <a href="http://netters.nl/paginatitels-output-buffering/trackback/" rel="trackback">trackback</a> van uw eigen site. <br /> </small> <!-- You can start editing here. --> <h3 id="comments">Een Reactie op “Dynamische paginatitels met output buffering”</h3> <div class="navigation"> <div class="alignleft"></div> <div class="alignright"></div> </div> <ol class="commentlist"> <li class="comment byuser comment-author-mathieuk even thread-even depth-1" id="li-comment-1387"> <div id="comment-1387"> <div class="comment-author"> <img alt='' src='http://1.gravatar.com/avatar/dedc817e24ac99cd21cd83d5d8a3df96?s=96&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&r=G' class='avatar avatar-96 photo' height='96' width='96' /> <span class="comment-meta commentmetadata"><a href="http://netters.nl/paginatitels-output-buffering/#comment-1387"> 11 juni 2007 om 17:21</a> </span> </div> <div class="comment-text"> <span class="comment-author-name"><a href="http://www.scriptorama.nl/" onclick="javascript:_gaq.push(['_trackEvent','outbound-commentauthor','http://www.scriptorama.nl']);" rel='external nofollow' class='url'>mathieuk</a></span> <p>Ik heb een iets andere werkwijze die er voor zorgt dat je geen output-buffering hoeft te gebruiken:</p> <p>inhoud.php:<br /> < ?php</p> <p>$dingen = $databaseGateway->haalDingen();</p> <p>$template = array (<br /> ‘content-file’ => ‘inhoud.tpl.php’,<br /> ‘dingen’ => $dingen,<br /> ‘pagina-titel’ => ‘Dit is de pagina titel voor inhoud.tpl.php’<br /> );</p> <p>require TEMPLATES_PATH . ‘shell.tpl.php’;</p> <p>?></p> <p>In Shell.tpl.php staat de html-omlijsting (html,head,body) waar je $template['pagina-titel'] in kunt tonen en in de body wordt de file die door $template['content-file'] wordt beschreven ook geinclude. Die file kan dan gewoon $template['dingen'] gebruiken.</p> <p>Scheelt geheugen en code.</p> <a class='comment-reply-link' href='/paginatitels-output-buffering/?replytocom=1387#respond' onclick='return addComment.moveForm("comment-1387", "1387", "respond", "377")'>Reageer</a> </div> </div> </li> </li> </ol> <div class="navigation"> <div class="alignleft"></div> <div class="alignright"></div> </div> <div id="respond"> <h3>Reageer!</h3> <div class="cancel-comment-reply"> <small><a rel="nofollow" id="cancel-comment-reply-link" href="/paginatitels-output-buffering/#respond" style="display:none;">Klik hier om je antwoord te annuleren.</a></small> </div> <form action="http://netters.nl/wp-comments-post.php" method="post" id="commentform"> <p><input type="text" name="author" id="author" value="" size="22" tabindex="1" aria-required='true' /> <label for="author"><small>Naam (verplicht)</small></label></p> <p><input type="text" name="email" id="email" value="" size="22" tabindex="2" aria-required='true' /> <label for="email"><small>E-mail (verplicht)</small></label></p> <p><input type="text" name="url" id="url" value="" size="22" tabindex="3" /> <label for="url"><small>Website</small></label></p> <!--<p><small><strong>XHTML:</strong> You can use these tags: <code><a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> </code></small></p>--> <p><textarea name="comment" id="comment" cols="77%" rows="10" tabindex="4"></textarea></p> <p><input name="submit" type="submit" id="submit" tabindex="5" value="Plaats Reactie" /> <input type='hidden' name='comment_post_ID' value='377' id='comment_post_ID' /> <input type='hidden' name='comment_parent' id='comment_parent' value='0' /> </p> <p style="display: none;"><input type="hidden" id="akismet_comment_nonce" name="akismet_comment_nonce" value="1e400872c4" /></p> <p style="clear: both;" class="subscribe-to-comments"> <input type="checkbox" name="subscribe" id="subscribe" value="subscribe" style="width: auto;" /> <label for="subscribe">Hou me per email op de hoogte van nieuwe reacties.</label> </p> </form> </div> </div> </div> <div id="sidebar-single"> <div id="ad"> <br /> <a href="http://netters.nl/seo-tekstschrijver-rob-demmers/"><img src="http://netters.nl/wp-content/uploads/tekstschrijver-rand.gif" alt="" class="noborder" /></a> </div> <div> <div id="sidebar-container"> <div id="sidebar-right"> <h2>Zoeken</h2> <form method="get" id="searchform" action="http://netters.nl/"> <label class="hidden" for="s"></label> <div><input type="text" value="" name="s" id="s" /> </div> </form> <li id="social-media" class="widget social_media"> <h2 class="widgettitle">Volg ons ook op:</h2> <div id="subscribe_options"> <ul class="subscribe_icons"> <li class="subscribe_twitter" id="hovercard"><a target="_blank" title="@nettersnl" rel="nofollow" href="http://twitter.com/nettersnl">Twitter</a></li> <li class="subscribe_facebook"><a target="_blank" rel="nofollow" href="http://www.facebook.com/pages/Netters/112779698742497">Facebook</a></li> <li class="subscribe_rss"><a target="_blank" rel="nofollow" href="http://netters.nl/feed/">RSS</a></li> <li class="subscribe_email"><a target="_blank" rel="shadowbox" href="http://eepurl.com/s4x1">Email</a></li> </ul> </div> </li> <li id="text-216341793" class="widget widget_text"><h2 class="widgettitle">Schrijf je in voor de nieuwsbrief:</h2> <div class="textwidget"><!-- Begin MailChimp Signup Form --> <div id="mc_embed_signup"> <form action="http://netters.us1.list-manage.com/subscribe/post?u=992baafc7db5b498798f686b2&id=1b7eec44cd" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank"> <fieldset class="noborder"> <div class="mc-field-group"> <input type="text" value="Vul je naam in" name="LNAME" class="" id="mce-LNAME"> </div> <div class="mc-field-group"> <input type="text" value="Vul je email adres in.." name="EMAIL" class="required email" id="mce-EMAIL"> </div> <div id="mce-responses"> <div class="response" id="mce-error-response" style="display:none"></div> <div class="response" id="mce-success-response" style="display:none"></div> </div> <div><input type="submit" value="Inschrijven" name="subscribe" id="mc-embedded-subscribe" class="btn"></div> </fieldset> </form> </div> <!--End mc_embed_signup--></div> </li> <li id="get-recent-comments" class="widget widget_get_recent_comments"><h2 class="widgettitle">Laatste reacties</h2> <div id="get_recent_comments_wrap"><ul> <li><a href="http://netters.nl/seo-teksten-schrijven-lees-de-tips/#comment-9188" title="SEO-teksten schrijven: lees de tips!, 12 augustus 2011">Steffen op 19 april 2012 om 15:03:</a><br>Ik heb dit artikel al een tijd gebookmarked en zodra ik een tekst schrijf kijk ik...</li> <li><a href="http://netters.nl/seo-teksten-schrijven-lees-de-tips/#comment-9187" title="SEO-teksten schrijven: lees de tips!, 12 augustus 2011">Extra geld verdienen op 16 april 2012 om 11:03:</a><br>Wow, Goed artikel! Deze tips zijn zeer bruikbaar en ga deze direct...</li> <li><a href="http://netters.nl/seo-teksten-schrijven-lees-de-tips/#comment-9158" title="SEO-teksten schrijven: lees de tips!, 12 augustus 2011">Renée op 4 april 2012 om 12:22:</a><br>Ik vraag me af: staat SEO-tekstschrijven mooi en creatief tekstschrijven ‘in de...</li> <li><a href="http://netters.nl/seo-teksten-schrijven-lees-de-tips/#comment-9157" title="SEO-teksten schrijven: lees de tips!, 12 augustus 2011">Led lampen op 2 april 2012 om 19:18:</a><br>Zeer goed artikel, ga direct de tips toepassen.</li> <li><a href="http://netters.nl/welke-url-verdient-de-voorkeur/#comment-9156" title="Welke URL verdient de voorkeur?, 11 januari 2010">Tuinhuisjes op 29 maart 2012 om 13:55:</a><br>Om het allemaal eenvoudiger te maken kun je gebruik maken van deze handige...</li> </ul></div></li> <li id="recent-posts-3" class="widget widget_recent_entries"> <h2 class="widgettitle">Laatste berichten</h2> <ul> <li><a href="http://netters.nl/seo-teksten-schrijven-lees-de-tips/" title="SEO-teksten schrijven: lees de tips!">SEO-teksten schrijven: lees de tips!</a></li> <li><a href="http://netters.nl/landingspagina-optimaliseren-tekst/" title="Landingspagina optimaliseren? Kijk eerst naar de tekst!">Landingspagina optimaliseren? Kijk eerst naar de tekst!</a></li> <li><a href="http://netters.nl/seo-tekstschrijver/" title="SEO tekstschrijver: teksten die echt scoren!">SEO tekstschrijver: teksten die echt scoren!</a></li> <li><a href="http://netters.nl/social-media-informatie-verrijken/" title="Social media als middel om bestaande informatie te verrijken">Social media als middel om bestaande informatie te verrijken</a></li> <li><a href="http://netters.nl/10-redenen-waarom-webshops-niet-succesvol-zijn/" title="10 redenen waarom webshops niet succesvol zijn">10 redenen waarom webshops niet succesvol zijn</a></li> </ul> </li> <li id="polls-widget-3" class="widget widget_polls-widget"><h2 class="widgettitle">Poll</h2> <div id="polls-1" class="wp-polls"> <form id="polls_form_1" class="wp-polls-form" action="/paginatitels-output-buffering/" method="post"> <p style="display: none;"><input type="hidden" id="poll_1_nonce" name="wp-polls-nonce" value="60dc0bdb0a" /></p> <p style="display: none;"><input type="hidden" name="poll_id" value="1" /></p> <p style="text-align: center;"><strong>Wat vindt jij van de nieuwe Netters?</strong></p><div id="polls-1-ans" class="wp-polls-ans"><ul class="wp-polls-ul"> <li><input type="radio" id="poll-answer-1" name="poll_1" value="1" /> <label for="poll-answer-1">Stuk beter, mijn complimenten</label></li> <li><input type="radio" id="poll-answer-2" name="poll_1" value="2" /> <label for="poll-answer-2">Gaat wel</label></li> <li><input type="radio" id="poll-answer-3" name="poll_1" value="3" /> <label for="poll-answer-3">Ik vond de oude lay-out mooier</label></li> <li><input type="radio" id="poll-answer-4" name="poll_1" value="4" /> <label for="poll-answer-4">Geen voorkeur</label></li> </ul><p style="text-align: center;"><input type="button" name="vote" value=" Stem " class="Buttons" onclick="poll_vote(1);" /></p><p style="text-align: center;"><a href="#ViewPollResults" onclick="poll_result(1); return false;" title="View Results Of This Poll">Bekijk resultaten</a></p></div> </form> </div> <div id="polls-1-loading" class="wp-polls-loading"><img src="http://netters.nl/wp-content/plugins/wp-polls/images/loading.gif" width="16" height="16" alt="Loading ..." title="Loading ..." class="wp-polls-image" /> Loading ...</div> </li> <!-- Wordpress Popular Posts Plugin v2.2.1 [W] [all] [regular] --> <li id="wpp-3" class="widget popular-posts"> <h2 class="widgettitle">Populaire Berichten</h2> <ul> <li><a href="http://netters.nl/artikelen/php-en-mysql/php-voor-beginners-deel-1-van-3/" title="PHP voor beginners: Deel 1 van 3"><span class="wpp-post-title">PHP voor beginners: Deel 1 van 3</span></a> </li> <li><a href="http://netters.nl/enkele-statistische-termen-uitgelegd/" title="Enkele statistische termen uitgelegd"><span class="wpp-post-title">Enkele statistische termen uitgelegd</span></a> </li> <li><a href="http://netters.nl/artikelen/zoekmachine-optimalisatie/SEO-301-redirect-zoekmachine-optimalisatie/" title="SEO 301 Redirect voor Zoekmachines in .htaccess, PHP, IIS, ASP, Coldfusion, etc."><span class="wpp-post-title">SEO 301 Redirect voor Zoekmachines in .htaccess, PHP, IIS, ASP, Coldfusion, etc.</span></a> </li> <li><a href="http://netters.nl/internet-explorer-8-download/" title="Internet Explorer 8 te downloaden"><span class="wpp-post-title">Internet Explorer 8 te downloaden</span></a> </li> <li><a href="http://netters.nl/artikelen/client-side/lightbox-foto-popup/" title="Lightbox foto popup"><span class="wpp-post-title">Lightbox foto popup</span></a> </li> </ul> </li> <!-- End Wordpress Popular Posts Plugin v2.2.1 --> <li id="netters-pagina" class="widget paginas"> <h2>Artikelen</h2><ul> <li><a href="http://netters.nl/artikelen/ajax/" rel="bookmark" title="Permanent Link to AJAX">AJAX</a></li> <li><a href="http://netters.nl/artikelen/statistieken/" rel="bookmark" title="Permanent Link to Web analytics">Web analytics</a></li> <li><a href="http://netters.nl/artikelen/adsense/" rel="bookmark" title="Permanent Link to Adsense">Adsense</a></li> <li><a href="http://netters.nl/artikelen/internetrecht/" rel="bookmark" title="Permanent Link to Internetrecht">Internetrecht</a></li> <li><a href="http://netters.nl/artikelen/server-en-hosting/" rel="bookmark" title="Permanent Link to Server en hosting">Server en hosting</a></li> </ul></li> <li id="text-216341794" class="widget widget_text"><h2 class="widgettitle">Laatste Tweets</h2> <div class="textwidget"><script src="http://widgets.twimg.com/j/2/widget.js"></script> <script> new TWTR.Widget({ version: 2, type: 'profile', rpp: 5, interval: 5000, width: 'auto', height: 300, theme: { shell: { background: '#ffffff', color: '#333333' }, tweets: { background: '#ffffff', color: '#333333', links: '#0281CA' } }, features: { scrollbar: false, loop: false, live: true, hashtags: true, timestamp: true, avatars: false, behavior: 'all' } }).render().setUser('nettersnl').start(); </script></div> </li> </div> <div id="sidebarsmall"> </div> </div></div> </div> </div> <div id="footer"> <div class="pagination"> </div> <br /> <div id="footer-widgets"> <li id="linkcat-2" class="widget widget_links"><h2 class="widgettitle">Andere interessante blogs</h2> <ul class='xoxo blogroll'> <li><a href="http://andrescholten.nl" target="" onclick="javascript:_gaq.push(['_trackEvent','outbound-blogroll','http://andrescholten.nl']);">Andre Scholten</a></li> <li><a href="http://www.uprise.nl" target="" onclick="javascript:_gaq.push(['_trackEvent','outbound-blogroll','http://www.uprise.nl']);">Arjan Snaterse</a></li> <li><a href="http://www.chapter42.com/" target="_blank" onclick="javascript:_gaq.push(['_trackEvent','outbound-blogroll','http://www.chapter42.com/']);">Chapter42</a></li> <li><a href="http://www.edwords.nl/" target="" onclick="javascript:_gaq.push(['_trackEvent','outbound-blogroll','http://www.edwords.nl/']);">Eduard Blacquière</a></li> <li><a href="http://www.martijnbeijk.com/" target="" onclick="javascript:_gaq.push(['_trackEvent','outbound-blogroll','http://www.martijnbeijk.com/']);">Martijn Beijk</a></li> <li><a href="http://www.monlog.nl" target="" onclick="javascript:_gaq.push(['_trackEvent','outbound-blogroll','http://www.monlog.nl']);">Monlog</a></li> <li><a href="http://www.stateofsearch.com" target="" onclick="javascript:_gaq.push(['_trackEvent','outbound-blogroll','http://www.stateofsearch.com']);">State of Search</a></li> <li><a href="http://www.webanalisten.nl" target="" onclick="javascript:_gaq.push(['_trackEvent','outbound-blogroll','http://www.webanalisten.nl']);">Webanalisten</a></li> <li><a href="http://yoast.com" target="" onclick="javascript:_gaq.push(['_trackEvent','outbound-blogroll','http://yoast.com']);">Yoast</a></li> </ul> </li> </div> <br /> <div id="credits"> Copyright 2006 - 2012 - Netters.nl | <a href="http://netters.nl/contact">Contact</a> | <a href="http://netters.nl/sitemap">Sitemap</a> </div> </div> <div id="clear"></div> </div> <div id="clear"></div> </div> <script type='text/javascript'> /* <![CDATA[ */ var pollsL10n = {"ajax_url":"http:\/\/netters.nl\/wp-admin\/admin-ajax.php","text_wait":"Your last request is still being processed. Please wait a while ...","text_valid":"Please choose a valid poll answer.","text_multiple":"Maximum number of choices allowed: ","show_loading":"1","show_fading":"1"}; /* ]]> */ </script> <script type='text/javascript' src='http://netters.nl/wp-content/plugins/wp-polls/polls-js.js?ver=2.63'></script> </body> </html>