• User Attivo

    @giuggiola said:

    Grandissimo @Borja! :figo2:
    Ho commentato la parte che hai indicato, impostato max_execution_time a 10000 (esagerata lo so :bigsmile:, ma 1000 non era abbastanza!) e la sitemap immagini è stata generata!

    Grazie davvero, ottimo script! :gtlove:

    Ohhhhh che bello !
    Sono veramente contento che funzioni anche con siti web più grandi del mio.

    Mi auguro la guida possa servire per moltissimi altri utenti 🙂

    Per ora i primi ad averla utilizzata dovremmo essere io e te :figo2:

    Saluti !


  • Community Manager

    Borja che hai delle modifiche che vuoi apportare al file oppure vuoi darmi più versioni: fallo! 🙂


  • User Attivo

    @Giorgiotave said:

    Borja che hai delle modifiche che vuoi apportare al file oppure vuoi darmi più versioni: fallo! 🙂

    Non ti volevo inviare l'ennesima mail :bho:
    Comunque ti ho appena inviato il nuovo pacchetto zip con i file corretti.

    Ora la modifica effettuata da @giuggiola non sarà più necessaria.
    La guida funzionerà semplicemente realizzando ciò che ho scritto nel mio primo post.


  • Community Manager

    Ma figurati! Ho aggiornato, è quello corretto?


  • User Attivo

    Yess


  • User

    Ciao Borja,
    grazie per il tuo utilissimo script che ho appena implementato sul mio e-commerce in Prestashop 1.7.
    Prestashop ha da sempre un grande problema per la sitemap di immagini, il tuo script permette di risolvere in parte la problematica.

    Ho fatto delle piccole modifiche per fare in modo che la sitemap riportasse solo le immagini dei prodotti thickbox_default che ho settato a 1200px di larghezza non considerando tutte le immagini più piccole.
    Praticamente seguendo le tue indicazioni ho puntato lo script verso le immagini con classe "img-fluid" presenti nel div con id=product-images-large. Per far ciò ho dovuto cambiare "src" con "data-image-large-src".
    Inoltre ho aggiunto l'attributo caption alla sitemap.

    Premetto che sono un semplice "smanettone" e non sò programmare ma lo script sembra girare. Il codice foreach dopo le modifiche è questo:

    //ciclo e cerco i tag img (se volete fare qualche modifica andate alle ultime righe del file)if($doc-> find("div[id='product-images-large']",0)){
    	foreach($doc-> getElementById('product-images-large')-> find("img[class='img-fluid']") as $item){
    		$src =  $item->getAttribute('data-image-large-src');	//estrapolo l'attributo 'src' del tag 'img' (sarebbe l'url dell'immagine)
    		$title= $item->getAttribute('title');	//estrapolo l'attributo 'title' del tag 'img'
    		$caption= $item->getAttribute('alt');	//estrapolo l'attributo 'caption' del tag 'img'
    		
    		/*
    		se si tratta di un "path relativo" allora il primo carattere sarà "/" 
    		in questo caso però dobbiamo dare alla sitemap-immagini il path assoluto dell'immagine
    		*/
    		if(strpos($src,"/") == 0){
    			$src= $homepage.$src;	//uniamo link della homepage e path relativo 
    		}
    		
    		if($title != ""){ //se il tag 'img' possiede un title creo l'elemento xml
    			$title_element= '<image:title>'.$title.'</image:title>';
    		}
    		else{ //altrimenti nessun elemento title xml 
    			$title_element= '';
    		}
    		
    		if($caption != ""){ //se il tag 'img' possiede un alt creo l'elemento xml
    			$caption_element= '<image:caption>'.$caption.'</image:caption>';
    		}
    		else{ //altrimenti nessun elemento alt xml 
    			$caption_element= '';
    		}
    		
    		//creo la struttura xml per ogni singola immagine estrapolata dalla pagina
    		$element_image=	$element_image.'<image:image><image:loc>'.$src.'</image:loc>'.$title_element.' '.$caption_element.'</image:image>';
    	}
    }	
    
    
    
    

    Grazie ancora.


  • User Attivo

    Ciao GMD sono contento tu l'abbia trovato utile.
    In fin dei conti il mio script è abbastanza generico però può essere adattato a seconda delle varie esigenze (ad esempio nel mio caso considero solo le immagini che abbiano determinate classi).

    Comunque in merito a ciò che hai scritto ho solo due perplessità:

    1. hai modificato "src" con "data-image-large-src" ma quale sarebbe il valore presente nel tuo attributo **data-image-large-src ? **(mi auguro sia il percorso in cui è presente l'immagine)

    2. Nel codice che hai postato ho notato che la tua prima linea di codice si trova sulla stessa linea commentata (devono essere linee diverse altrimenti non funziona)...


  • User

    Ciao a seguire le risposte:

    1. si è un link all'immagine prodotto che mi interessa;
    2. si sta sotto il copia incolla su mi è venuto male scusami.

  • User Attivo

    @GMD said:

    Ciao a seguire le risposte:

    1. si è un link all'immagine prodotto che mi interessa;
    2. si sta sotto il copia incolla su mi è venuto male scusami.

    No figurati volevo solo assicurarmi che funzionasse tutto completamente 🙂
    E' stato molto a creare la sitemap immagini ?

    Come ti sei trovato ? 🙂


  • User

    Guarda per il momento ho provato solo sui primi 50 link.
    O migliaia di prodotti e non voglio sovraccaricare il server durante il giorno (rischio di creare rallentamenti sul front e per un ecommerce non è mai il massimo).
    Ho settato un cron Domenica notte, ti aggiorno.


  • User Attivo

    Puoi eseguire tutto in locale sul browser.
    Io cosi ho fatto.


  • Community Manager

    Forte! Aggiornarci.

    Borja potrebbemmo fare più script eh! Se me li mandi modificati io li metto tutti 😄


  • User Attivo

    @Giorgiotave said:

    Forte! Aggiornarci.

    Borja potrebbemmo fare più script eh! Se me li mandi modificati io li metto tutti 😄

    :eheh: è impossibile prevedere ogni situazione quindi chi vuole adattare lo script al proprio progetto (magari escludendo certe immagini o robe simili) e non sà smanettare con PHP può chiedere aiuto qui.
    Giorgio se poi invece hai in mente altri script per diverse progetti in grado di migliorare il posizionamento di un sito, evitando onerosi abbonamenti, dimmi pure e vediamo che si può fare :fumato:


  • Community Manager

    A me piacerebbe trasformare questi script, in futuro, in tool gratuiti che il forum offre...è il mio sogno. Ho una serie di tool che mi piacerebbe dare ai webmaster.

    Al massimo possiamo mettere un abbonamento da 1-2€ al mese per pagare il server, ma una cosa simbolica!


  • User Attivo

    Eh sarebbe una bella idea !


  • User

    Salve,
    aggiorno la discussione.
    Tutto regolare il cron-job ha funzionato regolarmnte, 878 Kb di sitemap in 15417 righe generate in 4 minuti e 40 secondi notte senza problemi.
    Benissimo direi.

    Per seguire l'indicazione di Giorgiotave potresti impostare lo script in modo tale che per ogni CMS va a selezionare un div ben preciso. Più che altro cercare il div per ogni CMS sarebbe la scocciatura.

    Grazie di tutto Borja, darò subito in pasto a search console la mia nuova sitemap.
    Buona giornata.


  • User Attivo

    Ciao @GMD sono contento abbia funzionato alla grande anche nel tuo caso!
    Nel tempo questo script diventerà per molti utenti una MANNA DAL CIELO 😄

    Comunque cio’ che consigli non e’ fattibile e ti spiego il perché...
    Ogni cms può variare anche a seconda delle singole versioni e inoltre gli utenti dovrebbero comunque smanettare (ancora di piu’) agendo sul codice in piu’ punti.

    Meglio uno script generico come questo 😉
    E finché ci sono (tocco ferro) daro’ una mano a tutti.

    Saluti


    G 1 Risposta
  • User

    @borja buongiorno.
    Purtroppo da un paio di settimane senza che io toccassi nulla lo script ha cominciato a fornire errore 500 😞 e non funziona più. Peccato perchè stava andando alla grande


    B 1 Risposta
  • User Attivo

    @gmd ho provato di nuovo il codice e nonostante esca sempre errore 504 comunque la sitemap viene generata in maniera corretta.
    In realtà il codice aveva generato la sitemap anche nel primo tentativo.

    Quindi il codice funziona ma non capisco perchè mi da quell'errore....


  • User Attivo

    Riporto una risposta di stackoverflow in merito alla questione 504:
    "Il 504 viene inviato dal server se si raggiunge il tempo massimo di esecuzione (in Apache il valore predefinito è di 30 secondi). Tuttavia, lo script viene ancora eseguito in background: interrompe semplicemente l'invio di dati al client.."

    Quindi il codice continua a lavorare e infatti la sitemap la crea.
    Il perchè ora esce il 504 e prima no mi è oscuro. 😄 l'importante che funzioni