Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Php html template

qeijo [25.03.2011 14:21:52]

#

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();
*/
        }

}
?>

Triton [25.03.2011 22:54:18]

#

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, <!-- ... -->.)

Metabolix [26.03.2011 11:30:45]

#

Tiedoston sisällön lukemiseen ei ole parempaa tapaa kuin file_get_contents. Kuitenkin PHP-koodin lukeminen muuttujaan on lähes aina huono idea.

qeijo [26.03.2011 13:33:40]

#

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.

Metabolix [26.03.2011 14:31:35]

#

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.)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta