PHP-code in Drupal
04-05-2010
Wat doe je als je in Drupal eigen PHP-code wil toevoegen?
Of hoe pas je een module aan, in welke file moet je dan zijn om je PHP-code toe te voegen?
Het kan!
Normaal gezien lijkt het logisch dat je dit rechtstreeks kan in ruimte waarin je je tekst of inhoud kan bewerken. Je zal daar echter merken, dat als je in een node van een pagina of blog PHP-code schrijft, Drupal dat zeer letterlijk zal nemen. Er zal namelijk geen interpretatie gebeuren van je code maar de code wordt gewoon getoond als tekst.
Dat komt doordat je bij de Input - formats maar 2 mogelijkheden hebt staan: Full HTML en Filtered HTML
Het is dus logisch dat de code als gewone HTML-entiteiten wordt vertaald en dat bvb groter- en kleiner-dan-tekens worden weergeven als tekst.
Dit kan je zeer eenvoudig oplossen door de activatie van de PHP-filter.
De PHP-filter optie in Drupal
De handleiding van Drupal zegt het volgende:
The PHP filter core module adds the ability to include PHP code in posts. PHP is a general-purpose scripting language widely-used for web development; the content management system used by this website has been developed using PHP.
Through the PHP filter, users with the proper permission may include custom PHP code within a page of the site. While this is a powerful and flexible feature if used by a trusted user with PHP experience, it is a significant and dangerous security risk in the hands of a malicious user. Even a trusted user may accidentally compromise the site by entering malformed or incorrect PHP code. Only the most trusted users should be granted permission to use the PHP filter, and all PHP code added through the PHP filter should be carefully examined before use.
meer lezen: http://drupal.org/handbook/modules/php
Hoe ga je te werk?
Eerst en vooral gaan we de optie activeren via : Administer > Site building > Modules > Core optional

als je dat correct hebt gedaan en je installatie werkt zoals het hoort dan zal je nu een extra input-format terugvinden als je content gaat beheren;
Vul je nu PHP-code in, dan weet Drupal, als je de input format op PHP-code zet, dat hij de tekst moet interpreteren en uitvoeren als code.
Hoe doet hij dat?
Via de eval-functie die in PHP is ingebakken. Deze functie laat toe dat je code als tekst kan meegeven en die wordt dan uitgevoerd als was het gewone inline code.
Er wordt vaak, terecht, beweerd dat de eval-functie een te mijden iets is; beveiliging is een issue als je dit soort functies gebruikt. Drupal heeft echter de nodige controles aan boord zodat we in dit geval het zonder probleem kunnen toepassen.
Probeer het zelf maar eens; je zal zien dat je zelfs makkelijk met databanken kan connecteren, allerlei straffe functies uitvoeren, kortom: je hebt een full editor voor je PHP-code.
Het nadeel als je op deze manier te werk gaat, is dat je steeds een volledige pagina in PHP moet schrijven. Als je bijvoorbeeld andere HTML-tags in je tekst-veld opneemt, dan gaat Drupal dat zien als PHP-code en bijgevolg rare filters toevoegen.
Ook dat kan je vermijden; met de PHP evaluator.
De PHP evaluator activeren
De PHP evaluator is afgestemd om je tekst die je hebt ingegeven, te screenen op PHP-code. Hij gaat opzoek naar de combinatie <?php en ?> en past hierop ook de eval-functie uit
Hiermee kan je dus zonder probleem combineren.
Het activeren van deze filter is iets moeilijker. Allereerst moet je de PHP filter activeren zoals hierboven beschreven.
Daarna ga je naar Administer > Site configuration > Input formats > configure
Hier heb je dan de mogelijkheid om per formaat (via configure) in te stellen dat Drupal de code screent met behulp van de PHP evaluator. Hierdoor zal hij de ge-embedde code uitvoeren zoals ingegeven.
Is dit de juiste manier van werken? Dat hangt er natuurlijk van af wat je juist wil bereiken. Onthou enkel dat je code nu in de databank zit, zowel in het eerste als het tweede geval zal je code dus niet in een PHP-filetje terug te vinden zijn.

Wil je liever een niveau dieper gaan, ook dat kan.
Coderen in de modules
Per module kan je ook nog PHP-code gaan toevoegen en aanpassen.
Waar moet je dan zijn?
Elke module heeft dezelfde structuur; en je vindt ze terug onder /sites/default/modules/(module).
In deze map staat een file met als extensie .module waarin je alle code kan terugvinden die betrekking heeft op de module zelf. Hierin kan je naar hartelust PHP toevoegen en aanpassen.
Let wel op: bij een update van een module ben je natuurlijk wel je aanpassingen kwijt; dat is voorlopig het grote nadeel en daarom is een repository (svn of git) bij deze werkwijze geen overbodige luxe.
Nog vragen? Geen probleem - je kan me steeds bereiken op bart.gysens@lithium.be
reacties (1)
-
Door Enzo op 05-05-2010 (641 dagen geleden)
Een goude regel in Drupal is om nooit aan de code van de module te komen. Maar met de code "ovverriden" in de template.php vd theme!
