Cách đưa thư viện của bên thứ 3 vào Magento 2 (như thư viện php xlsx)


7

Làm cách nào để bao gồm thư viện bên thứ ba như thư viện php xlsx trong Magento 2?

Kể từ 7 ngày qua tôi đang duyệt google và tôi không thể tìm thấy bất kỳ thông tin nào.

Magento 2 cung cấp mô-đun khung mặc định như trình phân tích cú pháp, logger, v.v., tôi cần thêm báo cáo xuất ở định dạng xlsx trong trường hợp này để làm điều đó như thế nào?


1
bạn muốn thêm thư viện js hay thư viện php?
Shaheer Ali 8/2/2016

@shaheer ali php thư viện
Anand Ontigeri 8/2/2016

đặt các tập tin lib php của bạn vào thư mục lib của magetno hoặc trong thư mục mô-đun của bạn và sau đó đưa vào tập tin mô-đun của bạn bằng cách sử dụng allow_once ('path_to_your_lib_file');
Shaheer Ali 8/2/2016

@shaheer, hãy để tôi làm rõ: - tôi đang tạo thư viện tùy chỉnh, ví dụ: lấy khung, chúng tôi có thể mở rộng \ Magento \ Framework \ App \ Action \ Action, theo cách đó tôi chỉ cần mở rộng các tệp lib như Magento \ Framework \ custom_l Library \ library. (sử dụng allow_once thì khác trong trường hợp này)
Anand Ontigeri 8/2/2016

Câu trả lời:


4

Dưới đây là các bước để tạo lib tùy chỉnh

trong này tôi sẽ dùng lib PHpexcel

  1. tải xuống lib https://github.com/PHPOffice/PHPExcel/tree/1.8/Class
  2. giữ thư mục trong lib / nội bộ
  3. mở PHPExcel.php và thay đổi tên lớp thành Phpexcel_PHPExcel
  4. Trong thư mục PHPExcel bên cạnh rất nhiều chức năng khởi tạo PHPExcel thay đổi nó thành Phpexcel_PHPExcel khác, nó bị lỗi thông qua lỗi ex lib \ Internal \ Phpexcel \ PHPExcel \ Tính.php
  5. bạn sử dụng như thế nào

    sử dụng Phpexcel_PHPExcel;

    sử dụng Phpexcel_PHPExcel_IOFactory;

và bên trong __construct

    Phpexcel_PHPExcel $xlsx,
  $this->excelFactory = $excelFactory;

như ví dụ bạn có thể xây dựng tệp xlsx

public function getXlsxFile()
    {

        $component = $this->filter->getComponent();

        $name = md5(microtime());
        $file = 'export/'. $component->getName() . $name . '.xml';

        $this->filter->prepareComponent($component);
        $this->filter->applySelectionOnTargetProvider();

        /** @var SearchResultInterface $searchResult */
        $component->getContext()->getDataProvider()->setLimit(0, 999999);
        $searchResult = $component->getContext()->getDataProvider()->getSearchResult();

        $this->prepareItems($component->getName(), $searchResult->getItems());

        /** @var SearchResultIterator $searchResultIterator */
        $searchResultIterator = $this->iteratorFactory->create(['items' => $searchResult->getItems()]);
        $filterDataArr = '';
        foreach($searchResultIterator as $dataRow){
            $filterDataArr[]= $dataRow->getData();
        }

        $excelDataArray = '';
        $sheetTitle = 'export';
        $HeadersArray = $this->metadataProvider->getHeaders($component);     
        $FieldsArray = $this->metadataProvider->getFields($component);
        if(($key = array_search('actions', $FieldsArray)) !== false) {
            unset($FieldsArray[$key]);
        }

        if($component->getData('worksheetlabel')){
             $sheetTitle = $component->getData('worksheetlabel');
        }

        $hPos = 0;
        foreach($HeadersArray as $key =>$value){
            $excelDataArray[$hPos][$key] = $value;
        }

        $dPos = 1;
        if(count($filterDataArr) > 1){
            foreach($filterDataArr as $Filterdata){
                foreach($FieldsArray as $key=>$value){
                        $excelDataArray[$dPos][$key] = $Filterdata[$value];
                }
                $dPos++;
            }
        }

        $this->_Xlsx->getActiveSheet()->fromArray($excelDataArray, null, 'A1' );

        $this->_Xlsx->getActiveSheet()->setTitle($sheetTitle);
        $this->_Xlsx->setActiveSheetIndex(0);
        $callStartTime = microtime(true);

        $name = md5(microtime());
        $file = '/export/'. $component->getName() . $name . '.xlsx';

        $this->directory->create('export');
        $objWriter = Phpexcel_PHPExcel_IOFactory::createWriter($this->_Xlsx, 'Excel2007');
        $filepath = $this->directory->getAbsolutePath($file);
        $objWriter->save($filepath);

        return [
            'type' => 'filename',
            'value' => $file,
            'rm' => true  // can delete file after use
        ];
    }

