Visualizzazione risultati 1 fino 6 di 6

Discussione: manipolare il primo risultato di un ciclo

  1. #1
    L'avatar di acsocmel
    acsocmel non è connesso Utente attivo
    Data registrazione
    03-07-2007
    Messaggi
    463

    Predefinito manipolare il primo risultato di un ciclo

    sto iniziando a usare php scopiazzando quà e là e accrocchiando codice
    nella mia pagina http://acsocmel.altervista.org/acs-risultati.php includo le pagine di un array poi faccio un ciclo e ottengo ul elenco di link
    se premo un link questo carica correttamente e si evidenzia
    ma non riesco ad evidenziare (assegnare la classe) al primo link perchè non ho passato alcun parametro
    come posso fare?

    il codice dell'include è
    Codice PHP:
    $s = $_GET['s'];
    $e = array('47', '46', '45', '44', '43', '42', '41', '40', '39', '38', '37',
    '36', '35', '34', '33', '32', '31', '30', '29', '28', '27', '26');
    if (!empty(
    $s)) {
    if(
    in_array($s,$e)) {
    $s .= '.php';
    include(
    "s/s".$s);
    }
    else {
    echo
    "<div class=\"norma sx\"><h6><span>Pagina non trovata.
    Torna all'</span><a href=\"acs-risultati.php\">indice</a></h6></div>"
    ;
    }
    }
    else {
    include(
    's/s47.php');
    }
    quello dei link è
    Codice PHP:
    foreach($e as $l) {
    $p = array_pop(explode('/', $_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING']));
    if (
    $p == "acs-risultati.php?s=".$l) {
    $cl = ' class="current"';
    } else {
    $cl = '';
    }
    echo
    "<li><a href=\"?s=".$l."\" title=\"stagione ".$l."\"{$cl}>".$l."</a></li>\n";
    }

  2. #2
    Guest

    Predefinito

    Mi sono permesso di pulire un po' il codice:
    Codice PHP:
    $s = (int) $_GET['s'];

    $e = array(
    '47', '46', '45', '44', '43', '42', '41', '40',
    '39', '38', '37', '36', '35', '34', '33', '32', '31', '30',
    '29', '28', '27', '26'
    );

    if (
    $s)
    {
    if (
    in_array($s, $e))
    {
    include(
    's/s' . $s . '.php');
    }
    else
    {
    echo
    '<div class="norma sx">
    <h6>
    <span>Pagina non trovata.</span>
    Torna all\'</span><a href="acs-risultati.php">indice</a>
    </h6>
    </div>'
    ;
    }
    }
    else
    {
    include(
    's/s47.php');
    }
    Codice PHP:
    foreach($e as $l)
    {
    $p = array_pop(explode('/', $_SERVER['PHP_SELF'] . '?' . $_SERVER['QUERY_STRING']));

    $cl = (($p == 'acs-risultati.php?s=' . $l) ^ (!$s && ($l == $e[0]))) ? ' class="current"' : '';

    echo
    '<li><a href="?s=' . $l . '" title="stagione ' . $l . '"' . $cl . '>' . $l . '</a></li>' . "\n";
    }
    Dovrebbe funzionare.

    Poi, il controllo che fai della pagina, non è meglio che lo fai con $s confrontandolo con il valore $l nell'array?

    Cioè così:
    Codice PHP:
    foreach($e as $l)
    {
    $cl = (($s == $l) ^ (!$s && ($l == $e[0]))) ? ' class="current"' : '';

    echo
    '<li><a href="?s=' . $l . '" title="stagione ' . $l . '"' . $cl . '>' . $l . '</a></li>' . "\n";
    }
    Ultima modifica di biccheddu : 18-01-2012 alle ore 15.40.19 Motivo: Correzione codice.

  3. #3
    L'avatar di acsocmel
    acsocmel non è connesso Utente attivo
    Data registrazione
    03-07-2007
    Messaggi
    463

    Predefinito

    sei stato gentilissimo, che bel codice pulito e funziona alla perfezione in entrambe le versioni
    ora passerò un bel po' di tempo a studiarmelo e a cercare di capire la tecnica, grazie

  4. #4
    Guest

    Predefinito

    Se hai dubbi, basta che lo dici e cercherò di spiegartelo nel modo più semplice e comprensibile possibile, magari tornerà utile a qualche altro utente.


  5. #5
    L'avatar di acsocmel
    acsocmel non è connesso Utente attivo
    Data registrazione
    03-07-2007
    Messaggi
    463

    Predefinito

    nel codice della classe ci sono 3 segni (come si chiamano, operatori?) e 2 apici vuoti
    ^ ? : ''
    che significano?

  6. #6
    Guest

    Predefinito

    • ^ è l'operatore XOR e restituisce true solo quando UNA delle condizioni è vera, nel tuo caso dice: "Se SOLO $s è uguale $l o SOLO se $s è valorizzato e $l è uguale al primo elemento dell'array $e".
    • ? e : è l'operatore ternario e si usa per sostituire un solo if ed else, nel tuo caso, al posto di fare "Se è vera questa condizione valorizza $c con questo altrimenti valorizza $c con quest'altro", dice "Se la condizione è vera, valorizza $c con il codice dopo ? se no con il codice dopo :.
      Codice PHP:
      $cl = (($p == 'acs-risultati.php?s=' . $l) ^ (!$s && ($l == $e[0]))) ? ' class="current"' : '';
      sostituisce
      Codice PHP:
      if ($p == 'acs-risultati.php?s=' . $l)
      {
      $cl = ' class="current"';
      }
      else
      {
      $cl = '';
      }
      Come puoi vedere la variabile viene scritta una sola volta nel primo caso (con l'operatore tertnario appunto) e questo rende più veloce l'esecuzioni dello script ed occupa meno memoria (ovviamente uno non cambia nulla, ma in un CMS, per esempio, fa la differenza).
    • I due apici ' e ' è come se fossero virgolette: " e ". Ti consiglio di usare gli apici al posto delle virgolette, perché come vedrai non dovrai fare l'escape delle virgolette (in compenso dovrai farlo degli apici ovviamente, ma è raro quando si fa un echo di html). Il discorso è molto più lungo e non posso farti una spiegazione dettagliata.


    Se hai altri dubbi, basta che lo dici.


Regole di scrittura

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