Joomla! България
Joomla! - Общи теми => Компоненти => VirtueMart => Темата е започната от: ex3mist в 29 Август, 2014, 10:18:50
-
Здравейте,
Искам да питам някой има ли решение на въпроса за това как да се изтрият снимките на продукти, които са изтрити от магазина? За съжаление, когато един продукт бъде изтрит, снимките му остават в папките /images/stories/virtuemart/product/ и /images/stories/virtuemart/product/resized/. Искам да разчистя малко директориите и да освободя място като изтрия тези снимки, които не са използвани, а проверяването на всяка поотделно дали е използвана или не не е решение, тъй като са няколко хиляди.
Намерих тази тема: http://forum.virtuemart.net/index.php?topic=73290, но решението е за VM1, на мен ми трябва за VM2. Опитах описаното там, като промених пътя до папките в скрипта, но не работи.
Може ли някой да помогне?
-
Влизай в меню медия на марта и трий снимките.
Внимавай да не махнеш някоя актуална снимка!
-
Пак съм на тази вълна да търся начин да разчистя излишните файлове... Това да влезна в директорията и да избирам коя снимка да изтрия и коя не не става, много са - сигурно има към 10 000, че и повече. Не мога да ги проверявам една по една коя се използва и коя не. Нещо автоматизирано ми трябва...
-
Най-после намерих решение на този въпрос! Посочено е, че работи за VM2 и VM3, аз го използвах само за VM2. Поствам го в случай, че и някой друг се интересува:
Създавате си файл (somefile.php например) със следния код:
<?php
$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";
?>
Качвате го в папката на темплейта, който използвате: /templates/YOURTEMPLATE/somefile.php
И го активирате като зададете в браузъра този адрес: http://yoursite.com/templates/yourtemplate/somefile.php
И получавате съобщение колко снимки и тумбнейли са били изтрити. При мен свърши работа, но все пак не забравяйте да направите бекъп преди това!
-
+
Полезно!!!
-
ето решение за тези които им е нужна подобна функция http://shop.st42.fr/en/products/virtuemart-media-folder-clear.htm