d2jsp
Log InRegister
d2jsp Forums > Off-Topic > International > Italiano > Problem In Php
Prev123Next
Add Reply New Topic New Poll
Member
Posts: 16,271
Joined: Sep 19 2005
Gold: 4,420.32
Feb 26 2014 10:01am
Vabhè ho voglia di portare cultura nel mondo, ti dico come faccio io.
Presumo che lavori in locale, cioè con apache e php installati sul tuo pc o quello dell'università o quel che è.

Parto dalla classica struttura della directory in cui lavori.
Tipicamente ti trovi la root di apache, "htdocs" oppure "www". All'interno io ci creo una directory per progetto:

Code
root (www oppure htdocs)
- my-project-1
- my-project-2
- my-project-3
- [...]


All'interno di ogni progetto creati una struttura base da tenere come template:

Code
my-project-1
- css
- js
- images


Tutti i file .php andranno direttamente nella directory my-project-1, le altre directory si spiegano da sole. Ovviamente metti i tuoi file .css nella directory css

Ora iniziamo a creare una pagina standard, index.php

Code
<!DOCTYPE html>
<html>
<head>
<title>Project 1</title>
<?php include 'import_css.php'; ?>
</head>
<body>
<?php
include 'header.php';
include 'content_index.php';
include 'footer.php';
?>
</body>
</html>


Come vedi ho incluso un file import.php all'inizio.
Questo file si occuperà di importare i css che, si presume, saranno uguali per tutte le pagine:
import_css.php:
Code
<link href="css/style.css" type="text/css" />


Come vedi, pur essendo un file .php contiene solo HTML puro. Va bene così, dovresti sapere che gli script PHP possono saltar fuori e dentro dal codice HTML. In questo caso abbiamo solo HTML.

In index.php ho anche incluso altri tre file, header.php, content_index.php e footer.php.
Il primo e l'ultimo si occuperanno di creare l'header e il footer delle tue pagine. Anche qui presumendo che sia sempre lo stesso per tutte.
Il sistema è comodo ovviamente perchè scrivi l'header una volta sola e poi ti basta includerlo.

Il file content_index.php invece crea la struttura unica dell'index. Puoi evitare di includerlo e al posto di quel file butti dentro il codice HTML direttamente in index.php.
Scegli tu. Per eleganza puoi separarlo, per praticità no.

Questo è il codice di header.php, è sostanzialmente uguale a quello del footer, ti serva come riferimento.
header.php

Code
<div id="header">
Titolo dell'header
</div>


Anche qui banalmente fai stampare solo del codice html.

Tutto chiaro fin qui? Nel prossimo post ti faccio vedere come usare le variabili per le inclusioni.

Member
Posts: 16,271
Joined: Sep 19 2005
Gold: 4,420.32
Feb 26 2014 10:13am
Ora vediamo al volo come passare le variabili.

Facciamo finta che tutte le tue pagine seguano la stessa struttura. Questo varrà quindi per index.php, storia.php, azienda.php ecc:

Code
<!DOCTYPE html>
<html>
<head>
<title>Project 1</title>
<?php include 'import_css.php'; ?>
</head>
<body>
<?php include 'header.php'; ?>
<div id="main_content">
Questo è il contenuto della pagina corrente.
</div>
<?php include 'footer.php';
?>
</body>
</html>


L'unica differenza rispetto a prima è che non ho incluso il contenuto di content_index.php ma ho buttato dentro direttamente il codice.
Supponiamo ora che, mantenendo questa struttura, tu voglia stampare nell'header il titolo della pagina, senza dover modificare ogni volta il file header.php.
Per risolvere il problema crei una variabile col nome in ogni pagina facendo in modo che l'header la veda e la utilizzi.
Modifica innanzitutto il codice precedente così:

Code
<!DOCTYPE html>
<html>
<head>
<title>Project 1</title>
<?php include 'import_css.php'; ?>
</head>
<body>
<?php
$titolo_pagina = 'INDICE';
include 'header.php';
?>
<div id="main_content">
Questo è il contenuto della pagina corrente.
</div>
<?php include 'footer.php';
?>
</body>
</html>


