Net zoals ik opmaakstijlen in een apart bestand heb met de toevoeging /CSS, zou ik ook graag PHP-scripts in een apart bestand willen plaatsen. Zo zou ik daar makkelijk eventuele PHP-scripts kunnen vinden en eventueel wijzigen. In de HTML-pagina's zou ik dan gewoon alleen maar de PHP-oproepen kunnen opnemen die dan gekoppeld zouden kunnen zijn aan die PHP-scripts in dat aparte PHP-bestand.

Ik heb me al rot gezocht op het internet, maar ik kan daar nergens het antwoord op vinden. Wel ben ik al verschillende keren een soortgelijke vraag tegen gekomen. Dus mogelijk vraag ik te veel omdat dit niet mogelijk is?
Ik ben inmiddels al op de hoogte, zodat ik nu ook weet wie ik voor mij heb.

Nog gelukt met de eerste stapjes in Smarty?
- Ariën - op 22/11/2021 11:54:31

Nog gelukt met de eerste stapjes in Smarty?

Niet echt. Geen idee hoe ik verder moet of dat ik mogelijk iets verkeerd heb gedaan. Ben ijverig aan het rondstruinen op het internet, maar echt een beginnersverhaal heb ik nog niet kunnen vinden.

Hm, kun je misschien een voorbeeld geven van wat je precies verwacht / zou willen doen (in code)?

Ik krijg het idee dat je gewoon zoiets wilt (of schat ik het nu te simpel in?):
<?php

include('mijn_functies.php');

?><!DOCTYPE html>
<html>
  <head>
    <title><?php print(mijn_titel()); ?></title>
  </head>
  <body>
    <?php print(mijn_body()); ?>
    enz
  </body>
</html>


Via een template parser kun je dit vereenvoudigen tot:
<!DOCTYPE html>
<html>
  <head>
    <title>{{ mijn_titel }}</title>
  </head>
  <body>
    {{ mijn_body }}
    enz
  </body>
</html>

Maar daar krijg je wel een behoorlijke overhead (+ leercurve) voor terug (uiteraard zitten er ook wel meerdere voordelen aan vast).

[size=xsmall]Toevoeging op 22/11/2021 12:30:55:[/size]

Ter info: "Geany" is op Linux distro's wat "Kladblok" / "Notepad" voor Windows gebruikers is.
Gerard van Katwijk op 22/11/2021 12:03:36

Niet echt. Geen idee hoe ik verder moet of dat ik mogelijk iets verkeerd heb gedaan. Ben ijverig aan het rondstruinen op het internet, maar echt een beginnersverhaal heb ik nog niet kunnen vinden.

In PHP zet je alle data klaar in aparte pakketjes, het 'assignen'. In HTML roep je die data op.

Simpel voorbeeld:

index.php

<?php
require_once('Smarty.class.php');

$smarty = new Smarty(); // Class Smarty inladen

// Stel de juiste paden in voor de directories voor de: 
// templates, automatisch gecompileerde templates, configuratie en de cache. 
$smarty->setTemplateDir('/web/www.example.com/templates/');
$smarty->setCompileDir('/web/www.example.com/templates_c/');
$smarty->setConfigDir('/web/www.example.com/configs/');
$smarty->setCacheDir('/web/www.example.com/cache/');

// Assign een string naar Smarty-variabelen
$smarty->assign('titel', 'Mijn eerste Smarty-site');
$smarty->assign('naam', 'Piet Pietersen');

// Toon het
$smarty->display('index.tpl');
?>


En dan hebben we index.tpl in de /templates staan:

<!DOCTYPE html>
<html>
<head>
<title>{$titel}</title>
</head>
<body>

<h1>{$titel}</h1>
<p>Mijn naam is: {$naam}</p>

</body>
</html>


Et voila...
Je hebt je PHP-code en je HTML gescheiden van elkaar. ;-)

Nu kan je ook bijvoorbeeld foreach en if-else-eleif structuren gebruiken in je templates, en nog veel meer.

@Rob: Een templateparser geeft wat meer overhead, en heeft een leercurve. Maar het heeft wel diverse gemakken, zoals ingebouwde caching, en het compileren van de output om de werking te verstellen en en een debug-modus om te zien welke data er ge-assigned is. Ook heeft Smarty wat standaard plugins voor formulier-onderdelen.
Rob Doemaarwat op 22/11/2021 12:26:07

Hm, kun je misschien een voorbeeld geven van wat je precies verwacht / zou willen doen (in code)?

Dat zal ik bij deze nog een keer proberen. :)
Wanneer ik een website wil maken bestaande uit bijvoorbeeld 3 pagina's, dan krigen ze allemaal het zelfde voetdeel. In de HTML-code moet ik dan 3 keer hetzelde maken en als ik wat wil veranderen moet ik dat 3 keer doen. Dat is op zich nog geen ramp maar naarmate het steeds meer pagina's worden, wens je dat dat anders zou kunnen. Bij voorbeeld door op elke pagina iets te hebben in de geest van: "Ga naar bestand A, kijk daar wat hier moet komen en voer dat uit. Net zoals dat bij CSS gaat, wanner je de stijlen in een apart stijlenbestand hebt. Wanneer ik dan iets op alle pagina's wil veranderen, hoef ik slechts naar bestand A te gaan en daar een verandering aan te brengen.
Hopelijk ben ik nu duidelijk geweest.


