Come in Virtualmart eliminare immagini di prodotti cancellati

Se lavorate spesso con i prodotti in Virtuemart 2 o 3 , allora probabilmente sapete che dopo l'eliminazione del prodotto  l'immagine del ultimo non viene rimossa dal sito, che a sua volta porta spesso a riempire sito di elementi inutilizzati. Quindi vediamo una delle soluzioni come ripullire il nostro sito da immagini di prodotti cancelati

Quindi in qualche maniera dovrei eliminare quelli che non si usano piu o quelli che non sono stati attribuiti a nessun prodotto nel mio negozio virtuale, insomma non importa della causa , vorrei semplicemente offrivi uno script che rimuove queste immagini:

<?
$type = 'product'; // type of image: "product" or "category"
$imgPath = $_SERVER['DOCUMENT_ROOT']."/images/stories/virtuemart/$type/"; // default path to full-sized images
$resizedPath = $_SERVER['DOCUMENT_ROOT']."/images/stories/virtuemart/$type/resized/"; // default path to thumbnail images
set_time_limit(0);
require $_SERVER['DOCUMENT_ROOT'].'/configuration.php';
$conf = new JConfig;
$db = new mysqli($conf->host, $conf->user, $conf->password, $conf->db);
$images = array_slice(scandir($imgPath), 2);
$resized = array_slice(scandir($resizedPath), 2);
$query="SELECT
virtuemart_media_id,
file_url,
file_url_thumb
FROM {$conf->dbprefix}virtuemart_medias
WHERE virtuemart_media_id IN(SELECT DISTINCT virtuemart_media_id FROM {$conf->dbprefix}virtuemart_{$type}_medias)";
$res = $db->query($query);
if (!$res) die("Cannot get database resource!");
while($r = $res->fetch_array()){
    $activeID[] = $r[0];
    $p = pathinfo($r[1]);
    $activeImg[] = $p['basename'];
    $p = pathinfo($r[2]);
    $activeResized[] = $p['basename'];
}   
if (!is_null($activeImg)){
    $notActiveImg = array_diff($images, $activeImg);
};
if (!is_null($activeResized)){
    $notActiveResized = array_diff($resized, $activeResized);
}
if (!is_null($activeID)){
    $db->query("DELETE FROM {$conf->dbprefix}virtuemart_medias WHERE file_type='$type' AND virtuemart_media_id NOT IN(".implode(',', $activeID).")");
}
$db->close();
$full=0;
$thumb=0;
if (!is_null($activeImg)){
    foreach($notActiveImg as $i){
        if(is_file($imgPath.$i) && $i != 'index.html'){
            if (unlink($imgPath.$i)) $full++; else echo "Cannot delete $imgPath$i<br>";
        } else "File not exists $imgPath.$i<br>";
    }
}
if (!is_null($activeResized)){
    foreach($notActiveResized as $i){
        if(is_file($resizedPath.$i)  && $i != 'index.html'){
            if (unlink($resizedPath.$i)) $thumb++; else echo "Cannot delete $imgPath$i<br>";
        } else "File not exists $imgPath.$i<br>";
    }
}
if ($full>0) echo "Deleted $full full-sized images<br>";
if ($thumb>0) echo "Deleted $thumb thumbnail images<br>";
if ($full==0 && $thumb==0) echo "Nothing to delete";
?> 

Dovremo creare un documento nel Blocco note  di windows o nel notepad++ inserirci il codice e darli un nome per esempio imgremov salvarlo con estensione .php
Copiare questo nostro fail imgremov.php al interno della nostra cartella de sito joomla con virtuemart sul server. E richiamarlo dal browser digitando www.miosito.it/imgremov.php sostituendo oviamente il nome miosito.it con il nome del vostro sito.

Posiamo anche vedere quanti fail sono stati eliminati. Ovio se avete salvato i vostri immagini di prodotti in una cartella diversa dalle impostazioni predefinite di virtuemart allora dovrete modificare il codice. E vorrei ricordare che prima di fare questa operazione e sempre utile fare una copia del sito in modo da poter recuperare qualche immagine che voreste magari utilizzare nel futuro. Potrebbe succedere che lo script si pianterà lavorando con una data base di prodotti di grandi dimensioni  allora dovrete  aumentare soltanto le impostazioni di azione di php dal 30 secondi a 15 minuti per esempio. Sostituendo variabile $type nella prima riga posiamo elliminare anche immagini appartenenti alle categorie del prodotti.

Letto 1123 volte

corso CSS pratica

Impara HTML e CSS da zero al risulto!

Da piccolo hai imparato leggere leggendo libri. E con aiuto del nostro corso imparerai CSS e HTML costruendo un sito web da un templat in PSD .

Scopri il corso