1
Theo tôi, lib/internalkhông nên chạm vào. Bạn có thể tạo lib/externalthay thế.
MagePologistso

Xin chào @peadeep, tôi muốn thêm lib fPDF nhưng không hoạt động fpdf.org như bạn đã nói. Xin đề nghị tôi cách thích hợp.
Hitesh Vaghasiya

2

thư viện nào chính xác mà bạn muốn cài đặt?

Kết quả đầu tiên trên google tìm kiếm thư viện php xlsx đã cho tôi điều này: https://github.com/PHPOffice/PHPExcel

Kể từ khi được đăng ký trên packagist https://packagist.org/packages/phpoffice/phpexcel

bạn có thể dễ dàng cài đặt nó vào phiên bản magento2 của mình bằng lệnh shell sau (từ thư mục gốc magento2 của bạn):

nhà soạn nhạc yêu cầu phpoffice / phpexcel

Nếu bạn đang sử dụng nó trong Tiện ích mở rộng Magento, bạn nên yêu cầu thư viện trong Tệp mô-đun composer.json, để nó luôn được cài đặt tự động khi Tiện ích mở rộng của bạn được cài đặt.

Tự động tải sẽ được xử lý bởi nhà soạn nhạc sau đó


tôi muốn bao gồm thư viện này phpexcel.codeplex.com
Anand Ontigeri 8/2/2016

github.com/PHPOffice/PHPExcel thực sự trông giống như một phiên bản hiện đại hóa, tuân thủ của nhà soạn nhạc này: o. có thể bạn thử nó?
David Verholen 8/2/2016

@DavidVerholen: - một khi chúng ta tải về xlxs lib và lưu trong thư mục lib hiện nay làm thế nào để sử dụng nó trong điều khiển hoặc tập tin mô hình, là nó đúng cách bao gồm mô hình tập tin như Shaheer Ali nói hoặc viết mô-đun khuôn khổ riêng của chúng tôi như mô-đun khung logger được tạo ra
Pradeep Kumar

bạn không cần phải tải nó bằng tay. Chỉ cần cài đặt nó với nhà soạn nhạc và bạn là tốt. sau đó bạn có thể lấy một thể hiện của thư viện dễ dàng như bất kỳ lớp magento nào khác với phép tiêm phụ thuộc hàm tạo
David Verholen

1

Đặt các tệp thư viện php của bạn vào thư mục lib của magento, ví dụ: your_magento / lib / phpxls Bây giờ, trên đầu tệp mô-đun của bạn bao gồm tệp lib sử dụng mã bên dưới

$object_manager = Magento\Core\Model\ObjectManager::getInstance();
$dir = $object_manager->get('Magento\App\Dir');            
$base = $dir->getDir();
$lib_file = $base.'lib/phpxls/your_lib_file.php'
require_once($lib_file);

Chỉnh sửa Tạo một tệp trong thư mục trình trợ giúp mô-đun của bạn, ví dụ Mycustomlib.php Bây giờ đặt mã ở trên vào đầu tệp Mycustomlib.php trông giống như

$object_manager = Magento\Core\Model\ObjectManager::getInstance();
$dir = $object_manager->get('Magento\App\Dir');            
$base = $dir->getDir();
$lib_file = $base.'lib/phpxls/your_lib_file.php'
require_once($lib_file);
namespace Yournamespace\Module\Helper;

class Mycustomlib extends Yourlibclass
{ 
}

bạn có thể mở rộng Mycustomlib nơi bạn muốn trong mô-đun của mình


1
nhưng trong trường hợp này, chúng tôi cần đưa vào mọi tệp trong đó tệp cần thư viện .but magento 2 này được tải tự động theo cách chúng tôi cần cấu hình đúng .. tôi muốn tải thư viện tùy chỉnh ở cấp cấu hình hoặc cấp tải tự động.
Anand Onigeri

bạn có thể sử dụng một cách tiếp cận khác. bạn có thể mở rộng tệp mô hình / trình trợ giúp từ các tệp lib của mình và sau đó bạn có thể sử dụng tệp mô hình / trình trợ giúp của mình
Shaheer Ali

Nếu bạn không phiền, bạn có thể giải thích rõ ràng. bởi vì tôi mới biết về magento 2
Anand Ontigeri

1
kiểm tra câu trả lời của tôi ngay bây giờ
Shaheer Ali 8/2/2016

1
Điều này sẽ không hoạt động. namespacenên là dòng đầu tiên trong tập tin mã.
Arvind07

0

Magento 2 hỗ trợ cài đặt trình soạn thảo cho cả hai mô-đun và gói bên thứ 3.

PhpExcel hiện không được chấp nhận và nên sử dụng PhpS trànsheet mới .

Để cài đặt qua trình soạn thảo:

composer require phpoffice/phpspreadsheet

Để tham khảo: phps Dànsheet.readthedocs.io

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.