[PHP] $string = include('file);

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • g4wx3
  • Registratie: April 2007
  • Laatst online: 11-09 09:49
Ik ben uit principe om html te mixen in php, dat komt overzichtelijkheid, en handelbaarheid, en codezuiverheid niet ten goede. Ik heb zelfs liever dat de HTML in een gescheiden pagina staat.

Nu heb ik een methode die op basis van het object wat html moet produceren. het is de bedoeling dat die dit wordt gereturned in een variable, als lange string. Met een include('file') kom je dus niet ver.

Nou heb ik eerst wat research gedaan, en op php.net staat dit voorbeeld:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$string = get_include_contents('somefile.php');

function get_include_contents($filename) {
    if (is_file($filename)) {
        ob_start();
        include $filename;
        $contents = ob_get_contents();
        ob_end_clean();
        return $contents;
    }
    return false;
}

?>



Lijkt me niet een erg mooie oplossing, wat is jullie mening?
Stel dat je al output-buffering gebruikt, veroorzaakt dit dan ook geen conflicten?

http://www.softfocus.be/


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Waarom niet zo:

PHP code, dump vars in array.

include bestanden, met daarin {var1}, {var2} enz...

En dan met ob_end_clean(function); die replacen vanuit die array.

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Snake schreef op zondag 22 juni 2008 @ 23:00:
Waarom niet zo:

PHP code, dump vars in array.

include bestanden, met daarin {var1}, {var2} enz...

En dan met ob_end_clean(function); die replacen vanuit die array.
Ik heb het al vaker gezegd en ik zeg het nog eens: waarom een parser schrijven als PHP van zichzelf al prima in staat is om te parsen?

Met de door de topicstarter overgenomen methode van php.net is niet veel mis, die heb ik zelf ook vaak toegepast. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
g4wx3 schreef op zondag 22 juni 2008 @ 22:53:
Lijkt me niet een erg mooie oplossing, wat is jullie mening?
Prima oplossing die ik zelf ook met enige regelmaat gebruik. Zeker in combinatie met een custom stream wrapper is het een erg mooie manier om de viewlayer simpel en overzichtelijk te houden.
Stel dat je al output-buffering gebruikt, veroorzaakt dit dan ook geen conflicten?
Output buffering is gewoon te nesten; zoals ook op php.net te lezen is.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Ik vraag me alleen af of dit niet te beperkt is? Hoe kun je hier blokken mee parsen :?

Acties:
  • 0 Henk 'm!

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

SchizoDuckie

Kwaak

Cartman! schreef op maandag 23 juni 2008 @ 12:11:
Ik vraag me alleen af of dit niet te beperkt is? Hoe kun je hier blokken mee parsen :?
Het leuke is dus dat je niet parsed, je include gewoon een file en vangt alles op wat er ge'echo'd wordt.

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • Hans1990
  • Registratie: Maart 2004
  • Niet online
Prima oplossing, ik zou er alleen nog een parameters variable aan toevoegen. Bijvoorbeeld:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$string = get_include_contents('somefile.php');

function get_include_contents($filename, $parameters=array()) {
    if (is_file($filename)) {
        extract($parameters);
        ob_start();
        include $filename;
        $contents = ob_get_contents();
        ob_end_clean();
        return $contents;
    }
    return false;
}

?>


Op deze manier kan je gewoon wat variabelen meegeven, en bijvoorbeeld bepaalde condities maken van de template. $isError, $isPosted, $UsersList, etc. Op deze manier kan je je logical PHP code van de weergave PHP code scheiden.

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Cartman! schreef op maandag 23 juni 2008 @ 12:11:
Ik vraag me alleen af of dit niet te beperkt is? Hoe kun je hier blokken mee parsen :?
Je kunt, eventueel, met een custom stream wrapper (stream_wrapper_register()) de geinclude PHP code aanpassen voor 'ie uitgevoerd word. Daardoor kun je dus verkorte of aangepaste syntax gebruiken in de bestanden die je include om zo een vrij simpele op PHP gebaseerde DSL te maken. In plaats van dan gewoon include 'file.php' te doen, doe je dan include 'view://file.php'; beperkt is het dus alleszins.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Cartman! schreef op maandag 23 juni 2008 @ 12:11:
Ik vraag me alleen af of dit niet te beperkt is? Hoe kun je hier blokken mee parsen :?
Je kan toch "gewoon" in een for loop die functie aanroepen? :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Tuurlijk kan dat, maar of dat efficient is dat is weer iets anders. Misschien denk ik ook wel in te grote toepassingen... ;) Voor een paar losse pagina's is het misschien wel handig.
Pagina: 1