Visualizzazione risultati 1 fino 4 di 4

Discussione: Eseguire un include se la condizione è vera dentro una stringa

  1. #1
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito Eseguire un include se la condizione è vera dentro una stringa

    Salve raga!
    Volevo apportare una modifica alla sign del mio forum per includere una stringa dinamica invece dell'immagine che ho attualmente.
    Per fare questo, con le mie modestissime conoscenze di php, avevo pensato di modificare questo pezzo di codice:
    Codice PHP:
    // Show the member's signature?
    if (!empty($message['member']['signature']) && empty($options['show_no_signatures']))
    echo
    '
    <hr width="100%" size="1" class="hrcolor" />
    <div class="signature">'
    , $message['member']['signature'], '</div>';
    in qualcosa di simile:
    Codice PHP:
    // Show the member's signature?
    if ($context['user']['is_admin']) //Poi lo cambierò usando l'id utente
    $ransign = include ('citazioni.php'); //questo ovviamente non funziona
    else
    $ransign = '';
    if (!empty(
    $message['member']['signature']) && empty($options['show_no_signatures']))
    echo
    '
    <hr width="100%" size="1" class="hrcolor" />
    <div class="signature">'
    , $message['member']['signature'], '', $ransign, '</div>';
    Però funziona bene nel caso inserisca "testo"
    Codice PHP:
    $ransign = 'questa è la mia sign';
    non va invece usando l'include. Come posso rimediare?
    -
    PS: non sono certo il titolo sia corretto all'argomento
    -
    Risolto:
    Codice PHP:
    // Show the member's signature?
    if (!empty($message['member']['signature']) && empty($options['show_no_signatures'])) {
    if ((
    $message['member']['username'] == 'DarkWolf')) {
    ob_start();
    include(
    'citazioni.php');
    $ransign_str = ob_get_contents();
    $ransignature = '<br /><em>' . $ransign_str . '</em>';
    ob_end_clean();
    }else{
    $ransignature = '';}
    echo
    '
    <hr width="100%" size="1" class="hrcolor" />
    <div class="signature">'
    , $message['member']['signature'], '', $ransignature, '</div>';}
    Se ritenete sia da migliorare vi chiedo di farmelo sapere, grazie :)
    Ultima modifica di darkwolf : 17-04-2009 alle ore 18.37.17 Motivo: Risolto..

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

    Predefinito

    Dalla guida di include():
    Handling Returns: It is possible to execute a return() statement inside an included file in order to terminate processing in that file and return to the script which called it. Also, it's possible to return values from included files. You can take the value of the include call as you would a normal function. [...]

    Because include() is a special language construct, parentheses are not needed around its argument. Take care when comparing return value.
    Quindi:
    • il file che include deve avere un return $stringa che restituisce ciò che vuoi mettere nella variabile
    • ocio se usi la sintassi senza parentesi (vedi esempio 4 sulla guida)


    citazioni.php
    Codice PHP:
    <?php
    $frasi
    = array(
    'Tanto va la gatta al lardo...',
    'Rosso di sera bel tempo si spera',
    );

    return
    array_rand($frasi);
    ?>
    Codice PHP:
    // Show the member's signature?
    if ($context['user']['is_admin'])
    $ransign = include('citazioni.php'); //questo in teoria ora funziona
    else
    $ransign = '';
    Ultima modifica di dreadnaut : 17-04-2009 alle ore 17.24.49 Motivo: + esempio + correzione

  3. #3
    Guest

    Predefinito

    Non so quale sia il contenuto di citazioni.php, ma dovresti modificarlo in modo che ci sia una funzione che ritorna una citazione a caso.
    Fai l'include di citazioni.php (anche all'inizio del codice), e poi sostituisci
    Codice PHP:
    ob_start();
    include(
    $filename);
    $ransign_str = ob_get_contents();
    $ransignature = '<br /><em>' . $ransign_str . '</em>';
    ob_end_clean();
    con
    Codice PHP:
    $ransign_str = getRanSign();
    dove getRanSign è il nome della funzione che si trova in citazioni.php, e che torna la citazione scelta a caso.

  4. #4
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito

    Grazie a entrambi per la spiegazione mo provo a modificare il tutto seguendo le vostre indicazioni
    -
    Edit: sto leggendo il riferimento del punto 4 ma non mi è ben chiaro il problema
    -
    Riedit: ho seguito le tue indicazioni dreadnaut (editando anche il file citazioni.php) ma stampa semplicemente un 1
    Rimettendolo così (pur mantenendo le modifiche al file citazioni.php)
    Codice PHP:
    if (($message['member']['username'] == 'DarkWolf')) {
    ob_start();
    include(
    'citazioni.php');
    $ransign_str = ob_get_contents();
    $ransignature = '<br /><em>' . $ransign_str . '</em>';
    ob_end_clean();
    }else{
    $ransignature = '';}
    Funziona perfettamente
    -
    PS: prima il file citazioni era così:
    Codice PHP:
    <?php

    $frase
    [0] = "frase1";

    $max = count($frase)-1;
    mt_srand((double)microtime()*1000000);
    $random = mt_rand(0,$max);
    $string = $frase[$random];

    echo
    "$string";

    ?>
    adesso è così:
    Codice PHP:
    <?php
    $frasi
    = array(
    "frase1.",
    );

    return
    array_rand($frasi);
    ?>
    Quindi è decisamente migliorato :)
    -
    Visto che ci sono vorrei chiederti:
    Ho applicato l'array anche per lo script che generava l'immagine dinamica ma senza alcun risultato, questo lo script originale:
    Codice PHP:
    <?php
    header
    ("content-type: image/png");

    $col = $_GET[bg];
    if(!
    $col){
    $col = "48:48:48";
    }
    $col=explode(":",$col);

    //$date=date ("d/m/y H:i:s -");

    $frase[0] = " frase1 ";

    $max = count($frase)-1;
    mt_srand((double)microtime()*1000000);
    $random = mt_rand(0,$max);
    $string = $frase[$random];
    $font_size = 2;
    $width=imagefontwidth($font_size)*strlen($string);
    $height=imagefontheight($font_size)*2;
    $img = imagecreate($width,$height);
    $bg = imagecolorallocate($img, $col[0], $col[1], $col[2]);
    $black = imagecolorallocate($img,170,170,170);
    imagestring ($img,$font_size,0,$height/4,$string,$black);
    imagepng($img);
    imagedestroy($img);
    ?>
    Il metodo dell'array mi farebbe comodo.
    Ultima modifica di darkwolf : 17-04-2009 alle ore 19.53.08

Regole di scrittura

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