menù "dinamico"

« Older   Newer »
 
  Share  
.
  1. Dodiz
     
    .

    User deleted


    Ciaooo, dopo un po' di tempo, rieccomi a rompere :D

    Sto facendo un sito insieme ad un mio amico, e, visto che lui deve scrivere gli articoli vorrei che questi fossero automaticamente, (e in ordine) inseriti in un menù laterale...

    Premetto che non ho usato un iframe per i vari articoli, ma mi sono affidato all'include di php

    usando questo codice:

    CODICE
    <?php

    if(empty($_GET['articles']))
    {
    include "articles/home.php";
    }

    else
    {
    include "articles/" .$_GET['articles']. ".php";
    }

    ?>


    con il metodo GET viene deciso quale pagina includere

    nel menù viene scritto il seguente codice:

    CODICE
    <?php

    $j = $i              //$i indica il numero di articoli totali

    while($j >= $i - $n)   //$j è il contatore, $n è il numero di articoli presenti (spiegherò meglio più avanti)
    {
    echo "<tr><td onmouseover=\"this.style.cursor='pointer'\"
    onclick=\"location.href='/index.php?articles=" .$nome_indirizzo[$j][1]. "';\" class='menu_left'>
    <a>" .$nome_indirizzo[$j][0]. "</a><div style='text-align: right;'></div></td></tr>";
    --$j;

    //creazione di una nuova riga in una tabella, la matrice $nome_indirizzo possiede $n colonne e 2 righe, una per il titolo, l'altro per l'indirizzo, il titolo viene scritto nel //menù, l'indirizzo per il metodo get da usare nell'include
    //la matrice è il punto cruciale della mia richiesta xD
    //verrà spiegata avanti

    }

    ?>



    Questo invece dovrebbe essere il file "catalizzatore" del menù
    Questo file dovrebbe mantenere le varie classi del menù

    CODICE
    <?php

    $n = 20; //n è il numero di articoli presenti nel menù

    $nome_indirizzo[1][0] = "Fine di flappy bird?";        //il primo articolo, colonna 1, riga 0 della matrice
    $nome_indirizzo[1][1] = "mobile/flappybird";          //il link per il primo articolo, colonna 1, riga 1 della matrice

    //ricerca di totali articoli presenti nella matrice

    $i = 0;

    while(1==1)
    {
           $i++;
       
           if(empty($nome_indirizzo[$i][0]))
                   {

                           --$i;     //con questo si trova il numero preciso di articoli
                           break;
                   }
    }



    ?>


    La mia domanda è:
    utilizzando un altro script php, nella pagina, c'è un modo per riempire automaticamente quelle matrici, prendendo, come prima riga il titolo della pagina (<title></title>)
    e come secondo il link, senza il .php alla fine?

    Oppure avrei pensato di poterlo scrivere manualmente in ogni pagina, ma vorrei che quelle pagine avessero un modo di passare le variabili (anzi, la parte della matrice), senza metodo $_GET o $_POST, in quanto l'utente non dovrà mai aprire direttamente quella pagina..

    Avrei un'altra idea ma non so come realizzarla, l'utilizzo di un database..ma di SQL non so praticamente niente..


    A chiunque mi aiuti, grazie :unsure:

    Spero che mi sia fatto capire xD
     
    Top
    .
  2. Guglielmoqwerty
     
    .

    User deleted


    Umm, premetto che ho letto il codice e capito poco (più che altro per stanchezza, infatti invio e vado a farmi un sonnellino) ti propongo un idea che mi viene di getto:

    Ho capito che per ogni articolo tu crei una diversa pagina php. Quindi potresti chiamare gli articoli "****Titolo Articolo" dove **** è un numero identificativo in ordine crescente (il primo articolo avrà 0000, il secondo 0001 etc). Poi per metterli nel menù usi una funzione che legge tutti i file da una cartella (è facile da fare se conosci php, altrimenti su google la trovi con facilità) e scrivi in ordine decrescente il nome di tutti gli elementi nella cartella (magari non scrivendo le prime 4 cifre nel titolo del menù).

    Questa è un idea che mi viene così di getto perchè ho usato un procedimenti simile per scrivere un audiocd di inglese per la mia classe
     
    Top
    .
  3. Dodiz
     
    .

    User deleted


    CITAZIONE (Guglielmoqwerty @ 17/2/2014, 16:13) 
    Umm, premetto che ho letto il codice e capito poco (più che altro per stanchezza, infatti invio e vado a farmi un sonnellino) ti propongo un idea che mi viene di getto:

    Ho capito che per ogni articolo tu crei una diversa pagina php. Quindi potresti chiamare gli articoli "****Titolo Articolo" dove **** è un numero identificativo in ordine crescente (il primo articolo avrà 0000, il secondo 0001 etc). Poi per metterli nel menù usi una funzione che legge tutti i file da una cartella (è facile da fare se conosci php, altrimenti su google la trovi con facilità) e scrivi in ordine decrescente il nome di tutti gli elementi nella cartella (magari non scrivendo le prime 4 cifre nel titolo del menù).

    Questa è un idea che mi viene così di getto perchè ho usato un procedimenti simile per scrivere un audiocd di inglese per la mia classe

    innanzitutto grazie xD

    In realtà sono svariati giorni che cerco una funzione del genere

    intendi una cosa del genere, vero?? http://www.danieletabacco.com/15/articolo/...ry-con-php.html

    Dovrei fare poi operazioni con le stringhe? Per eliminare la parte non numerica?

    Grazie di nuovo ^^
     
    Top
    .
  4.  
    .
    Avatar

    Senior Member

    Group
    Staff
    Posts
    10,796

    Status
    Anonymous
    CITAZIONE (Dodiz @ 17/2/2014, 14:48) 
    La mia domanda è:
    utilizzando un altro script php, nella pagina, c'è un modo per riempire automaticamente quelle matrici, prendendo, come prima riga il titolo della pagina (<title></title>)
    e come secondo il link, senza il .php alla fine?

    Allora, tieni presente che da molti giorni dopo circa 2 o 3 ore a notte, quindi potrei essere lucido quanto uno ubriaco. lol

    Ma detto questo, ciò che vuoi fare non è complicato. Principalmente si tratta di prendere i file .php e listarli, ottenere tutti i path insomma. Una volta fatto, aprirai quel file, ed andrai a leggere il source usando le regex (o un qualsiasi modo che riconosca title come stringa a cui vuoi fermarti); fatto questo leggi sino a che non trovi la chiusura del title (ma sicuro ci sono funzioni belle e pronte per ricercare quel tag, e visto che è un tag che compare solo una volta, non avrai problemi nel trovarlo ed essere certo di volere quella parte soltanto). Ora non ricordo l'API PHP, domani se riesco - magari - scrivo qualcosa.


    CITAZIONE
    Oppure avrei pensato di poterlo scrivere manualmente in ogni pagina, ma vorrei che quelle pagine avessero un modo di passare le variabili (anzi, la parte della matrice), senza metodo $_GET o $_POST, in quanto l'utente non dovrà mai aprire direttamente quella pagina..

    Avrei un'altra idea ma non so come realizzarla, l'utilizzo di un database..ma di SQL non so praticamente niente..

    Non mi è chiaro quanto dici nel primo blocco... sarà perchè sono un po' stordito.

    Che informazioni devi memorizzare? Effettuare query e creare tabelle con PHP non è di per sè complesso.
     
    Top
    .
  5. Dodiz
     
    .

    User deleted


    CITAZIONE (RootkitNeo @ 18/2/2014, 00:34) 
    CITAZIONE (Dodiz @ 17/2/2014, 14:48) 
    La mia domanda è:
    utilizzando un altro script php, nella pagina, c'è un modo per riempire automaticamente quelle matrici, prendendo, come prima riga il titolo della pagina (<title></title>)
    e come secondo il link, senza il .php alla fine?

    Allora, tieni presente che da molti giorni dopo circa 2 o 3 ore a notte, quindi potrei essere lucido quanto uno ubriaco. lol

    Ma detto questo, ciò che vuoi fare non è complicato. Principalmente si tratta di prendere i file .php e listarli, ottenere tutti i path insomma. Una volta fatto, aprirai quel file, ed andrai a leggere il source usando le regex (o un qualsiasi modo che riconosca title come stringa a cui vuoi fermarti); fatto questo leggi sino a che non trovi la chiusura del title (ma sicuro ci sono funzioni belle e pronte per ricercare quel tag, e visto che è un tag che compare solo una volta, non avrai problemi nel trovarlo ed essere certo di volere quella parte soltanto). Ora non ricordo l'API PHP, domani se riesco - magari - scrivo qualcosa.


    CITAZIONE
    Oppure avrei pensato di poterlo scrivere manualmente in ogni pagina, ma vorrei che quelle pagine avessero un modo di passare le variabili (anzi, la parte della matrice), senza metodo $_GET o $_POST, in quanto l'utente non dovrà mai aprire direttamente quella pagina..

    Avrei un'altra idea ma non so come realizzarla, l'utilizzo di un database..ma di SQL non so praticamente niente..

    Non mi è chiaro quanto dici nel primo blocco... sarà perchè sono un po' stordito.

    Che informazioni devi memorizzare? Effettuare query e creare tabelle con PHP non è di per sè complesso.

    Ubriaco o meno ci ho capito poco xD

    Ho cominciato a leggere un manuale php poco più di una settimana fa, ho visto che la sintassi è quasi uguale al c++ quindi gli ho dato un'occhiata veloce
    Non so cosa siano le regex o le path, quindi credo che andrò a studiarmelo per bene xD

    All'inizio avevo pensato di fare come Guglielmo, ma erano giorni che digitavo su google per cercare una funzione per aprire file, ma ho omesso la parola cartella e mi dava risultati su include e metodo get..

    Grazie ancora, comunque ^_^
     
    Top
    .
  6. Alchimist
     
    .

    User deleted


    Alcuni consigli/osservazioni

    • Considera la possibilità di utilizzare un database (SQL, JSON o XML) per salvare e leggere gli articoli, così facendo semplificheresti di molto le cose oltre ad avere un'efficienza maggiore.

    • Non utilizzare la funzione 'empty()' per controllare se una variabile contiene un valore o meno, utilizza la funzione 'isset()'.

    • Evita le tabelle. Per creare un menu laterale è meglio utilizzare una lista (sia dal punto di vista logico che pratico).

    • Nota che è il contrario di quello che hai scritto tu, ovvero il primo numero tra parentesi quadre indica il numero della riga, mentre il secondo indica quello della colonna.
      CODICE
      $nome_indirizzo[1][0] = "Fine di flappy bird?";        //il primo articolo, riga 1, colonna 0 della matrice
      $nome_indirizzo[1][1] = "mobile/flappybird";           //il link per il primo articolo, riga 1, colonna 1 della matrice



    Detto questo, a quanto ho capito la tua necessità è quella di creare un menù laterale in cui vengano messi i titoli degli ultimi n articoli pubblicati con relativi link.
    Per riempire automaticamente la matrice, ti serve uno script che acquisisca il nome di tutti i file e che estragga il titolo da ognuno di essi attraverso, per esempio, un'espressione regolare. Per ottenere una lista dei file presenti all'interno di una cartella puoi utilizzare la funzione 'readdir()'.
    CODICE
    <?php
       if ($handle = opendir('/articles/')) {
           while (($entry = readdir($handle)) !== false) {
               if ($entry != "." && $entry != "..") {
                   // Qui apri il file ed ottieni il titolo dell'articolo,
                   // dopodiché inserisci titolo e link nella matrice.
               }
           }
           closedir($handle);
      }
    ?>

    Tuttavia questo metodo, come ti ho scritto prima, è altamente inefficiente e sconsigliato, perché richiede molte più risorse di quante ne siano necessarie per compiere un'operazione del genere. Il mio consiglio è dunque quello di informarti su come utilizzare un database per salvare i tuoi articoli (tra l'altro, tramite query puoi ottenere una lista dei primi n articoli ordinati per data in maniera decrescente, senza doverti scervellare a trovare metodi complessi come questo) ^_^
     
    Top
    .
  7. Dodiz
     
    .

    User deleted


    CITAZIONE (Alchimist @ 18/2/2014, 10:56) 
    Alcuni consigli/osservazioni

    • Considera la possibilità di utilizzare un database (SQL, JSON o XML) per salvare e leggere gli articoli, così facendo semplificheresti di molto le cose oltre ad avere un'efficienza maggiore.

    • Non utilizzare la funzione 'empty()' per controllare se una variabile contiene un valore o meno, utilizza la funzione 'isset()'.

    • Evita le tabelle. Per creare un menu laterale è meglio utilizzare una lista (sia dal punto di vista logico che pratico).

    • Nota che è il contrario di quello che hai scritto tu, ovvero il primo numero tra parentesi quadre indica il numero della riga, mentre il secondo indica quello della colonna.
      CODICE
      $nome_indirizzo[1][0] = "Fine di flappy bird?";        //il primo articolo, riga 1, colonna 0 della matrice
      $nome_indirizzo[1][1] = "mobile/flappybird";           //il link per il primo articolo, riga 1, colonna 1 della matrice



    Detto questo, a quanto ho capito la tua necessità è quella di creare un menù laterale in cui vengano messi i titoli degli ultimi n articoli pubblicati con relativi link.
    Per riempire automaticamente la matrice, ti serve uno script che acquisisca il nome di tutti i file e che estragga il titolo da ognuno di essi attraverso, per esempio, un'espressione regolare. Per ottenere una lista dei file presenti all'interno di una cartella puoi utilizzare la funzione 'readdir()'.
    CODICE
    <?php
       if ($handle = opendir('/articles/')) {
           while (($entry = readdir($handle)) !== false) {
               if ($entry != "." && $entry != "..") {
                   // Qui apri il file ed ottieni il titolo dell'articolo,
                   // dopodiché inserisci titolo e link nella matrice.
               }
           }
           closedir($handle);
      }
    ?>

    Tuttavia questo metodo, come ti ho scritto prima, è altamente inefficiente e sconsigliato, perché richiede molte più risorse di quante ne siano necessarie per compiere un'operazione del genere. Il mio consiglio è dunque quello di informarti su come utilizzare un database per salvare i tuoi articoli (tra l'altro, tramite query puoi ottenere una lista dei primi n articoli ordinati per data in maniera decrescente, senza doverti scervellare a trovare metodi complessi come questo) ^_^

    Grazie per gli accorgimenti ^^
    Inizierò a studiarmi l'SQL...
    ma vorrei chiederti il motivo riguardo allo sconsiglio della funzione empty(),
    dell'utilizzo della lista(solo il modo pratico xD),
    e per la matrice, cambia qualcosa al livello di prestazioni, ecc??

    Grazie per lo script, le funzioni che non conosco le sto appena vedendo ^_^
     
    Top
    .
  8. Alchimist
     
    .

    User deleted


    CITAZIONE (Dodiz @ 18/2/2014, 20:25) 
    Grazie per gli accorgimenti ^^
    Inizierò a studiarmi l'SQL...
    ma vorrei chiederti il motivo riguardo allo sconsiglio della funzione empty(),
    dell'utilizzo della lista(solo il modo pratico xD),
    e per la matrice, cambia qualcosa al livello di prestazioni, ecc??

    Grazie per lo script, le funzioni che non conosco le sto appena vedendo ^_^

    - Lo sconsiglio della funzione 'empty()' è puramente relativo a questo caso, non è una considerazione assoluta.
    Innanzitutto se vuoi comprendere meglio il comportamento di entrambe le funzioni, sulla documentazione ufficiale sono spiegate entrambe abbastanza bene: empty(), isset().
    Spiegandolo in breve parole, la funzione 'isset()' controlla se una variabile è stata inizializzata (le è stato assegnato un valore) ed il suo valore è diverso da NULL. La funzione 'empty()' controlla anche che questo valore sia diverso da 0, 0.0, FALSE, "" (stringa vuota) e "0" (una stringa contenente il valore '0'). Siccome a te interessa se la variabile '$_GET['articles']' contiene un valore (non ti interessa se questo valore sia '0' o altro) è più logico utilizzate 'isset()'.
    Nota: Nel tuo caso funziona tutto in entrambi i modi, a parte il caso in cui tu scelga di iniziare a contare il numero degli articoli da '0' (ovvero il primo articolo scritto si trova in '0.php', il secondo in '1.php' e così via).

    - Beh, dal punto di vista pratico devi scrivere meno codice e risulta più ordinato
    Considera che usando una tabella devi creare una riga ed una colonna per ogni valore del menù, mentre utilizzando una lista ti basta creare un solo elemento della lista.

    - Se intendi rispetto a riempirla manualmente, cambia qualcosa perché comunque è il programma a dover riempire la matrice, ma dubito che qualcuno sia in grado di notare la differenza.
    Se intendi differenza tra farla riempire al programma rispetto ad utilizzare un database, anche qui c'è differenza (è più efficiente in quanto a prestazioni utilizzare un database, essendo stati creati per situazioni del genere).
     
    Top
    .
  9. Dodiz
     
    .

    User deleted


    CITAZIONE (Alchimist @ 19/2/2014, 09:06) 
    CITAZIONE (Dodiz @ 18/2/2014, 20:25) 
    Grazie per gli accorgimenti ^^
    Inizierò a studiarmi l'SQL...
    ma vorrei chiederti il motivo riguardo allo sconsiglio della funzione empty(),
    dell'utilizzo della lista(solo il modo pratico xD),
    e per la matrice, cambia qualcosa al livello di prestazioni, ecc??

    Grazie per lo script, le funzioni che non conosco le sto appena vedendo ^_^

    - Lo sconsiglio della funzione 'empty()' è puramente relativo a questo caso, non è una considerazione assoluta.
    Innanzitutto se vuoi comprendere meglio il comportamento di entrambe le funzioni, sulla documentazione ufficiale sono spiegate entrambe abbastanza bene: empty(), isset().
    Spiegandolo in breve parole, la funzione 'isset()' controlla se una variabile è stata inizializzata (le è stato assegnato un valore) ed il suo valore è diverso da NULL. La funzione 'empty()' controlla anche che questo valore sia diverso da 0, 0.0, FALSE, "" (stringa vuota) e "0" (una stringa contenente il valore '0'). Siccome a te interessa se la variabile '$_GET['articles']' contiene un valore (non ti interessa se questo valore sia '0' o altro) è più logico utilizzate 'isset()'.
    Nota: Nel tuo caso funziona tutto in entrambi i modi, a parte il caso in cui tu scelga di iniziare a contare il numero degli articoli da '0' (ovvero il primo articolo scritto si trova in '0.php', il secondo in '1.php' e così via).

    - Beh, dal punto di vista pratico devi scrivere meno codice e risulta più ordinato
    Considera che usando una tabella devi creare una riga ed una colonna per ogni valore del menù, mentre utilizzando una lista ti basta creare un solo elemento della lista.

    - Se intendi rispetto a riempirla manualmente, cambia qualcosa perché comunque è il programma a dover riempire la matrice, ma dubito che qualcuno sia in grado di notare la differenza.
    Se intendi differenza tra farla riempire al programma rispetto ad utilizzare un database, anche qui c'è differenza (è più efficiente in quanto a prestazioni utilizzare un database, essendo stati creati per situazioni del genere).

    la differenza tra le funzioni la conoscevo, volevo sapere se oltre alla logica c'entra qualcosa al livello di compatibilità (browser?) e prestazioni
    stessa cosa, sempre la compatibilità xD
    e, grazie :woot:
     
    Top
    .
  10.  
    .
    Avatar

    Senior Member

    Group
    Staff
    Posts
    10,796

    Status
    Anonymous
    Se con compatibilità ti riferisci alle funzioni di PHP non devi preoccuparti, in quanto gira sul server e non sul browser. Se parli di codice lato client, lascio la parola ad Alchimist.

    Comunque tutto dipende dalla quantità di dati che devi gestire: se non sono tanti puoi gestirli anche con una matrice, in quanto non si noterebbe la differenza probabilmente. Ma se potrebbero essere tanti o crescere con il tempo, è meglio se usi già un db.
     
    Top
    .
  11. Alchimist
     
    .

    User deleted


    CITAZIONE (RootkitNeo @ 19/2/2014, 17:50) 
    Se con compatibilità ti riferisci alle funzioni di PHP non devi preoccuparti, in quanto gira sul server e non sul browser.

    ^ Quindi no, non c'è problema di compatibilità o robe simili.
    Nemmeno per quanto riguarda l'utilizzo di una lista al posto della tabella, in caso ti fosse venuto il dubbio.
     
    Top
    .
10 replies since 17/2/2014, 14:48   95 views
  Share  
.