[PHP] Pagina-indeling

Pagina: 1
Acties:
  • 3.168 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • rutje1
  • Registratie: November 2006
  • Laatst online: 30-03 22:39
Hii,

Ik wil graag een eigen website in PHP, de code gaat mij erg goed af, maar ik zit nog te denken over de indeling van de pagina.
Mijn website bestaat nu op de volgende manier.

include boven.php
include links.php
include $_GET['pagina']
include onder.php

Ingedeeld met DIV's in het bestand index.php en het middenstuk wordt aangeroepen via www.website.nl?pagina=contact.....
(het is veilig, je kan nooit een pagina van buitenaf aanroepen)

Maar, het eerst probleem wat ik tegenkwam. Ik zou graag de titel in de browser per pagina. Dus bij contactformulier boven in titel <title>Website - Contactpagina</title> en bij een forum het onderwerp, maar dit kan niet omdat de <title> tag al gesloten is en de pagina bij mij er nu later pas wordt aangeroepen.

Hoe kan ik dit het beste indelen?? Templates? HTML en PHP scheiden??

Ik weet het echt niet hoe dit moet, zijn er hier mensen met ervaring die mij kunnen helpen?? Ik ben nog maar beginneling :P

En als ik php en html zou moeten scheiden zie ik niet echt hoe dat moet.

Maar hoe delen jullie een pagina in?

Graag jullie antwoord!
Mvg Rutje1 O-)

Acties:
  • 0 Henk 'm!

  • Bozozo
  • Registratie: Januari 2005
  • Laatst online: 20-02 16:10

Bozozo

Your ad here?

Of dat veilig is durf ik te betwijfelen. Alle input van gebruikers dien je voor de zekerheid te filteren.

Over je vraag: ik doe het meestal zo:

index.php:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php session_start(); //alleen doen als je sessie gebruikt natuurlijk
  require_once("./php_site/class.inputfilter_clean.php");
  $filter = new InputFilter();
  function dofilter($string, $thefilter) {
    return $thefilter->process($string);
  }
    
  function domysqlfilter($string, $thefilter) {
    return $thefilter->safeSQL($thefilter->process($string),$mysqlconnection);
  }
  
  $showpage = dofilter($_GET['page'],$filter);

  require_once('./php_site/header.php');
  require_once('./php_site/page.php');
  require_once('./php_site/footer.php');
 
?>

class.inputfilter kun je via google vinden en is een goede manier voor de luie / ondeskundige php'er om user input te filteren op gevaarlijke dingen. Door het zo op te bouwen zijn in alle php bestanden die je requiret (of includet) de functies dofilter, domysqlfilter en de variabele $showpage beschikbaar. Die kun je bijvoorbeeld zo gebruiken:

header.php:
XHTML:
1
2
3
4
5
6
7
8
9
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
    <title><?php echo("My Site - $showpage"); ?></title>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    <meta http-equiv="Content-Style-Type" content="text/css" />
    <link href="/styles/style.css" rel="stylesheet" type="text/css" />
        ...etc...

In een .php bestand kun je wisselen tussen html en php met [html] <?php [php] ?> [html] of door tussen de php tags wat html te echo'en.

TabCinema : NiftySplit


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Wat ik altijd doe (maar dan hééééél erg versimpeld naar hongeveer het niveau van jouw site is inderdaad PHP en HTML zo veel mogelijk scheiden:

PHP:
1
2
3
4
5
berekenAlleDynamischeGegevens();
pleurDieIneenVariabele();
steldetitelvandepaginain();

include('template.inc.php');


template.inc.php bevat dan de *gehele* template inclusief html head, body etc. Zorg er dus voor dat je niets echo'ed voordat je je template include, maar zet alles wat je eigenlijk zou willen hebben op een bepaalde plek in je template.php :

PHP:
1
2
3
4
5
6
global $_TPL;
$_TPL = array();
$_TPL['body'] = 'woei';
$_TPL['title'] = 'blaat';
$_TPL['javascript'] = 'alert("blaat");';
include('template.php');



PHP: template.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
<? global $_TPL; ?>
<html>
<head>
<title><?=$_TPL['title'];?></title>
<? if (array_key_exists('javascript', $_TPL))
{
echo("<scitpt type='text/javascript'>{$_TPL['script']}</script>");
} ?>
</head>
<body>
<?=$_TPL['body'];?>
</body>
</html>

[ Voor 3% gewijzigd door SchizoDuckie op 13-01-2008 12:19 ]

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • rutje1
  • Registratie: November 2006
  • Laatst online: 30-03 22:39
SchizoDuckie schreef op zondag 13 januari 2008 @ 12:17:
Wat ik altijd doe (maar dan hééééél erg versimpeld naar hongeveer het niveau van jouw site is inderdaad PHP en HTML zo veel mogelijk scheiden:
En op welke manier werkt dit dan om op te roepen? Heb je dan meerdere losse pagina's: contact.php / adverteren.php etc. of index.php?pagina=contact / index.php?pagina=adverteren..

Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 09:34
Wat ik zelf doorgaans doe is mod_rewrite gebruiken om alle dynamische requests (dus alles behalve plaatjes, CSS, etc) te herschrijven naar index.php. Die kijkt vervolgens naar de URL ($_SERVER['REQUEST_URI']) en start aan de hand daarvan een bepaalde functie (erg versimpeld, in feite gaat het via een pagehandler object die de classtree parser aanroept die een classloader gebruikt om de daadwerkelijke class en member aan te roepen, maar het gaat om het idee ;)).

Wat die functie vervolgens doet is instellen welke template gebruikt wordt en variabelen toewijzen aan die template (ik gebruik hier zelf altijd smarty voor, maar alleen het noemen van die naam staat hier al garant voor heftige discussies ;)), als dat allemaal klaar is gaat de pagehandler (of de index als je het simpel wilt houden) verder met het weergeven van de header template, de linkerbalk template, de middentemplate (welke net ingesteld is door je functie) en de footer template :)

