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

    preg_match con attributo class di un <img>

    stavo tentando di personalizzare una funzione che, a partire da un contenuto html, cerca le immagini e ritorna l'url completo della "prima" (che poi servirà a creare un thumbnail). praticamente vorrei catturare non la prima immagine ma l'immagine con class="copertina" tra gli attributi.

    praticamente il codice per ogni immagine del contenuto è questo:
    codice:
    dove dopo wp-image- il numero è variabile

    e dentro il contenuto c'è appunto un'immagine di quel tipo ma con class="alignnone.. copertina"

    la funzione originaria era questa:

    codice:
    function catch_that_image($child) {
      global $post, $posts;
      $first_img = '';
      ob_start();
      ob_end_clean();
      $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $child[0], $matches);
      $first_img = $matches [1] [0];
    
      if(empty($first_img)){ //Defines a default image
        $first_img = "/images/default.jpg";
      }
      return $first_img;
    }
    dove $child ha dentro un contenuto html con paragrafi, link, immagini..

    quindi sto cercando di modificare il preg_match_all in questo modo:

    codice:
    $output = preg_match_all('/<img *class=["]alignnone size-thumbnail wp-image-[0-9]* copertina["].+src=[\'"]([^\'"]+)[\'"].*>/i', $child[0], $matches);
    esempio:
    - il contenuto ha due immagini, una normale seguita da una con classe "copertina"
    - con il codice sopra, se stampo $first_img mi esce ancora l'url completo della prima immagine (non "copertina")
    - stampando $matches per vederne il contenuto mi esce una roba tipo:
    codice:
    Array
    (
        [0] => Array
            (
                [0] => </a> </p> 
            )
     
        [1] => Array
            (
                [0] => http://localhost/flautomagico/wp-con...02-150x150.jpg
            )
     
    )
    credo sia un errore nella sintassi dell'espressione regolare del preg_match (anche se non sono sicuro)

    qualcuno saprebbe aiutarmi?
    grazie (spero di essermi perlomeno spiegato bene)

  2. #2
    up

  3. #3
    Utente di HTML.it L'avatar di brodik
    Registrato dal
    Jan 2009
    Messaggi
    764
    non ho capito nulla... non puoi postare il testo html che hai e il pezzo da recuperare?
    eXvision

  4. #4
    ok, riporto il testo html di cui ho fatto l'esempio:

    codice:
    
    
    Se qualcuna delle mie povere parole / ti piace / e tu me lo dici / 
    sia pur solo con gli occhi […]
    </p> 
    
    
    Nel 1912 a Milano nasce Antonia Pozzi poetessa. In una città che non è più solo Milano, in un’epoca che potrebbe essere anche la nostra, cinque attrici svelano, violandola, la vita e l’opera della scrittrice: i loro corpi fra le farfalle, i suoni, le musiche, le voci, i gesti: simulacri della sua breve vita, delle sue parole, preziose di un’eleganza che è già presagio.</p> 
    
    
    
    <a class="highslide img_1" href="http://localhost/flautomagico/wp-content/uploads/2011/01/giovane_01.jpg" onclick="return hs.expand(this)">
    
    </a> 
    <a class="highslide img_2" href="http://localhost/flautomagico/wp-content/uploads/2011/01/giovane_02.jpg" onclick="return hs.expand(this)">
    
    </a>
    </p>
    io avrei bisogno di ricavare l'url dell'immagine con class="copertina"

    --

    alla funzione catch_that_image viene passato quel contenuto come argomento ($child)

    se può servire.. praticamente in una pagina ho questo:

    codice:
    while...
    $pContent = $pageChildren[$index]->post_content // funzione Wordpress che prende il contenuto del post
    $arr = array(0 => "$pContent");
    $cImg = catch_that_image($arr); // ottengo un url assoluto

  5. #5
    Utente di HTML.it L'avatar di brodik
    Registrato dal
    Jan 2009
    Messaggi
    764
    codice:
    <img.*?class\s*=(("|')?.*?copertina.*?("|'))?(.*?)src\s*=(("|')?(.*?)("|'))?(.*?)>
    l'url la ritorvi al [7]
    eXvision

  6. #6
    oh perfetto, grazie!

    ho dovuto mettere (") al posto di ("|') perché la virgoletta singola nell'espressione interferisce con la virgoletta di preg_match_all('

    per farlo andare comunque come lo hai scritto dovrei mettere ("|\') ?

    anche solo con (") va comunque

  7. #7
    Utente di HTML.it L'avatar di brodik
    Registrato dal
    Jan 2009
    Messaggi
    764
    esatto... fai l'escape del carattere... non ci avevo fatto caso
    eXvision

  8. #8
    più che altro ho notato che su altri contenuti mi fa vedere sempre la prima immagine (in sostanza il contenuto varia a seconda dell'articolo, che non è sempre composto da 2 sole immagini)

    facendo un print_r con $matches, in certi contenuti l'url che mi interessa non è in posizione $matches [7] [0], ma magari in 7/3 ..

    eppure c'è sempre una sola immagine con class="... copertina"

    sbaglio sul $matches?

  9. #9
    Utente di HTML.it L'avatar di brodik
    Registrato dal
    Jan 2009
    Messaggi
    764
    codice:
    <pre>
    <?php
    $a = <<<EOF
    
    
    
    Se qualcuna delle mie povere parole / ti piace / e tu me lo dici / 
    sia pur solo con gli occhi […]
    </p> 
    
    
    Nel 1912 a Milano nasce Antonia Pozzi poetessa. In una città che non è più solo Milano, in un’epoca che potrebbe essere anche la nostra, cinque attrici svelano, violandola, la vita e l’opera della scrittrice: i loro corpi fra le farfalle, i suoni, le musiche, le voci, i gesti: simulacri della sua breve vita, delle sue parole, preziose di un’eleganza che è già presagio.</p> 
    
    
    
    <a class="highslide img_1" href="http://localhost/flautomagico/wp-content/uploads/2011/01/giovane_01.jpg" onclick="return hs.expand(this)">
    
    </a> 
    <a class="highslide img_2" href="http://localhost/flautomagico/wp-content/uploads/2011/01/giovane_02.jpg" onclick="return hs.expand(this)">
    
    </a>
    </p>
    EOF;
    
    preg_match_all("#<img.*?class\s*=((\"|')+.*?(copertina)+.*?(\"|'))+(.*?)src\s*=((\"|')+(.*?)(\"|'))+(.*?)>#i", $a, $matches);
    
    print_r($matches);
    
    ?>
    </pre>
    ecco qua... prova ora... (lo trovi in [8])

    risultato
    codice:
    Array
    (
        [0] => Array
            (
                [0] => 
            )
    
        [1] => Array
            (
                [0] => "alignnone size-thumbnail wp-image-110 copertina"
            )
    
        [2] => Array
            (
                [0] => "
            )
    
        [3] => Array
            (
                [0] => copertina
            )
    
        [4] => Array
            (
                [0] => "
            )
    
        [5] => Array
            (
                [0] =>  title="giovane_01" 
            )
    
        [6] => Array
            (
                [0] => "http://localhost/flautomagico/wp-content/uploads/2011/01/giovane_01-150x150.jpg"
            )
    
        [7] => Array
            (
                [0] => "
            )
    
        [8] => Array
            (
                [0] => http://localhost/flautomagico/wp-con...01-150x150.jpg
            )
    
        [9] => Array
            (
                [0] => "
            )
    
        [10] => Array
            (
                [0] =>  alt="" width="150" height="150" /
            )
    
    )
    eXvision

  10. #10
    ok ora funziona alla perfezione (apparentemente)
    ti ringrazio molto, con calma decifro l'espressione regolare che hai usato così imparo bene

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 © 2024 vBulletin Solutions, Inc. All rights reserved.