Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Funziona! Ora mi aiutate a ottimizzarla pls?

    Ho scritto una funzione che, a partire dall'url, scrive una riga con i nomi delle cartelle relative al percorso in cui ci si trova, e crea per ogni nome il rispettivo link alla cartella stessa.

    E' scritta male, ma funziona.

    Codice PHP:
    $percorso dirname($_SERVER['REQUEST_URI']);

    // si può scrivere meglio questa riga?
    $spezzato str_replace("/","_"$percorso);
    $chars preg_split('/_/'$spezzato, -1PREG_SPLIT_NO_EMPTY);
    // ho usato str_replace perchè non so come riconoscere '/'

    echo "Sei qui: ";

    //a seconda della profondità ricostruisce il link
    for($i 0$n count($chars) ; $i $n $i++) {
    print (
    "<a href=\"");
    if (
    $i==0) {
    echo 
    "../../";
    }
    if (
    $i==1) {
    echo 
    "../";
    }
    echo 
    $chars[$i]. "\">" $chars[$i] . "</a> > ";
    }
    // echo $title; 
    La parte più debole secondo me è il for: ricostruisce correttamente la profondita delle cartelle solo fino a due diramazioni dalla /root, a meno di non continuare con gli "if ($i==x"?

    Come posso riscrivere al meglio questa funzione?

  2. #2
    scusa non ho ben capito la questione... tu hai fatto uno script che, ad esempio, quando carica la pagina sito.org/cartella/altra_cartella/pagina.php ti restituisce "/cartella/altra_cartella/pagina.php" ??

    scrivi un esempio di stringa che ti restituisce? [per capire in che formato vuoi il link...]

    ciao
    danno

  3. #3
    Utente di HTML.it L'avatar di chris
    Registrato dal
    Sep 1999
    Messaggi
    1,568
    "Nei prossimi tre anni col mio governo vogliamo vincere anche il cancro, che colpisce ogni anno 250.000 italiani e riguarda quasi due milioni di nostri concittadini"

  4. #4
    Chiedo scusa per il titolo, guardate anche l'ora di invio del messaggio

    Per capire cosa deve fare, l'ho messo su una pagina di prova
    http://www.guardaqua.it/prova.php

    Il codice funziona, vorrei solo scriverlo meglio e fare in modo che scriva link assoluti, e non relativi (../)

  5. #5

  6. #6

    riscrivo il messaggio dato che era poco chiaro

    Ho scritto una funzione che mi crea i link per la navigazione tra le cartelle del sito, ricostruendo il percorso in cui ci si trova.

    Codice PHP:
    $percorso dirname($_SERVER['REQUEST_URI']);
    // si può scrivere meglio questa riga?
    $spezzato str_replace("/","_"$percorso);
    $chars preg_split('/_/'$spezzato, -1PREG_SPLIT_NO_EMPTY);
    // ho usato str_replace perchè non so come riconoscere '/'

    echo "Sei qui: ";

    //a seconda della profondità ricostruisce il link
    for($i 0$n count($chars) ; $i $n $i++) {
    print (
    "<a href=\"");
    if (
    $i==0) {
    echo 
    "../../";
    }
    if (
    $i==1) {
    echo 
    "../";
    }
    echo 
    $chars[$i]. "\">" $chars[$i] . "</a> > ";
    }
    // echo $title; 
    il risultato si può vedere nella /dir1

    //mi trovo in /dir1/dir2
    dir2
    [/code]
    senza cioè dover scrivere link simbolici, ma ricostruendo i percorsi assoluti, usando di volta in volta i valori che contiene l'array $chars (che poi sono i nomi delle directories).

    Infine, c'è sicuramente un modo più elegante per fare questo:
    Codice PHP:
    // si può scrivere meglio questa riga?
    $spezzato str_replace("/","_"$percorso);
    $chars preg_split('/_/'$spezzato, -1PREG_SPLIT_NO_EMPTY);
    // ho usato str_replace perchè non so come riconoscere '/' 
    Quello che vedete è la mia massima espressione di programmazione autonoma, ed evidentemente ogni suggerimento è ben accetto

  7. #7
    Utente di HTML.it L'avatar di fabi080
    Registrato dal
    Mar 2002
    Messaggi
    442
    Così dovrebbe fare quello che volevi
    Codice PHP:
    $percorso dirname($_SERVER['PHP_SELF']);
    $percorso '/fabio/docs/test/';
    // divisione
    $chars preg_split('|/|'$percorso, -1PREG_SPLIT_NO_EMPTY);

    // se vuoi stampi la home che non ha corrispondenze in $chars
    echo '[url="/"]Home[/url]
    '
    ;

    //a seconda della profondità ricostruisce il link
    for($i 0$n count($chars), $url='/' $i $n $i++) {
      
    $url .= $chars[$i].'/';
      echo 
    '[url="'.$url.'"]'.$chars[$i].'[/url]';
      echo 
    '
    '
    ;


  8. #8
    Grande!!!

    L'unica cosa che ho dovuto cambiare è
    $percorso = dirname($_SERVER['PHP_SELF']);
    in
    $percorso = dirname($_SERVER['REQUEST_URI']);
    dato che mi serve proprio a partire dall'url.

    Fa esattamente ciò che desideravo!
    Ora devo solo aggiungere un controllo

    Grazie

  9. #9
    Utente di HTML.it L'avatar di fabi080
    Registrato dal
    Mar 2002
    Messaggi
    442
    Guarda che io ho messo apposta PHP_SELF al posto di REQUEST_URI, perchè il contenuto delle due var è uguale sino al nome della pagina, in request uri c'è in più la richiesta di tipo get quindi pensa se la tua pagina venisse chiamata con un indirizzo del tipo
    codice:
    http://tuosito.it/dir1/dir2/pagina.php?dir=/ciao/ciao/ciao
    si verrebbero a creare link che non punterebbero a nulla, per questo ho messo PHP_SELF, poi fai come preferisci.

  10. #10
    Il problema è che PHP_SELF non funziona perchè l'indirizzo delle pagine non è quello reale, ma è mascherato dal mod_rewrite, che in realtà serve sempre /index.php?querystring

    quindi dirname() restituisce sempre /root

    Per questo prendo l'indirizzo dall'url. Il controllo che devo aggiungere è proprio sulla querystring: devo fare in modo di eliminare tutto quello che c'è da "?" e/o "#" in poi

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.