Ik krijg het idee dat je gewoon zoiets wilt (of schat ik het nu te simpel in?):
<?php include('mijn_functies.php');?>
<!DOCTYPE html>
<html>
  <head>
    <title><?php print(mijn_titel()); ?></title>
  </head>
  <body>
    <?php print(mijn_body()); ?>
    enz
  </body>
</html>


Dat lijkt mij wel. Ik neem aan dat "print" betekent, dat het daar uitgevoerd moet worden en dat "mijn titel" hetgeen is dat daar uitgevoerd moet worden. Voor mij is echter nog duister waar te vinden is wat er uitgevoerd moet worden. Immers, daar kan ik dan wijzigingen uitvoeren. Ik verwacht(te) eigenlijk, dat net als bij <a href ...></a>, te zien valt waar het benodigde gevonden kan worden. Of is dat in een apart bestand met de naam "mijn_functies.php"? Dat lijkt mij bij nader inzien wel. :) Maar hoe is dan in de "print"regel te zien dat die functie in "mijn_functies.php" te vinden valt?
Ook heb je duidelijk gemaakt dat dat deel boven <!DOCTYPE html> moet komen. :) Morgen ga ik op basis hiervan weer wat proberen. :)

[size=xsmall]Toevoeging op 22/11/2021 12:30:55:[/size]waar

Ter info: "Geany" is op Linux distro's wat "Kladblok" / "Notepad" voor Windows gebruikers is.

Die indruk had ik niet. "Kladblok/Notepad" zijn volgens mij nauwelijks tekstbewerkers te noemen, terwijl "Geany" omschreven wordt als een broncodebewerker en IDE en dat is toch wel een tandje extra leek mij.

N.b. Net een paar gvd's de ruimte ingeslingerd omdat er iets niet ging zoals ik wilde en ik wenste dat alles zo intuitief en gebruiksvriendelijk was als RISC.
De pro's van een templateparser heb ik al uitgelegd.
Voor Smarty heb je {include}.
En in PHP heb je [php]include[/php].

Hiermee kan je bijvoorbeeld een header of footer eenvoudig toevoegen.

Ik zie dat je eerst PHP aan het ontdekken bent, en dus niet met Smarty bezig bent. In dat geval bedoelt Rob dat elke print() in je template-bestand een functie bevat. Print() doet niets anders dan het uitvoeren naar het scherm.


<?php
function mijn_titel() {
	return "Dit is mijn titel";
} 

function mijn_body() {
	return "Dit is de inhoud van mijn site.";
}
?>


En uiteraard kan je zelf zo ver gaan om dingen uit databases of globals, zoals $_GET of $_POST te halen.
Net pas 1 week PHP geïnstalleerd en nog geen tutorial gelezen... mooie boel.
En dan wordt van ons verwacht dat wij de werking van include gaan herkauwen vanuit een eerste pagina. Het wordt tijd voor een biertje en wat muziek..
- Ariën - op 22/11/2021 19:19:06

De pro's van een templateparser heb ik al uitgelegd.
Voor Smarty heb je {include}.
En in PHP heb je [php]include[/php].

Hiermee kan je bijvoorbeeld een header of footer eenvoudig toevoegen.

Ik zie dat je eerst PHP aan het ontdekken bent, en dus niet met Smarty bezig bent.

Klopt. Het lijkt mij eenvoudiger om eerst te kijken of PHP mij kan bieden wat ik wil, voordat ik me in dingen verdiep die misschien (nog) niet nodig zijn.

In dat geval bedoelt Rob dat elke print() in je template-bestand een functie bevat. Print() doet niets anders dan het uitvoeren naar het scherm.


<?php
function mijn_titel() {
	return "Dit is mijn titel";
} 

function mijn_body() {
	return "Dit is de inhoud van mijn site.";
}
?>


En uiteraard kan je zelf zo ver gaan om dingen uit databases of globals, zoals $_GET of $_POST te halen.

Ik begin een donkerbruin vermoeden te krijgen dat ik warm begin te worden. :) Morgen duik ik er verder in.

ik denk dat je eerst de ingeslagen weg met include een eindje op moet gaan.

Zeker als het eerst gaat om de onderdelen als "header", "footer" en "menu" op een pagina.

Daarna ga je wel ontdekken hoe je het midden van de pagina (de tekst / afbeelding / inhoud) dynamisch in een (1) file wilt gaan zetten.

Lijkt me niet verstandig om direct een template parser te gaan inbouwen als de basics als include en zelfs echo of print nog niet zijn toegepast.

Ja: met templates kan alles mooier en eenvoudiger, maar niet op dag 1 direct.
Zo ben ik ook eerst begonnen met HTML en later met CSS. En nu is PHP aan de beurt. Het mooie van zo'n forum als dit, is dat daar vogels van allerlei pluimage tussen zitten. :)

Reageren