La variabile $titolo_pagina = 'INDICE' cambierà di valore in ogni pagina che crei, quindi diventerà $titolo_pagina = 'STORIA';, $titolo_pagina = 'AZIENDA'; eccetera.
Ora devi modificare il file header.php per fare in modo che utilizzi la variabile:

header.php
Code
<div id="header">
<?php
if (!isset($titolo_pagina)) {
$titolo_pagina = 'TITOLO DEFAULT';
}
echo $titolo_pagina;
?>
</div>


Come vedi ora c'è un misto di codice PHP e HTML.
L'if l'ho usato per verificare che la variabile esista. In pratica la riga dice se la variabile $titolo_pagina non esiste, assegnale il valore 'TITOLO DEFAULT'.
Questo serve per avere un valore standard da usare se non inizializzi la variabile (o se ti dimentichi di farlo).
La riga dopo non fa altro che stampare la variabile.
Così facendo hai un solo header.php che stampa il valore che gli passi prima di chiamarlo.

Il codice fatto così è molto bad practice e sporco, ma per iniziare va bene e ti aiuta a capire come girano le cose.
Per fare una cosa ben fatta dovresti fare in modo che la stampa dell'header sia una funzione che accetta la variabile $titolo_pagina come parametro.
O meglio ancora passare ad una programmazione ad oggetti.

Per adesso accontentati, al limite ti spiego altre due cose poi.

Prova questi file e dimmi come va.

Member
Posts: 9,318
Joined: Mar 17 2007
Gold: 2.20
Feb 26 2014 10:15am
Tutti i file .php andranno direttamente nella directory my-project-1

Già qua siamo fermi....Grazie Alpi se usi la struttura cosi con i php tutti messi assieme in una cartella allora fin la ci ero arrivato...il mio problema è che ho un file PHP e questo file php usa del css dentro la solita nostra cartella /css, questo file php include un'altro file PHP che è in UN'ALTRA cartella. Ed entrambi usano lo stesso file css. Solo che il primo file Php vede la cartella css mentre il secondo è blind e non vede una mazza neanche usando il ../

This post was edited by nonNo on Feb 26 2014 10:15am
Member
Posts: 16,271
Joined: Sep 19 2005
Gold: 4,420.32
Feb 26 2014 10:23am
Mi manca di capire alcune cose per aiutarti.

Punto 1.
La struttura immagino a questo punto che non la decidi tu. Cioè ti hanno assegnato di crearla così di proposito giusto?
Altrimenti potresti sbattertene e fare come dico io. Ok stiamo d'accordo così e vediamo il

Punto 2
Il file A.php (nella root) chiama B.php (in una directory di nome B )
Code
include 'B/B.php';

e funziona.
Abbiamo inoltre due file A.css e B.css.
A.php include A.css, direi con un classico
Code
<link href="css/A.css" type="text/css" />

ficcato direttamente nel codice.
B.php tenta di chiamare B.css con lo stesso metodo ma non lo vede.
Code
<link href="css/B.css" type="text/css" />

e nemmeno mettendo ../ davanti
Code
<link href="../css/B.css" type="text/css" />


Dimmi dove ci sono differenze da cosa hai tu. Se non ne veniamo a capo copia qui il codice che hai e fammi vedere.



This post was edited by AlPi on Feb 26 2014 10:24am
Member
Posts: 9,318
Joined: Mar 17 2007
Gold: 2.20
Feb 27 2014 01:48am
è esattamente quello il mio problema!

Io potri sbattermente il cazzo e fare una cosa dritto per dritto mettendo tutte e circa le 90 pagine in una cartella....ma quando sarebbe ora di fare un'attimo di manutenzione ti vedi sta cartellona con più di 90 pagine :(