Een nieuwe titel is nu erg simpel, standaard zet je in je pagehandler iets van $template -> title = 'Hello world!'; en wil je die veranderen kun je simpelweg in je functie $template -> newTitle('Foo is not bar!'); of iets in die geest aanroepen. In je header template zet je vervolgens op een zelfde manier als SchizoDucky doet een $title variable en klaar is rutje1 :Y)

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

rutje1 schreef op zondag 13 januari 2008 @ 12:23:
[...]
En op welke manier werkt dit dan om op te roepen? Heb je dan meerdere losse pagina's: contact.php / adverteren.php etc. of index.php?pagina=contact / index.php?pagina=adverteren..
Ik werk inderdaad opdezelfde manier als doodseskaderkikkertje hierboven met rewrite rules zodat alles uitkomt op index.php, maar als je niet allemaal zin hebt in dat soort moeilijke gedoe hier voor once & for all my way zoals globaal al mn sites opgebouwd zijn.

Rewrite rules zijn eigenlijk een heel kleine modificatie op dit script ipv de $_GET en $_POST parameters. Verder gebeuren er natuurlijk in mijn sites nog véél meer dingen zoals input filters, database classes, autoloaden van classes en dat soort meuk, maar het basis idee blijft hetzelfde

PHP: index.php
1
2
3
4
5
6
7
8
9
10
11
12
13
global $_TPL;

$_TPL = array();
$_TPL['title'] = 'Mijn siteje *D';

session_start();

$plugins = glob('./plugins/*.plugin.php');
foreach($plugins as $phpfile)
{
    include($phpfile);
}
include('template.php');


That's it, dat is m'n hele index.php eigenlijk. Zoals je ziet worden er allerlei php files ingeladen die *.plugin.php heten uit de ./plugins dir.

die zien er zo uit:

PHP: default.plugin.php
1
2
3
4
5
6
global $_TPL;
if(empty($_GET) && empty($_POST))
{
    $_TPL['body'] .= 'welkom op de standaard index pagina :-)';
    $_TPL['title'] .= 'je default pagina titel';
}

Zoals je ziet, deze plugin wordt alleen utigevoerd als er geen GET of POST variabelen binnenkomen, dan worden je standaard template placeholders aangevuld.

PHP: adverteren.plugin.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
if(array_key_exists('action', $_POST)) { // voor als je $_POST variabelen binnenkrijgt, bijv. een mail form
    switch($_POST['action'])
    { 
        case 'sendmail':
            mail('yadayadabladdablada'); 
            $_GET['pagina'] = 'mailthanks'; // ga daarna door naar de mailthanks page.
        break;
    }

}

if(array_key_exists('pagina', $_GET)) { // als er geen $_GET pagina is wordt dit hele blok niet uitgevoerd => volgende plugin
    switch($_GET['pagina'])
    {
           case 'adverteren': 
              $_TPL['body'] .= 'hier staat bijv. je contactformulier, die als hidden post input action=sendmail heeft. die kan je nog in een los bestandje gooien, want das platte html';
              $_TPL['body'] .= file_get_contents('contactformulier.tpl');               
           break;
          case 'mailthanks':
            $_TPL['body'] .= 'en bedankt he! we bellen.';
         break;
           
    }
}

En hier wordt dan een speciaal stukje functionaliteit aangeroepen, specifiek gericht op bijvoorbeeld in dit geval je contactformulier. Heb je dan in een totaal andere site een contactformulier nodig, dan is het een kwestie van plugins in de folder pleuren, eventuele dependency classes erbij en vwalla :)

[ Voor 13% gewijzigd door SchizoDuckie op 13-01-2008 13:40 ]

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 09:34
SchizoDuckie schreef op zondag 13 januari 2008 @ 13:30:
als doodseskaderkikkertje hierboven
offtopic:
_/-\o_ _O-

[ Site ] [ twitch ] [ jijbuis ]

Pagina: 1