Moro!
Onko olemassa parempaa tapaa hakea html/php koodia muuttujaan kuin file_get_contents(), en nimittäin haluaisi käyttää koko urlia hakukriteerinä vain ainoastaan /view/ polkua. Alla luokka joka on toki pahasti kesken vielä.
<?php if(!defined('onko')) { die('');} class template { var $content; var $template_path; var $template; var $html; function __construct($template) { $this->template_path = TEMPLATE . $template . "/index.php"; } function build($action) { if(is_file(LIBRARY . $action . "_action.php")) { $this->html = file_get_contents(URL . "/view/" .$action. "_view.php"); } elseif(isset($action)) { $this->html = error(404); } else { $this->html = file_get_contents(URL . "/view/default_view.php"); } } function append() { /* *Liitä sisältö templateen ja $html->append_to_frame(); */ } } ?>
Ottamatta sen enempää kantaa varsinaiseen kysymykseen, mutta itse suosittelisin toteuttaa tuon Template-luokan hieman enemmän tähän tyyliin:
<?php class Template { private $templatePath = null; private $data = array(); public function __construct( $templatePath ) { if ( !file_exists( $templatePath ) ) { throw new Exception( "Sivupohjaa ei löytynyt!" ); } $this->templatePath = $templatePath; } public function set( $key, $value ) { $this->data[ $key ] = $value; } public function render() { extract( $this->data ); require_once( $this->templatePath ); } }
Silloin voit helposti tehdä valmiin sivupohjan ja muuttaa sen sisältöä seuraavalla tavalla:
<?php // Kontrolleri $template = new Template( "sivupohja.php" ); $template->set( "otsikko", "Hello, World!" ); $template->render();
<!-- Sivupohja --> <h4><?php echo $otsikko; ?></h4>
Eli voit tuolla set
-metodilla asettaa avain-arvo-pareja ja
ne ovat suoraan käytettävissä muuttujina tuolla sivupohjassa. Sitten noita arvoja voi helposti tulostella tagien väliin jne... Kannattaa tutustua myös seuraavaan artikkeliin: https://www.php.net/manual/en/control-structures.alternative-syntax.php
Tuossa luokkatoteutuksessa ei ainakaan tarvitse käyttää file_get_contents
-funktiota, vaan sivupohja sisällytetään normaallisti require_once
-funktiolla.
Edit. Ja samoin tuon sivupohjan voi renderöidä kätevästi, vasta koodin lopussa, jolloin voidaan vaivatta käyttää istuntoja ja evästeitä ilman, että ne aiheuttaisivat Headers are already sent! -virheilmoitusta...
(Mod. korjasi HTML:n kommenttimerkinnän, <!-- ... -->
.)
Tiedoston sisällön lukemiseen ei ole parempaa tapaa kuin file_get_contents. Kuitenkin PHP-koodin lukeminen muuttujaan on lähes aina huono idea.
Metabolix kirjoitti:
Kuitenkin PHP-koodin lukeminen muuttujaan on lähes aina huono idea.
Perustelut?
Tässä tapauksessa "koodi" on ainoastaan {$muuttujia} ja {$instance->metodi()} määritelmiä html:n ja Jquery:n seassa.
ps: Försök förstå min dåliga finska.
Perustele ensin itse, miksi se tarvitsisi lukea muuttujaan. Tonin ehdottama tapa on turvallisempi (ei satu virheitä) ja toimii varmemmin (ei häiriinny safe modesta) sekä pystyy hyödyntämään APC:tä. (Tosin require_once kannattaisi korvata tavallisella includella tai requirella, koska voihan saman templaten järkevästi renderöidä montakin kertaa, esimerkiksi monta viestiä foorumille.)
Aihe on jo aika vanha, joten et voi enää vastata siihen.