Xóa danh mục sản phẩm không sử dụng


7

Tôi đã tiếp quản một cửa hàng magento mà hơn 3 năm đã xây dựng một số lượng lớn hình ảnh sản phẩm không còn được sử dụng nhưng không bao giờ bị xóa.

Có cách nào tôi có thể xóa tất cả các hình ảnh không còn được sử dụng, trong khi vẫn giữ tất cả các hình ảnh đang được sử dụng? Tôi đã tìm kiếm một mô-đun / tiện ích mở rộng nhưng không thể tìm thấy mô-đun nào hoạt động với cộng đồng magento 1.9.


Magento không làm các cửa sổ hình ảnh, đôi khi tùy chọn vệ sinh khác như trích dẫn cũ ... Điều này gây ra sự phình to của hệ thống tập tin và cơ sở dữ liệu. Điều này đã tạo ra mô-đun Image Clean trên Connect cho lần đầu tiên, các tập lệnh khác nhau để làm sạch trích dẫn phụ thuộc vào việc xóa innodb trên tầng để loại bỏ vào những ngày trước
Fiasco Labs

Câu trả lời:


7

bạn có thể thử tập lệnh shell sau: https://gist.github.com/aleron75/07ab2a950b2e3429a820

Tôi chưa thử nó trên phiên bản 1.9.x. chưa

Lưu ý: thực hiện sao lưu trước khi sử dụng nó trên môi trường sản xuất và có thể kiểm tra nó trên môi trường dàn dựng trước đó.

Hy vọng nó giúp.

Trân trọng, Alessandro


Tôi không có quyền truy cập shell, có cách nào để làm điều này trong PHP không?
odd_duck

Chà, nếu bạn hiểu logic cơ bản, bạn có thể thử chuyển tập lệnh theo phương thức hành động của bộ điều khiển.
Alessandro Ronchi

4

Bạn có thể tải tập lệnh này lên thư mục gốc của bản cài đặt Magento và chạy nó ngay cả từ trình duyệt của bạn.

https://gist.github.com/JeroenBoersma/60a4acb8e56498bce41c

Kiểm tra xem các thuộc tính của bạn cho phương tiện truyền thông có các id này không.

Nếu bạn quên điều này, bạn có thể phá vỡ mọi thứ

cpv.attribute_id in(85, 86, 87)

Nó sẽ tạo tổng kiểm tra để phát hiện các tệp trùng lặp trên mỗi sản phẩm và hủy liên kết các tệp này khỏi hệ thống tệp và cơ sở dữ liệu.

Bước thứ hai là phát hiện tệp nằm trong hệ thống tệp chứ không phải trong cơ sở dữ liệu nữa.

Sử dụng nó từ 1.7 trở lên, vì vậy nó sẽ hoạt động.

Nếu bạn thông minh, tôi luôn khuyên bạn nên tạo bản sao lưu trước.


2

Bạn có thể đặt trong đường dẫn gốc Magento đoạn script PHP này và gọi nó từ trình duyệt:

Bảng điều khiển Web Script

Kịch bản sẽ chạy theo mặc định dry-modeđể kiểm tra an toàn cho phép bạn thực sự xóa trẻ mồ côi nếu mọi thứ nghe có vẻ thuyết phục.


tập lệnh này chỉ hiển thị hình ảnh không sử dụng nhưng không xóa hình ảnh khỏi cơ sở dữ liệu ...
Sarfaraj Sipai

1

Tôi muốn giới thiệu hướng tới

Hệ thống -> Quản lý bộ đệm -> Bộ đệm ẩn hình ảnh danh mục.

Điều này sẽ xóa tất cả các hình ảnh được tạo và sau đó tạo lại chúng khi người dùng truy cập trang web.


0

Đặt đoạn script dưới đây trong root magento và thực thi

  <?php

  require_once("app/Mage.php");
  umask(0);
  Mage::app();
  $ob = new Clean();
  $ob->removemedia();

  Class Clean {

  function removemedia() {
    $read = Mage::getSingleton('core/resource')->getConnection('core_read');
    $select = $read->select()
            ->from('catalog_product_entity_media_gallery', '*')
            ->group(array('value_id'));

    $flushImages = $read->fetchAll($select);
    echo count($flushImages);
    $array = array();
    foreach ($flushImages as $item1) {
        $array[] = $item1['value'];
    }

    $valores = $array;

    $pepe = 'media' . DS . 'catalog' . DS . 'product';

    $leer = $this->listDirectories($pepe);

    foreach ($leer as $item) {
        try {
            $item = strtr($item, '\\', '/');
            if (!in_array($item, $valores)) {
                $valdir[]['filename'] = $item;
                unlink('media/catalog/product' . $item);
            }
        } catch (Zend_Db_Exception $e) {

        } catch (Exception $e) {
            //Mage::log($e->getMessage());
        }
    }
}

function listDirectories($path) {
    if (is_dir($path)) {
        if ($dir = opendir($path)) {
            while (($entry = readdir($dir)) !== false) {
                if (preg_match('/^\./', $entry) != 1) {
                    if (is_dir($path . DS . $entry) && !in_array($entry, array('cache', 'watermark'))) {
                        $this->listDirectories($path . DS . $entry);
                    } elseif (!in_array($entry, array('cache', 'watermark')) && (strpos($entry, '.') != 0)) {
                        $this->result[] = substr($path . DS . $entry, 21);
                    }
                }
            }
            closedir($dir);
        }
    }
    return $this->result;
  }

 }

0

Tôi khuyên bạn nên sử dụng mô-đun n98-magerun này được gọi là EAVCleaner

Sau khi cài đặt, hãy chạy lệnh sau để xóa hình ảnh sản phẩm không sử dụng

n98-magerun eav:media:remove-unused

Một lợi thế của việc sử dụng mô-đun này so với các tập lệnh khác là nó có thể xóa số lượng hình ảnh lớn hơn. Hầu hết các tập lệnh khác được liên kết ở trên sẽ tạo ra một mảng hình ảnh, sau đó xóa. Điều này sẽ đi qua thư mục phương tiện và loại bỏ hình ảnh không sử dụng khi tìm thấy nó

Chúng tôi đã gặp phải một vấn đề trong đó hệ thống quản lý thông tin sản phẩm của khách hàng đang tải lên hình ảnh sản phẩm mới mỗi ngày và thư mục phương tiện có kích thước lên tới gần 400 GB. Mọi tập lệnh khác mà chúng tôi tìm thấy đã cố gắng đặt hàng trăm đường dẫn tệp hình ảnh vào bộ nhớ và sẽ báo lỗi. Kịch bản này đã lừa


0

cách này làm việc rất tốt cho tôi:

kho github

Cách sử dụng:

Bước 1: Kiểm tra kích thước thư mục trước khi thực hiện

du -s

Bước 2: Sao chép mã Mr. dajve và tạo một tệp trong

vi shell/shell_delete_unused_images.php

Bước 3: Thực thi tập tin

php shell/shell_delete_unused_images.php

Bước 4: Kiểm tra kích thước thư mục sau khi thực hiện

du -s
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.