Visualizzazione risultati 1 fino 22 di 22

Discussione: Problema Include

  1. #1
    Guest

    Post Problema Include

    Ciao a tutti,
    il mio problema è il seguente:
    sto cercando di includere nel file "sidebar.php" una pagina da me creata "loginform_van.php" ed inserita in un'altra cartella.

    Ecco la struttura

    Codice HTML:
    themeNameChild/loginform_van/loginform_van.php
    themeNameChild/sidebar.php
    Lì per lì non c'è nessuna difficoltà, basta dare il percorso del "loginform_van.php" e viene caricato senza problemi.

    Nel mio caso però la pagina da includere è collegata a fogli di stile (.css) e di script (.js) nonché ad altre pagine (.php).
    E logico pensare che includendo solo "loginform_van.php" tutti collegamenti ai suddetti file vengono sballati, perché il browser non cerca più nella cartella in cui è contenuto "loginform_van.php" ma cerca in quella in cui è contenuto "sidebar.php".

    Una soluzione, non proprio intelligente sarebbe di fare in modo che tutti i collegamenti in "loginform_van.php" siano di tipo assoluto.

    Siccome la pagina fa parte di un form che ho creato per fare il logIn e il SignUp tutti i collegamenti sono di tipo relativo, per il semplice motivo che il form possa essere utilizzando anche in altre circostanze.

    Ebbene come fare per caricare la pagina "loginform_van.php" e fare in modo che i collegamenti in essa contenuti rimangano di tipo relativo alla cartella nella quale essa è contenuta ??
    Ho letto che si può includere una cartella o tutto un percorso...
    Qualcosa con
    Codice PHP:
    set_include_path
    include_path
    Ma non riesco a giostrarmi bene!
    Help!
    Ultima modifica di alessiovank : 22-04-2012 alle ore 16.41.01

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,261

    Predefinito

    Puoi usare dirname(__FILE__) oppure __DIR__ per ottenere la directory che contiene lo script php corrente.

    Vedi Magic constants.

  3. #3
    Guest

    Predefinito

    Esatto, anche quello avevo visto,
    scusami l'ignoranza, ma da autodidatta non sono in grado di usarlo

    devo scrivere ?

    Codice PHP:
    include loginform_van(__loginform_van.php__)
    Ultima modifica di alessiovank : 22-04-2012 alle ore 16.41.09

  4. #4
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,261

    Predefinito

    Da autodidatta avresti dovuto guardare gli esempi nella pagina che ti ho linkato

    Se dirname(__FILE__) ti restituisce la directory dello script corrente, puoi usarla come path per includere altri file nella stessa directory

    Codice PHP:
    include dirname(__FILE__) . '/sidebar.php';
    include
    dirname(__FILE__) . '/loginform_van/loginform_van.php';
    Occhio però che una cosa sono le directory del suo spazio web (in cui vivono i file php) ed un'altra quelle degli URL (in cui si trovano file .js e .css), quindi ciò che vale per un gruppo potrebbe non valere per l'altro.
    Ultima modifica di dreadnaut : 22-04-2012 alle ore 19.15.51 Motivo: + slash

  5. #5
    Guest

    Predefinito

    Scusami non avevo visto il link alla guida PHP
    Comunque ho provato come hai detto tu,
    e alla fine il risultato è che mi carica la pagina ma i link sono sempre in relazione a "sidebar.php" invece che ha "loginform_van/loginform_van.php"

    per chiarti meglio ecco qua il sito:
    http://alessiovank.altervista.org

    se venisse caricato correttamente, il form è a comparsa e slide fatto con js. Ma adesso risulta solo come un elenco non ordinato <UL> quindi non carica ne il .css ne il punto .js ne i relativi collegamenti. Prova a schiacciare un bottone e vedrai l'errore:

    Pagina non trovata (errore 404)
    La pagina http://alessiovank.altervista.org/login.php non è presente.

    Guardando nella guida PHP leggo questa spiegazione:
    __FILE__
    The full path and filename of the file. If used inside an include, the name of the included file is returned. Since PHP 4.0.2, __FILE__ always contains an absolute path with symlinks resolved whereas in older versions it contained relative path under some circumstances.


    "symlinks resolved" non dovrebbe essere la chiave di tutto il problema ??

    Per quanto riguarda la posizione dei file per fare funzionare lo script (.js e .css) si trovano tutti nella cartella "loginform_van" quindi non dovrebbe essere un problema.

    Grazie per l'aiuto

    PS = nel tuo suggerimento di prima non mancano due forward slash appena aperti gli apici ??

  6. #6
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,261

    Predefinito

    Come ho scritto sopra, i link a file .js e .css vivono nello spazio degli URL, non dei file nel tuo spazio web, e non hanno nulla a che vedere con sidebar.php ed il suo contenuto.

    Tutti i file .css o .js nella tua pagina vengono caricati. L'unico 404 è per questa immagine, che manca.

    [PS] si, dirname() restituisce il nome della directory, non il path, aggiungili!

  7. #7
    Guest

    Predefinito

    Ho aggiunto questa riga:

    Codice PHP:
    include dirname(__FILE__).'/loginform_van/loginform_van.php';
    il risultato è questo
    http://alessiovank.altervista.org/

    ma dovrebbe essere questo
    http://alessiovank.altervista.org/wp...inform_van.php


    Come vedi non è caricato correttamente

  8. #8
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,261

    Predefinito

    Stai includendo una pagina dentro un'altra, con il risultato di avere due tag <html>, due <head>, ed un sacco di problemi. Fra cui il fatto che il secondo <head> venga ignorato, così come il css che carica.

    Se vuoi includere il file via php, non può essere un'intera pagina, ma solo uno spezzone, ed il css va caricato nell'head della pagina principale.

    Se stai cercando di creare un tema per wordpress, forse ti conviene leggerne la documentazione prima. Purtroppo non ho esperienza su come vadano create correttamente, posso solo dirti non così.

  9. #9
    Guest

    Predefinito


    Non voglio creare un nuovo tema, solo apportarne alcune modifiche.

    Per il fatto che non si possono caricare due pagine una dentro l'altra hai perfettamente ragione, non ci avevo proprio pensato.

    Quindi devo caricare il .css e il .js nell'"header.php" ovvero il file in cui è definito l'header. Con un percorso relativo immagino.

    Adesso provo, poi ti so dire, grazie.

  10. #10
    Guest

    Predefinito

    Quando si modifica WP, conviene appoggiarsi direttamente alle librerie di WP. Questa funzione fa al caso tuo: http://codex.wordpress.org/Function_..._template_part

  11. #11
    Guest

    Predefinito

    Ciao ragazzi,
    purtroppo devo riproporre il problema

    per includere il form del login della pagina.php ho usato

    Codice PHP:
    include dirname(__FILE__).'/loginform_van/loginform_van.php';
    il problema è che con questo metodo nessuno dei link relativi è risolto.

    Qualche suggerimento ??

  12. #12
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,261

    Predefinito

    Ed usando get_template_part() come suggerito sopra?

  13. #13
    Guest

    Predefinito

    Grazie Dread ma non ci siamo capiti, non devo inglobare nessun template, devo solo incorporare un pezzo di codice da me scritto in una pagina già esistente.

    Facile, si può fare benissimo con un <iFrame> con il problema che l'iframe non si ridimensiona automaticamente a seconda del suo contenuto.

    Quindi ho pensato a php, e in effetti ci sono vari workAround al problema dei link relativi...

    Solo che ancora non ho capito quale codice utilizzare...
    alessiovank.altervista.org

    buttaci un occhio: prova a schiacciare il bottone login...
    e chiaramente cerca la pagina sbagliata...

    help

  14. #14
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,261

    Predefinito

    Premendo il primo Login (con il pallozzo accanto) mi mostra correttamente un form di login. Premendo il submit di questo form, cerca di aprire una pagina che non esiste.

    Non mi aiuta a capire purtroppo.

    Se hai ancora problemi di directory, prova a stampare la directory corrente prima dell'include, in modo da farti un'idea di "dove sei".

  15. #15
    Guest

    Predefinito

    La struttura del loginform è la seguente

    mytheme_child/loginform_van/loginform_van.php

    quindi tutti i link di quella pagina sono relativi alla cartella /loginform_van.
    ES.
    - il tasto login carica la pagina login.php dalla cartella /loginform_van.
    - il tasto iscrivimi carica la pagina signup.php dalla cartella /signupform_van.


    Quindi inglobando il form che creato, in questo percorso:

    /mytheme_child/sidebar.php

    tutti i link sopracitati (relativi quindi alla cartella "loginform_van") non vengono risolti bene dal comando include.

    Spero di essermi spiegato bene
    questo è come funziona dalla sua directory originale
    http://alessiovank.altervista.org/wp.../anteprima.php

  16. #16
    L'avatar di sabirweb
    sabirweb non è connesso Neofita
    Data registrazione
    20-04-2012
    Messaggi
    4

    Predefinito

    Ciao, hai provato con :
    Codice:
    include(CHILD_DIR.'/loginform_van/loginform_van.php');

  17. #17
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,261

    Predefinito

    A me funziona nel tuo sito esattamente come funziona nella pagina di anteprima. Forse è diverso quando sei loggato?

    E di nuovo, non importa in quale directory si trovino i file, quello che importa per include è la directory corrente dello script, che puoi vedere con getcwd().

  18. #18
    Guest

    Predefinito

    sabirweb -- Grazie per il tuo suggerimento,
    ma non funziona, mi lancia un alert dicendo che non trova il file al percorso specificato.

    Dread Io ho capito quello che vuoi dire tu. E' chiaro che posso inglobare una pagina in un'altra indifferentemente da dove si trovi. Il problema è che questa pagine contiene tutta una serie di collegamenti relativi. Il comando include in sostanza trasferisce pari pari il contenuto di una pagina in un altra, quindi i collegamenti relativi non vengono cambiati (risolti).
    Allora mi dirai, bè rendi tutti i tuoi collegamenti assoluti. Tralasciando il fatto che ci metterei un sacco di tempo, il problema è che poi si perde la versatilità dello script che non può più essere utilizzato su alte piattaforme finché il nuovo utilizzatore non ne va a cambiare tutti i collegamenti adattandoli al suo dominio. No! Impensabile!

    Da qualche parte avevo letto che esiste un comando include che oltre al file in sostanza include tutta la cartella che contiene quel file. In modo appunto che i collegamenti vengano interpretati correttamente.

    Spiego la struttura il più semplicemente possibile
    analizzando la seguente struttura:

    sito/miacartella/miapagina.php
    sito/miacartella/immagini/sfondo.jpg
    sito/tuacartella/tuapagina.php


    La pagina "miapagina.php" ha come sfondo l'immagine "immagini/sfondo.jpg"

    e fin qui tutto bene. Ma se io ho in

    tuacartella/tuapagina.php
    includo la "miapagina.php" nella tua in questo modo:

    Codice PHP:
    include dirname(__FILE__).'/miacartella/miapagina.php';
    la "miapagina.php" non risolve il collegamento allo sfondo
    che rimane sempre "immagini/sfondo.jpg".

    c'è un modo per fare in modo che i path relativi vengano risolti?? nel caso di questo esempioi lo sfondo deve essere cercato in "../miacartella/immagini/sfondo.jpg" E questo non solo per un immagine ma per qualsiasi link che contiene una determinata pagina.

    Questo anche perché se no è totalmente impossibie includere pagine dinamiche in altre utilizzando il comando include.

    --------------------------------------------------

    Ragà io non so più come spiegarmi, eppure l'argomento è veramente affrontato dappertutto sul web ma ci sono troppe soluzioni e troppo confuse tra di loro.

  19. #19
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,261

    Predefinito

    Non so che dirti, qua ci sono due problemi di fondo:
    1. stai cercando di scrivere qualcosa che è un plugin per wordpress, o un pezzo di tema per wordpress, senza usare le API di Wordpress; dolore e sofferenza, e probabilmente fail

    2. scrivi cose come
      la "miapagina.php" non risolve il collegamento allo sfondo che rimane sempre "immagini/sfondo.jpg"
      che in parte sono incomprensibili, ma per quel poco sembra che tu stia mischiando path ed URL, che non può funzionare.


    Se aiuta, ti ricordo che:
    • i path relativi in uno script sono relativi alla directory corrente dello script (il getcwd di cui parlavo sopra), mentre
    • gli URL relativi sono relativi all'URL visualizzato nel browser.

  20. #20
    Guest

    Predefinito

    Guarda qui Dread!
    Questo è esattamente il mio problema!!

    http://forum.debianizzati.org/viewto...p?f=13&t=42600


  21. #21
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,261

    Predefinito

    E questa è la soluzione, come ho già scritto:
    • in uno script php, i path relativi sono relativi alla directory corrente dello script, che trovi con getcwd(), mentre
    • in una pagina html gli URL relativi sono relativi all'URL visualizzato nel browser.


    Prepara tutti i tuoi percorsi basandoti su questi due punti, e sei a posto.

  22. #22
    Guest

    Predefinito

    Alla fine ho rinunciato con l'Include e ho caricato tutto nella pagina con un <iFrame>.

    Non mi funzionavano nemmeno i riferimenti allo scripts.js

    Adesso tutto va alla grande,
    l'unico inghippo è che l'iFrame non è ridimensionabile automaticamente secondo il contenuto,
    ma vabbè... =)

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •