• User Attivo

    Uso di funzioni in here document?!

    Ciao,
    volevo chiedere se era possibile chiamare una funzione all'interno di here document.

    Per fare un esempio:

    
    print <<<END
    Ecco, qui dentro volevo richiamare una funzione tipo
    nome_funzione ();
    ma chiaramente me lo stampa come fosse testo. C'è una sintassi
    precisa oppure non si può proprio?
    END;
    

    Ciao e grazie a tutti!
    :ciauz:


  • User

    @Rammo said:

    Ciao,
    volevo chiedere se era possibile chiamare una funzione all'interno di here document.

    Per fare un esempio:

    >
    print <<<END
    Ecco, qui dentro volevo richiamare una funzione tipo
    nome_funzione ();
    ma chiaramente me lo stampa come fosse testo. C'è una sintassi
    precisa oppure non si può proprio?
    END;
    >```Ciao e grazie a tutti!
    :ciauz:
    
    Non si può. Ti conviene modificare un po' il codice e fare
    echo("Testo prima ".nome_funzione()."Testo dopo");

  • User Attivo

    Il problema è che devo stampare un blocco di codice html, non solo del semplice testo. Dentro il blocco di codice andrebbe richiamata la funzione...
    ...come potrei fare? :mmm:


  • User

    @Rammo said:

    Il problema è che devo stampare un blocco di codice html, non solo del semplice testo. Dentro il blocco di codice andrebbe richiamata la funzione...
    ...come potrei fare? :mmm:

    Allora scrivi l'html normale e dove vuoi stampare il testo ritornato dalla funzione metti:

    <body>blublu<br /><p>blabla <?= nome_funzione(); ?> blibli</p>


  • User Attivo

    Il blocco di codice è già dentro una funzione 🙂

    Nel blocco di codice dentro la funzione dovrei richiamare un'altra funzione e non volevo usare "print" per ogni riga da stampare

    print "<td>blablabla</td>";
    print "bla bla bla";
    ...etc.

    Avevo pensato per quello di includere il blocco di codice nell' here document e poi da quello richiamare l'altra funzione...


  • User

    @Rammo said:

    Il blocco di codice è già dentro una funzione 🙂

    Nel blocco di codice dentro la funzione dovrei richiamare un'altra funzione e non volevo usare "print" per ogni riga da stampare

    print "<td>blablabla</td>";
    print "bla bla bla";
    ...etc.

    Avevo pensato per quello di includere il blocco di codice nell' here document e poi da quello richiamare l'altra funzione...

    Allora forse, anzi, sicuramente, non ho capito. Se mi scrivi un po' di più codice, forse posso aiutarti.


  • User Attivo

    Questa è la funzione che stampa il primo pezzo di codice della pagina .php:

    
    function head_della_pagina() {
     
    print <<<HTMLBLOCK
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     <head>
            <title>Titolo della pagina</title>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
      <link rel="StyleSheet" media="all" href="stile.css" type="text/css">
     </head>
    <body>
    <div id="box">
    nome_funzione ();
    <div id="box2"></div>
    ...etc. etc.
     
    HTMLBLOCK;
     
    }
    

    Dentro al primo pezzo di codice della pagina .php dovrà essere chiamata un'altra funzione ( nome_funzione () ) che chiaramente così non funziona, in quanto stampa direttamente la parola nome_funzione ();
    Speravo ci fosse una sintassi particolare per richiamare le funzioni all'interno di here document invece mi prospetti che non è così 😞 ahimè

    Come potrei fare per richiamare questa funzione?

    Avevo pensato di spezzare l'here document in 2 e lasciare la chiamata alla funzione fuori, in modo che possa funzionare.

    
    function head_della_pagina() {
     
    print <<<HTMLBLOCK
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     <head>
            <title>Titolo della pagina</title>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
      <link rel="StyleSheet" media="all" href="stile.css" type="text/css">
     </head>
    <body>
    <div id="box">
    HTMLBLOCK;
     
    nome_funzione ();
     
    print <<<HTMLBLOCK2
     
    <div id="box2"></div>
    ...etc. etc.
     
    HTMLBLOCK2;
     
    }
    

    Così funziona, ma mi scocciava interrompere l'here document ogni volta per richiamare una funzione... non c'è altro modo? :mmm:

    Ciao e grazie per ora,
    Rammo.


  • User

    @Rammo said:

    Questa è la funzione che stampa il primo pezzo di codice della pagina .php:

    >
    function head_della_pagina() {
     
    print <<<HTMLBLOCK
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     <head>
            <title>Titolo della pagina</title>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
      <link rel="StyleSheet" media="all" href="stile.css" type="text/css">
     </head>
    <body>
    <div id="box">
    nome_funzione ();
    <div id="box2"></div>
    ...etc. etc.
     
    HTMLBLOCK;
     
    }
    >```Dentro al primo pezzo di codice della pagina .php dovrà essere chiamata un'altra funzione ( nome_funzione () ) che chiaramente così non funziona, in quanto stampa direttamente la parola nome_funzione ();
    Speravo ci fosse una sintassi particolare per richiamare le funzioni all'interno di here document invece mi prospetti che non è così :( ahimè
     
    Come potrei fare per richiamare questa funzione?
     
    Avevo pensato di spezzare l'here document in 2 e lasciare la chiamata alla funzione fuori, in modo che possa funzionare.
     
    

    function head_della_pagina() {

    print <<<HTMLBLOCK

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <head>
    <title>Titolo della pagina</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <link rel="StyleSheet" media="all" href="stile.css" type="text/css">
    </head>
    <body>
    <div id="box">
    HTMLBLOCK;

    nome_funzione ();

    print <<<HTMLBLOCK2

    <div id="box2"></div>
    ...etc. etc.

    HTMLBLOCK2;

    }

    Ciao e grazie per ora,
    Rammo.

    Se non vuoi usare altri metodi (io ti sconsiglio quella soluzione), non ci sono altri metodi. L'unica è interrompere il blocco, chiamare la funzione e riaprirlo come hai fatto tu.


  • User Attivo

    Scusami, quale soluzione mi sconsiglieresti?


  • User

    @Rammo said:

    Scusami, quale soluzione mi sconsiglieresti?

    Chiudi il tag php "?>", scrivi l'html puro e riapri il tag "<?php" solo quando necessario. Meglio evitare di mescolare codice php e html con funzioni come echo e print.

    Magari dai un'occhiata a Smarty, che in questi casi è utilissimo. Separi il codice senza nessun problema dall'html.


  • User Attivo

    Smarty? Non ne ho mai sentito parlare..
    ..è un programma che separa il codice php dall'html? Lo provo subito! 🙂

    E se associassi la funzione ad una variabile che poi richiamo nell'here document?


  • User

    @Rammo said:

    Smarty? Non ne ho mai sentito parlare..
    ..è un programma che separa il codice php dall'html? Lo provo subito! 🙂

    E se associassi la funzione ad una variabile che poi richiamo nell'here document?

    here domcument non parsa in nessun modo nè variabili nè funzioni. Devi comunque chiudere coi delimitatori e riaprire per eseguire script php.

    Smarty è una bomba se lo si impara ad usare da subito e bene. Serve proprio nelle aziende a far collaborare grafici e programmatori senza che nessuno dei due sappia cosa fa l'altro (o quasi).


  • User Attivo

    here domcument non parsa in nessun modo nè variabili nè funzioni. Devi comunque chiudere coi delimitatori e riaprire per eseguire script php.

    Sbagliato 🙂
    Le variabili si possono usare tranquillamente 🙂

    Smarty è una bomba se lo si impara ad usare da subito e bene. Serve proprio nelle aziende a far collaborare grafici e programmatori senza che nessuno dei due sappia cosa fa l'altro (o quasi).

    Bello, lo provo subito!