Includere fisiere din locatii diferite

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
andras
Mesaje: 430

Includere fisiere din locatii diferite

Scuze ca insist cu clasa de paginare. Variabila de clasa:

Cod: Selectaţi tot

$this->pag =$_SERVER['PHP_SELF']
- imi afiseaza /cms/include/modelselect.php si aici imi cauta folderele CSS/
Eroarea este:

Cod: Selectaţi tot

http://localhost/cms/include/css/table.css Failed to load resource: the server
Numai ca folderele CSS sint in alta parte, in root-ul aplicatiei: http://localhost/cms/css/table.css.
Intrebare: cum directionez sa caute corect? Daca pun $this->pag ='../'.$_SERVER['PHP_SELF']; iar imi da eroare la intoarcere, nu mai gaseste modelselect.php. Multumesc.

MarPlo Mesaje: 4343
Salut
Problema nu prea are legatura cu scriptul de paginare (cel putin nu e de la el), ci cu logica codului in raport cu fisierele de pe server.
Solutia e sa definesti o Baza de includere Dinamica (cu conditii in functie de apelarile acelui fisier), sau fixa, raportata la adresa absoluta a scriptului pe server.
Tu stii cum iti faci CMS-ul, pot doar sa pun un exemplu cu Baza de includere Fixa:

Cod: Selectaţi tot

//Base Server-Site root path (ex.: /var/www/vhosts/domain.net/public_html)
define('BASE_ROOT', $_SERVER['DOCUMENT_ROOT']);

//Base folder from Root in which the CMS is located
define('BASE_DIR', '/cms/');

//array with files to include
$incls =[
  'modelselect'=> 'include/modelselect.php',
  'table_css'=> 'css/table.css',
  //other files..
];

//include the needed files
include BASE_ROOT . BASE_DIR .$incls['modelselect'];
//some code..
include BASE_ROOT . BASE_DIR .$incls['table_css']; 

andras Mesaje: 430
Exista o asemenea baza de includere in common.php in root-ul aplicatiei, dar sint incluse numai fisiere PHP daca includ si CSS imi apare continutul lui in pagina. Acest common.php (in care am inclus header.php care contine instructiunea html <link rel="stylesheet" href="css/table.css" type="text/css"/>) il apelez in fiecare fisier PHP, inclusiv in modelselect.php: include_once('../common.php') si este recunoscut (inclusiv formatarile din header.php) peste tot in aplicatie mai putin in clasa de paginare. De asta sint derutat, dar mai studiez. Multumesc oricum pentru rabdare.

MarPlo Mesaje: 4343
Din experienta mea, clasa de paginare nu e necesar sa includa alte fisiere php, css, etc., ci ea sa fie inclusa in fisier php care creaza in browser pagina html.
Se lucreaza in codul din fisierul in care e inclusa clasa.
Daca folosesti ajax, se face codul astfel incat atunci cand e apel prin ajax sa nu mai returneze partea de <head> si altele care nu sunt necesare in acel apel.
Prin ajax nu apelez direct clasa, ci un fisier in care este inclusa si e definit un obiect la ea.

andras Mesaje: 430
Clasa de paginare nu are inclus common.php si nici un alt fisier, ea este apelata din modelselect.php, dar voi studia ce mi-ai spus, voi revedea tot codul.

MarPlo Mesaje: 4343
Incearca cu "/cms/" la inceputul adresei fisierului css (sa porneasca de la root-ul serverului), adica asa:

Cod: Selectaţi tot

<link rel="stylesheet" href="/cms/css/table.css" type="text/css"/>
Sau, poate ar fi mai usor daca pui modelselect.php direct in "cms/" (nu in 'include/').

andras Mesaje: 430
Functioneaza! Am pus

Cod: Selectaţi tot

<link rel="stylesheet" href="/cms/css/table.css" type="text/css"/>
si au disparut erorile din Inspect element! Si am pierdut zile intregi sa gasesc o solutie. M-am gindit si eu sa schimb locatia la modelselect.php dar vad ca acum functioneaza. Multumesc mult!

Edit:
Pana la urma mi-am dat seama ca a fost o problema de browser (Opera) care nu a stiut sa gaseasca calea catre fisier. Astfel de ciudatenii am mai intilnit si la alte browsere. Spre exemplu, in Modzila imi afisa o eroare javascript (function ... is undefined) pentru ca apelul functiei respective era in linia de cod de deasupra definitiei functiei. Am mutat apelul functiei sub secventa de cod care definea functia si a recunoscut-o imediat. Astfel de anomalii se pot depista numai prin incercari?

MarPlo Mesaje: 4343
Pentru anomaliile din browsere stiu doar ca se pot depista si rezolva prin teste si experienta care reiese din ele.
Cand am facut un script, l-am testat in Mozilla, Chrome si IE. La erorile care apareau si nu stiam rezolvarea le copiam si cautam pe internet despre ele.