Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zmienne przez funkcje... ?
Forum PHP.pl > Forum > PHP
Ccn
Mam taki skrypt portalowy, który robi blok po lewej, treść po środku i blok po prawej...

Lewa strona: inc/header.php -> rozpoczęcie skryptu, sesje itp.
Środek: plik.php -> plik, który jest otwierany, includuje header.php na początku i footer.php na końcu
Prawa strona inc/footer.php -> blok prawy i stopka

Czasami w pliku na który sie wchodzi jakaś akcja ma go zakończyć. Funkcja exit() spowoduje zatrzymanie pliku i nie zaincluduje sie prawy blok...
Więc dałem funkcje cexit(), która wygląda tak:
  1. <?php
  2. function cexit() {
  3. include('inc/footer.php');
  4. exit();
  5. }
  6. ?>

To zakończy strone i zaincluduje prawy blok...
Ale jest problem, bo wtedy na prawy blok nie przechodzą zmienne... Niewiecie jak to rozwiązać?
zulus
Na początek polecam lekturę: include" title="Zobacz w manualu php" target="_manual.

W sumie to możesz użyć coś takiego:
  1. <?php
  2. function cexit() {
  3. global $pierwszaZmienna, $drugaZmienna;
  4. //reszta funkcji
  5. }
  6. ?>
siemakuba
include nie ma tu nic do rzeczy. W pliku dołączanym (include) masz dostep do zmiennych do ktorych masz dostep w tym samym miejscu w ktorym dołączasz plik. Jeżeli używasz include wewnątrz funkcji, będziesz miał w nim dostęp tylko do zmiennych dostępnych wewnątrz fukcji. Możesz to rozwiązać za pomocą global, jak podał @Ccn. Trochę to mało elastyczne rozwiązanie - to zależy od tego ile tych zmiennych potrzebujesz w dołączanym pliku.

Może zamiast kończenia wykonywania skryptu przez exit() niech wykonana akcja zmienia wartośc jakiejś zmiennej i potem możesz użyć instrukcji warunkowych i dalej wykonywać określone zadania na podstawie wcześniej ustawionej wartości.

pozdr.
Ccn
Kod niektórych plików jest taki:
  1. <?php
  2. if(!$admin) {
  3. echo("<b>MODUŁ TYLKO DLA ADMINA</b>");
  4. cexit();
  5. }
  6. ?>

Myślalem nad tym, żeby cexit() poprostu zastąpić includem i exit()'em...
Ale to troche niewygodne...

Może też być
  1. <?php
  2. if(!$admin) {
  3. echo("<b>MODUŁ TYLKO DLA ADMINA</b>");
  4. } else {
  5. // treść pliku
  6. }
  7. ?>

Ale to też jest niewygodne...
ActivePlayer
  1. <?php
  2. function cexit() {
  3. foreach($GLOBALS as $id=>$val){
  4. $$id=$val;
  5. }
  6. include('inc/footer.php');
  7. exit();
  8. }
  9. ?>

rozwiązanie do d*** ale jak nie potrzebujesz skryptu w super klasie to to rozwiazanie zadziala.

edit:

albo nawet:
  1. <?php
  2. function cexit() {
  3. foreach($GLOBALS as $id=>$val){
  4. global $id;
  5. }
  6. include('inc/footer.php');
  7. exit();
  8. }
  9. ?>
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.