Queste pagine possono essere raggruppate logicamente per argomenti (topografia,Storia dell'azienda,progettazione stradale,download,ec....) facendo quindi cartelle verrebbe fuori una cosa più "pulita" ed ordinata te capi? :)

L'include a cosa mi serve essenzialmente? per l'header e il footer. Questi 2 file sono a parte e vengono richiamati ogni volta cosi ovviamente se mai si dovesse fare una modifica al menù la si fa in un file e tutti gli altri 90 se la prendono, altrimenti fare la stessa modifica per tutti e 90++ file uno diventa deficente.

Inizialmente ho perseverato sulla strada di jQuery usando:

<script>
$(function(){
$("#Header").load("Header.html");
});
</script>
<header id="Header">
</header>

ma anche li sono incappato nello stesso problema di cecità al momento dell'inclusione dei css.

Alchè arriviamo probabilmente ora al problema generale vero e proprio:

Nella ROOT c'è il file A.php e Header.php / Footer.php
Nella Directory Css ci sono TUTTI i file css
Nella Directory B c'è il nostro fantomitico B.php/html

Il problema è: sia A.php che B.php includono il file Header.php.
Il file header.php ha un css tutto suo.

A.php vede Header.php e il suo css -> perfetto
B.php vede Header.php ma NON il suo css -> MALE :(

This post was edited by nonNo on Feb 27 2014 01:49am
Member
Posts: 16,271
Joined: Sep 19 2005
Gold: 4,420.32
Feb 27 2014 09:11am
Se usi Crome (in FF comunque è simile) premi F12 al caricamento della pagina, vai su "console" e guarda che errori ti dà.

Poi copia qui che vediamo.

Member
Posts: 10,415
Joined: Aug 24 2005
Gold: 24,533.60
Feb 27 2014 10:25am
Quote (nonNo @ 27 Feb 2014 09:48)

[...]
Alchè arriviamo probabilmente ora al problema generale vero e proprio:

Nella ROOT c'è il file A.php e Header.php / Footer.php
Nella Directory Css ci sono TUTTI i file css
Nella Directory B c'è il nostro fantomitico B.php/html

Il problema è: sia A.php che B.php includono il file Header.php.
Il file header.php ha un css tutto suo.

A.php vede Header.php e il suo css -> perfetto
B.php vede Header.php ma NON il suo css -> MALE :(


hai provato a modificare B e re-importarli direttamente da li'?

mi sono trovato in una situazione simile con java (pero' li' era una roba compilata e teoricamente non modificabile)
alla fine ho scritto un accrocchio che costruisce un url assoluto

controlla anche andando a cercare 2 cartelle piu' sopra
<link href="../../css/B.css" type="text/css" />
Member
Posts: 9,318
Joined: Mar 17 2007
Gold: 2.20
Feb 28 2014 07:47am


i path ovviamente sono sfasati ma se li cambio per farli vedere al file B non li vede più il file A che è nella cartella sopra....

l'include lo fa perchè il menu grezzo che si vede c'è...ovviamente mancano tutti i css e i js che sono a campi...

inutile dire che il file A si vede perfetto con 0 errori da console

This post was edited by nonNo on Feb 28 2014 07:49am
Member
Posts: 16,271
Joined: Sep 19 2005
Gold: 4,420.32
Feb 28 2014 07:49am
Mettili assoluti...

Code
<link href="http://localhost/test/menuBody.css" type="text/css" />


Però questo metodo ti funzionerà in locale, dovrai cambiare il percorso assoluto dovessi mai caricare il file online su un altro server.

Member
Posts: 9,318
Joined: Mar 17 2007
Gold: 2.20
Feb 28 2014 07:55am
Quote (AlPi @ 28 Feb 2014 15:49)
Mettili assoluti...

Code
<link href="http://localhost/test/menuBody.css" type="text/css" />


Però questo metodo ti funzionerà in locale, dovrai cambiare il percorso assoluto dovessi mai caricare il file online su un altro server.


<link href="http://localhost/test/css/menuBody.css" type="text/css" /> con il css cartella anche?
Go Back To Italiano Topic List
Prev123Next
Add Reply New Topic New Poll