Gå til innhold

Hvordan lage et rammeverk?


Anbefalte innlegg

Hei,

 

Jeg har sett litt på forskjellige rammeverk, og sliter med å forstå hele opplegget der. Og jeg lærer best ved å gjøre - så hvorfor ikke?

 

Jeg har til nå fått til en mappestruktur

- admin

- classes

- modules

- skins

- default

- - css

- - images

- - js

- - templates

.htaccess

config.php

index.php

 

 

Alle filene er tomme, borsett fra index.php:

 

<?php
/**
**mittetternavn* Framework
*
* @version 0.1
* @author Eivind *mittetternavn*
*/

session_start();

error_reporting(E_ALL); // Skrudd på under utvikling

define( "APP_PATH", dirname( __FILE__ ) ."/" );

define( "*mittetternavn*", true );

date_default_timezone_set("Europe/Oslo");

function __autoload( $class_name )
{
require_once('classes/' . $class_name . '.class.php' );
}


$template = new template;
$template->show('default');
exit();
?>

 

Har og template.class.php

 

<?php
// prevent this file being called directly
if ( ! defined( '*mittetternavn*' ) ) 
{
echo 'This file can only be called via the main index.php file, and not directly';
exit();
}

class template	{
private $vars = array();

public function __construct()	{

}

public function __set($index, $value)	{
	$this->vars[$index] = $value;
}

public function show($name)	{
$path = APP_PATH.'/skins/'.$name.'/templates/main.tpl.php';
	if(file_exists($path) == false)	{
		echo 'Template '.$name.' not found';
		return false;
	}

	foreach($this->vars as $key => $value)	{
		$key = $value;
	}
include($path);
}
}
?>

Så ble jeg litt usikker, jeg vil egentlig ha header.tpl, main.tpl og footer.tpl, men ble litt usikker hvordan jeg skulle gjøre det. Så lagde kun main.tpl for nå.

Jeg vil også kunne skrive {innhold}, og bruke $template->write('innhold') = 'innholdet';

 

Det må jo selvfølgelig gjøres med preg_replace, men hvordan skal jeg få gjort dette før filen vises? Med file_get_contents?

Og der stoppet det. Jeg har skjønt såpass at jeg må ha en class for modules, en for template og en for databasen og sånt. Men hva skal disse inneholde, og hva gjør de?

 

Edit: Har kommet litt lenger på dette rammeverket, har oppdatert.

Endret av Sk!ppy
Lenke til kommentar
Videoannonse
Annonse
[..] sliter med å forstå hele opplegget der. Og jeg lærer best ved å gjøre - så hvorfor ikke?

Vel, uten å vite helt hva du skal lage eller hvorfor du egentlig skal lage det, så vil jeg påstå at du har et helt forferdelig dårlig utgangspunkt. Vil heller anbefale deg å prøve å benytte deg av et par rammeverk før du begir deg ut på å lage et nytt et. Du må i det minste sette deg inn i MVC skikkelig, før du lager et MVC-rammeverk.

 

http://en.wikipedia.org/wiki/Model–view–controller

http://oreilly.com/php/archive/mvc-intro.html

 

Jeg vil også kunne skrive {innhold}, og bruke $template->write('innhold') = 'innholdet';

Hvis du absolutt har lyst til å skrive templates i et annet språk, så gjør deg selv en tjeneste og bruk allerede eksisterende kode. Det du beskriver er karakteristisk for bl.a. Smarty. Det skal samtidig nevnes at du er litt ute på bærtur ved å i det hele tatt tenke på å bruke noe sånt, med mindre du har noe meget spesifikt du ønsker å oppnå. Alt Smarty gjør er å oversette til PHP. Det vil si at du ikke får noen andre features enn hva du ville fått med PHP alene. Faktisk motsatt, du blir begrenset og kan ikke gjøre like mye.

 

Titt heller på PHPs alternative syntax. Med dette kan man lage ganske lekre templates.

 

<?php if ( $error ) : ?>
   <p class="error"><?= $error ?></p>
<?php elseif ( $success ) : ?>
   <p class="success"><?= $success ?></p>
<?php elseif ( $notice ) : ?>
   <p class="notice"><?= $notice ?></p>
<?php endif; ?>

<form method="get" action="index.php" class="frame_form">
   <p class="input">
       <label for="check_ticket">BillettID</label>
       <input type="text" name="ticketId" id="check_ticket">
   </p>
   <p class="submit">
       <input type="submit" name="submit" class="submit" value="Sjekk inn" />
       <input type="submit" name="cancel" class="cancel" value="Avbryt" />
   </p>
   <input type="hidden" name="canvas" value="admin" />
   <input type="hidden" name="event" value="check" />
   <input type="hidden" name="session" value="<?= htmlentities ( $_GET['session'] ) ?>" />
</form>

<script type="text/javascript">
   $(function(){
       $('#check_ticket').focus();
   });
</script>

<table>
   <tr>
       <th>Id</th>
       <th>Navn</th>
       <th>Brukernavn</th>
       <th>E-mail</th>
       <th>Innsjekk</th>
   </tr>
   <?php if ( is_array ( $participants ) && count ( $participants ) > 0 ) : ?>
       <?php foreach ( $participants as $participant ) : ?>
           <tr>
               <td><?= $participant['ticketId']; ?></td>
               <td><?= $participant['realname']; ?></td>
               <td><?= $participant['username']; ?></td>
               <td><?= $participant['email']; ?></td>
               <td>[ <a href="index.php?canvas=admin&event=check&ticketId=<?= $participant['ticketId']; ?>&session=<?= htmlentities ( $_GET['session'] ) ?>"><?= ( $ticketstatus[$participant['ticketId']] ? '<img src="/system/images/icons/tick.png" /> Sjekket inn' : '<img src="/system/images/icons/cross.png" /> <strong>Ikke</strong> sjekket inn' ) ?></a> ]</td>
           </tr>
       <?php endforeach; ?>
   <?php else : ?>
       <tr>
           <td colspan="4" class="msg">Det finnes ingen deltakere til dette arrangementet.</td>
       </tr>
   <?php endif; ?>
</table>

  • Liker 1
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...