0 Пользователей и 1 Гость просматривают эту тему.
  • 7 Ответов
  • 3236 Просмотров
*

SolopoV

  • Давно я тут
  • 573
  • 16 / 0
  • зеленею...
На просторах Интернет для Virtuemart2 нашел скрипт для удаления картинок товаров, которые (товары) удалены через админку. Вирт не удаляет файлы изображений, и этот скрипт может кому то и пригодится.

Подскажите пожалуйста, как поправить это скрипт для работы в Virtuemart3 (+Joomla3).

Заранее благодарен.

Вот код:

Код
<?php $type = 'product'; 
$imgPath = $_SERVER['DOCUMENT_ROOT'].'/images/stories/virtuemart/product/';
$resizedPath = $_SERVER['DOCUMENT_ROOT'].'/images/stories/virtuemart/product/resized/';
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);
 
$res = $db->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)");
             
var_dump($res); die;
             
while($r = $res->fetch_array()){
    $activeID[] = $r[0];
     
    $p = pathinfo($r[1]);
    $activeImg[] = $p['basename'];
     
    $p = pathinfo($r[2]);
    $activeResized[] = $p['basename'];
}     
 
$notActiveImg = array_diff($images, $activeImg);
$notActiveResized = array_diff($resized, $activeResized);
 
$db->query("DELETE FROM {$conf->dbprefix}virtuemart_medias WHERE file_type='$type' AND virtuemart_media_id NOT IN(".implode(',', $activeID).")");
$db->close();
 
foreach($notActiveImg as $i){
    if(is_file($imgPath.$i) && $i != 'index.html')
        unlink($imgPath.$i);
}
foreach($notActiveResized as $i){
    if(is_file($resizedPath.$i)  && $i != 'index.html')
        unlink($resizedPath.$i);
}
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
*

bgg87

  • Захожу иногда
  • 164
  • 2 / 0
  • Истина где-то рядом...
Подскажите пожалуйста, как поправить это скрипт для работы в Virtuemart3 (+Joomla3).
Добрый день!
Удалось ли решить вопрос?
*

bgg87

  • Захожу иногда
  • 164
  • 2 / 0
  • Истина где-то рядом...
Неужели на всем белом свете нет путного решения?
Я как то пробовал вычислять из БД, путем сравнения таблиц товаров и медиа, потом после получения списка неиспользуемых фото запускал скрипт удаления картинок по списку, но весь это процесс не из быстрых. 
Тогда нужно было 15тыс товаров проверить, фоток соответственно скопилось раза в 3 больше. Раз в год конечно можно, но все равно это не дело и хочется человеческое решение вопроса :)
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
Можно конечно написать разумное решение..
Если интересно пишите в личку.
*

One

  • Захожу иногда
  • 282
  • 3 / 0
Создаем файл php, закидываем туда скрипт. Файл отправляем в корень сайта и запускаем через строку url
Скрипт годен для 3-й версий
Код
<?
$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";
?>
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Выгрузка товаров в Яндекс.Маркет для VirtueMart 3.x, VirtueMart 4

Автор icom

Ответов: 791
Просмотров: 131059
Последний ответ 03.07.2023, 10:02:04
от strongest
Привязка товаров к категориям при импорте из csv

Автор max_max

Ответов: 8
Просмотров: 1568
Последний ответ 16.08.2021, 18:45:19
от max_max
csvi Pro 7.3.0. Игнорирование существующих полей пи импорте товаров

Автор Viktor

Ответов: 2
Просмотров: 1664
Последний ответ 13.12.2019, 22:44:43
от AlexB
CSVI импорт товаров - Ну никак.(РЕШЕНО!)

Автор vtrcmert

Ответов: 129
Просмотров: 48303
Последний ответ 13.09.2019, 16:05:21
от forlan
Выгрузка товаров с VirtueMart в olx?

Автор Stasweb

Ответов: 1
Просмотров: 1942
Последний ответ 03.03.2019, 16:00:47
от gartes