Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Czy to jest "w porządku"?
Forum PHP.pl > Forum > Przedszkole
byther
Najlepiej podam żywy przykład. Najpierw stwórzmy strukturę...
Kod
#!/bin/bash
mkdir public templates templates_c public/action public/view
chmod 777 templates_c
touch index.php public/action/akcja.php public/view/index.php templates/page.tpl


A zawartość to:

/public/action/akcja.php
  1. <?php
  2. $tpl->assign( 'test', true );
  3. return 'view/index';
  4. ?>


/public/view/index.php
  1. <?php
  2. $template = 'page.tpl';
  3. ?>


/templates/page.tpl
  1. <a href="index.php">Indeks</a> |
  2. <a href="index.php?q=view/index">Indeks 1</a> |
  3. <a href="index.php?q=action/akcja">Akcja</a>
  4. <hr/>
  5. Szablon: OK<br/>
  6. {if $test}
  7. Zmienna: OK<br/>
  8. {/if}


/index.php
  1. <?php
  2. define( 'APPDIR', dirname( __FILE__ ) . '/' );
  3. require_once( 'smarty/Smarty.class.php' );
  4.  
  5. function run( $req )
  6. {
  7. $tpl =& new Smarty;
  8. while( !empty( $req ) && file_exists( APPDIR . 'public/' . $req . '.php' ) )
  9. $req = include( APPDIR . 'public/' . $req . '.php' );
  10. return $tpl->fetch( $template );
  11. }
  12.  
  13. echo run( $_REQUEST['q'] ? $_REQUEST['q'] : 'view/index' );
  14. ?>


Przykład jest banalnie prosty. Chyba jednak nie do końca potrafię zrozumieć jego potencjał (o ile takowy istnieje). Na ile można coś takiego wykorzystać?
kszychu
1. Zmień temat wątku.
2. Powiedz z czym masz problem albo co ci nie działa.
byther
Ad. 1) Brak koncepcji. Chodzi Ci coś konkretnego po głowie? Chętnie zmienię na lepszy.
Ad. 2) Wszystko działa. Po prostu chcę poznać opinie innych na temat "podejścia". Chodzi o "maksymalny minimalizm" - prosty, krótki kod przy wysokiej efektywności jego działania.
Jak mogłeś zauważyć, za pomocą funkcji run() możemy wykonywać "łańcuchy" akcji, a do tego wykorzystywać ją (funkcję) rekurencyjnie. Miałbyś jeszcze jakieś spostrzeżenia?

EDIT:
Funkcja run() mogłaby korzystać z osławionego algorytmu autorstwa @hawka i @setha (?) smile.gif. Chodzi o to, że jakiś URI jest dzielony na fizyczny plik i argumenty dla niego:
  1. <?php
  2. function routeURI( $uri, $chrootPath = 'public' )
  3. {
  4. if( empty( $uri ) )
  5. return;
  6. $req = explode( '/', $uri );
  7. $args = array();
  8. while( !file_exists( APPDIR . $chrootPath . '/' . implode( '/', $req ) . '.php' ) )
  9. $args[] = array_pop( $req );
  10. return array(
  11. 'path' => APPDIR . $chrootPath . '/' . implode( '/', $req ) . '.php',
  12. 'args' => implode( '/', array_reverse( $args ) )
  13. );
  14. }
  15. ?>

PS. Automatyczne tworzenie adresów przy odnośnikach? Hmm... smile.gif
PS2. Nadal czekam na spostrzeżenia...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.