So fügen Sie eine Drittanbieter-Bibliothek in Magento 2 ein (wie die PHP-XLSX-Bibliothek)

7

Wie kann ich eine Drittanbieter-Bibliothek wie die PHP XLSX-Bibliothek in Magento 2 einbinden ?

Seit 7 Tagen surfe ich in Google und konnte keine Informationen finden.

Magento 2 bietet Standard-Framework-Modul wie Parser, Logger usw. Ich muss einen Exportbericht im XLSX-Format hinzufügen. In diesem Fall, wie geht das?

Anand Ontigeri
quelle
1
Sie möchten JS-Bibliothek oder PHP-Bibliothek hinzufügen?
Shaheer Ali
@shaheer ali php Bibliothek
Anand Ontigeri
Legen Sie Ihre PHP-Lib-Dateien in den Lib-Ordner des Magetno oder in Ihren Modulordner und fügen Sie sie dann mit require_once ('path_to_your_lib_file') in Ihre Moduldatei ein.
Shaheer Ali
@shaheer, lassen Sie mich klarstellen: -Ich erstelle benutzerdefinierte Bibliotheken, zum Beispiel Framework, wir können \ Magento \ Framework \ App \ Action \ Action richtig erweitern, auf diese Weise muss nur ich lib-Dateien wie Magento \ Framework \ custom_library erweitern \ library. (die Verwendung von require_once ist in diesem Fall anders)
Anand Ontigeri

Antworten:

4

Im Folgenden finden Sie die Schritte zum Erstellen einer benutzerdefinierten Bibliothek

in diesem werde ich PHpexcel lib nehmen

  1. Laden Sie die Bibliothek https://github.com/PHPOffice/PHPExcel/tree/1.8/Classes herunter
  2. Bewahren Sie den Ordner in lib / internal auf
  3. Öffnen Sie PHPExcel.php und ändern Sie den Klassennamen in Phpexcel_PHPExcel
  4. im PHPExcel-Ordner viel Funktionsinitialisierung PHPExcel ändern es in Phpexcel_PHPExcel sonst wird es durch Fehler ex lib \ internal \ Phpexcel \ PHPExcel \ Calculation.php __construct und getInstance funktionieren alle PHPExcel ändern sich in Phpexcel_PHPExcel wie diese Änderung an allen Stellen
  5. wo immer du es benutzt

    benutze Phpexcel_PHPExcel;

    benutze Phpexcel_PHPExcel_IOFactory;

und innerhalb __konstruieren

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

Als Beispiel können Sie eine XLSX-Datei erstellen

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
        ];
    }
Pradeep Kumar
quelle
1
Meiner Meinung nach lib/internalsollte nicht berührt werden. Sie können lib/externalstattdessen erstellen .
MagePsycho
Hallo @peadeep, ich will FPDF lib hinzufügen , aber nicht funktioniert fpdf.org wie Sie gesagt. Bitte schlagen Sie mir den richtigen Weg vor.
Hitesh Vaghasiya
2

Welche Bibliothek möchten Sie genau installieren?

Das erste Ergebnis bei der Google-Suche nach der PHP-XLSX-Bibliothek ergab Folgendes: https://github.com/PHPOffice/PHPExcel

Seit seiner Registrierung auf packagist https://packagist.org/packages/phpoffice/phpexcel

Sie können es einfach mit dem folgenden Shell-Befehl (aus Ihrem magento2-Stammverzeichnis) in Ihre magento2-Instanz installieren:

Komponisten benötigen phpoffice / phpexcel

Wenn Sie es in einer Magento-Erweiterung verwenden, sollten Sie die Bibliothek in Ihrer Modules composer.json-Datei benötigen, damit sie bei der Installation Ihrer Erweiterung immer automatisch installiert wird.

Das Autoloading wird dann vom Komponisten übernommen

David Verholen
quelle
Ich möchte diese Bibliothek einschließen phpexcel.codeplex.com
Anand Ontigeri
github.com/PHPOffice/PHPExcel sieht tatsächlich aus wie eine modernisierte, komponistenkonforme Version davon: o. Vielleicht probierst du es aus?
David Verholen
@DavidVerholen: - Sobald wir die xlxs lib heruntergeladen und im lib-Ordner gespeichert haben, wie man sie jetzt in der Controller- oder Modelldatei verwendet, ist es richtig, das Dateimodell einzuschließen, wie Shaheer Ali sagte, oder unser eigenes Framework-Modul zu schreiben, wenn das Logger-Framework-Modul erstellt wird.
Pradeep Kumar
Sie müssen es nicht manuell herunterladen. Installieren Sie es einfach mit Composer und Sie sind gut. Sie können dann eine Instanz der Bibliothek so einfach wie jede andere Magento-Klasse mit der Konstruktorabhängigkeitsinjektion erhalten
David Verholen
1

Legen Sie Ihre PHP-Bibliotheksdateien in den lib-Ordner von magento, z. B. your_magento / lib / phpxls. Fügen Sie nun oben in Ihre Moduldatei die lib-Datei mit dem folgenden Code ein

$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);

Bearbeiten Erstellen Sie eine Datei in Ihrem Modul-Hilfsordner, z. B. Mycustomlib.php. Fügen Sie nun den obigen Code am Anfang der Datei Mycustomlib.php ein

$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
{ 
}

Sie können die Mycustomlib in Ihrem Modul beliebig erweitern

Shaheer Ali
quelle
1
Aber in diesem Fall müssen wir in jede Datei aufnehmen, in der diese Datei benötigt wird. Aber Magento 2-Bibliotheken werden automatisch geladen, so dass wir richtig konfigurieren müssen. Ich möchte benutzerdefinierte Bibliotheken auf Konfigurationsebene oder automatisch Ladeebene laden.
Anand Ontigeri
Sie können einen anderen Ansatz verwenden. Sie können Ihre Modell- /
Hilfsdatei
Wenn es Ihnen nichts ausmacht, können Sie es klar erklären. weil ich neu in Magento 2 bin
Anand Ontigeri
1
Überprüfen Sie meine Antwort jetzt
Shaheer Ali
1
Dies wird nicht funktionieren. namespacesollte die erste Zeile in der Codedatei sein.
Arvind07
0

Magento 2 unterstützt die Composer- Installation sowohl für Module als auch für Pakete von Drittanbietern.

PhpExcel ist jetzt veraltet und das neue PhpSpreadsheet sollte verwendet werden.

Zur Installation über Composer:

composer require phpoffice/phpspreadsheet

Als Referenz: phpspreadsheet.readthedocs.io

Milind Singh
quelle