Robię stronę która będzie miała mniej więcej taką strukturę:

index.php:

  1. <?php
  2. include('./includes.php');
  3. Head();
  4. Top();
  5. Left();
  6. $page='';
  7. if(isset($_GET['page']))
  8. $page=$_GET['page'];
  9. switch($page){
  10. case 'gallery':
  11. include('gallery.php');
  12. break;
  13. //itd...
  14. default:
  15. include('main.php');
  16. }
  17. Bottom();
  18. ?>


Oczywiście to nie jest gotowy kod, ale tak na szybkiego teraz napisałem smile.gif

includes.php będzie oczywiście includowało wszystkie pliki z funkcjami. No i mam przykładowo jakiś plik funcLayout.php gdzie trzymam te wszystkie funkcje Left(), Bottom() itd. W pliku tym korzystam z różnych ścieżek, np. przy wstawianiu loga: <img src="images/logo.png" />. I teraz problem polega na tym, że takie coś będzie działać jedynie w plikach z katalogu głównego, a w innych (np. /admin/) już nie. Jaki jest najbardziej elegancki sposób na rozwiązanie tego problemu?

Można by zastosować ścieżki bezwzględne, ale nie działają u mnie tak jak trzeba: zamiast include('./includes.php'); daje include('http://jakasstrona.com/projekt/includes.php'); i wywala błąd: Unknown function: head().

Próbowałem nawet coś takiego ze w pliku includes.php:

  1. <?php
  2. function MainPath()
  3. {
  4. $arrPath = explode('/', dirname($_SERVER['PHP_SELF']));
  5. $strMainPath = '';
  6. if (count($arrPath)==2) // ==2 bo u mnie jest tak, że <a href="http://serwer.com/projekt/" target="_blank">http://serwer.com/projekt/</a>
  7. $strMainPath = './';
  8. else
  9. {
  10. for($i=2; $i<count($arrPath); $i++)
  11. {
  12. $strMainPath .= '../';
  13. }
  14. }
  15. return $strMainPath;
  16. }
  17. $strMainPath = MainPath();
  18. ?>


I potem robie przykładowo: <img src="<?php echo $strMainPath; ?>jakisplik.jpg" /> - działa, no ale to raczej nie jest najlepszy pomysł.

Mam nadzieje, że zrozumieliście w ogóle o co chodzi winksmiley.jpg