Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]require plików php bez ponownego deklarowania klasy
Forum PHP.pl > Forum > Przedszkole
MnicH.
Witam,
ostatnio grzebie sobie w php i napotkałem mały problem.
Zrobiłem sobie plik główny który odpowiada za ładowanie podstron i podstawianie do szablonu (Smarty). Działa okej, ale pliki podstron są .php i w nich odwołuje się do klasy. Problem w tym, że w każdym pliku podstrony muszę znowu deklarować moją klasę i wczytać jej pliki.
Core.php
  1. <?php
  2. require_once('libs/Smarty.class.php');
  3.  
  4. class Core extends Smarty{
  5.  
  6. function __construct() {
  7. parent::__construct();
  8. }
  9.  
  10. function pageDefine(){
  11. define(PAGE_DEFINE, true);
  12. define(PAGE_ID, 69);
  13. return true;
  14. }
  15.  
  16. function sprawdzCzyIstniejeStrona($nazwaStrony){
  17. if( file_exists('page/'.$nazwaStrony.'.php') ){
  18. return true;
  19. } else {
  20. return false;
  21. }
  22. }
  23.  
  24. function loadPage($nazwaStrony){
  25. if($this->sprawdzCzyIstniejeStrona($nazwaStrony)){
  26. $this->pageDefine();
  27. require_once('page/'.$nazwaStrony.'..php');
  28. $this->display($nazwaStrony.'.tpl');
  29. }else{
  30. $this->display('error404.tpl');
  31. }
  32. }
  33.  
  34. function add($nazwa, $param){
  35. return $this->assign($nazwa, $param);
  36. }
  37. }
  38. ?>

index.php
  1. <?php
  2. require('system/Core.class.php');
  3.  
  4. $Core = new Core;
  5.  
  6. //$Core>force_compile = true;
  7. $Core->debugging = true;
  8. $Core->caching = false;
  9. $Core->cache_lifetime = 120;
  10. $stronaDoWczytania = 'glowna';
  11.  
  12. $Core->loadPage($stronaDoWczytania);
  13. ?>


stronaA.php
  1. <?php
  2. require_once('system/Core.class.php'); // <--- o to chodzi, na każdej podstronie muszę to dodawać.
  3. $Core = new Core;
  4.  
  5. if(PAGE_DEFINE == true && PAGE_ID == 69){
  6. $Core->assign('info', 'dziala');
  7. }else{
  8. echo 'Brak dostepu do tej strony!';
  9. }
  10. ?>


Czy jest jakiś sposób, abym w każdym pliku podstrony nie musiał dodawać tej deklaracji?
prz3kus
Stwórz szablon(klase matke) gdzie będziesz dziedziczył po klasie Core.php i w niej ładował resztę podstron
Abaddor
Jeśli każda twoje podstrona jest osobnym skryptem php to musisz tak smile.gif
Można pewnie dodać ten Core jakoś do standardu ale po co?

Nie lepiej w indeksie głównym zrobić jakąś klasę która na podstawie getów będzie ci includować takie pliku jak stronaA.php ?
trzymaj sobie stronaA.php w folderze "strony". W $_GET['strona'] przekaż sobie nazwę podstrony.

Plik index.php

  1.  
  2. require_once('class/core.php');
  3.  
  4. if(isset($_GET['strona']) && file_exist('strony/'.$_GET['strona'].'.php'))
  5. require_once('strony/'.$_GET['strona'].'.php')
  6. else
  7. {
  8. $Core = new Core;
  9.  
  10. //$Core>force_compile = true;
  11. $Core->debugging = true;
  12. $Core->caching = false;
  13. $Core->cache_lifetime = 120;
  14. $stronaDoWczytania = 'glowna';
  15.  
  16. $Core->loadPage($stronaDoWczytania);
  17.  
  18. }
  19.  
  20.  
  21.  
  22.  
  23.  



Ma to pewnie błędów masę, ale chodzi mi o zarys smile.gif

A tak w ogóle to proponuję napisać własny systemi MVC + autoloadery klas wink.gif
MnicH.
@Abaddor, hm... to jest praktycznie to samo, tylko według Ciebie plik ładuje z index.php, a u mnie z klasy. Chodzi mi o to, żeby w tych plikach strony ponownie nie musiał deklarować i wywoływać mojej klasy.
Abaddor
To nie to samo, plik Index.php ma być dla ciebie kontrolerem który ładuje ci podstrony, może być w nim obiekt klasy Core i on zarządzać resztą.

Chodzi o to że każda podstrona jest dla ciebie jedynie inludowanym skryptem(modułem), a całość pozostaje nie zmienna.

Poczytaj o MVC smile.gif

Tak jak ci "prz3kus" napisał.
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.