Genera file xml a livello di codice


8

Devo generare un .xmlfile dalla mia estensione. Namespace/Module/view/adminhtml/ui_component/Cartella interna ,

Devo farlo in modo grammaticale perché il .xmlfile verrà generato in base alla raccolta dei dati, c'è un modo per farlo?


non è mai una buona idea generare i file di layout al volo. Ti rovina il controllo delle versioni. Spiega il problema che stai cercando di risolvere invece dell'approccio che hai adottato. Forse esiste un modo diverso di risolverlo senza generare il file ui-components.
Marius

@Marius si riferiva sostanzialmente all'altra mia domanda , ho bisogno di aggiungere dinamicamente la colonna personalizzata nella griglia degli ordini di vendita
Idham Choudry,

Risposte:


1

Per ora sto usando la funzione php originale per scrivere / creare file nella mia directory di estensione in questo modo:

    public function __construct(
      \Magento\Framework\Module\Dir\Reader $moduleReader
      )
    {
        $this->customAttribute = $customAttribute;
        $baseDir = $moduleReader->getModuleDir('', 'Namespace_Module');
        $this->dir = $baseDir . '/view/adminhtml/ui_component';
    }

    public function writeFile() {
        $dir = $this->dir;
        $fileName = 'test.xml';
        $content =  '<test>Test</test>';

        $myfile = fopen($dir . '/' . $fileName, "w") or die("Unable to open file!");
        try {
          fwrite($myfile, $content);
          fclose($myfile);
        } catch (Exception $e) {
          $this->_logger($e->getMessage());
        }
        return;
     }

se c'è un modo più appropriato per farlo in Magento 2, per favore fatemelo sapere e accetterò la risposta a questa domanda, ma per ora se qualcuno vuole usarlo come soluzione funziona correttamente per me ma non lo consiglio


Questa è una brutta pratica: l'uso delle funzioni native di PHP elimina il vantaggio dell'utilizzo del framework integrato di Magento. Suggerirei di dare un'occhiata ai moduli principali, in particolare quelli di importazione / esportazione.
Bery,

0

Se vuoi provare un altro modo, usa Magento \ Framework \ Filesystem \ Io \ File e Magento \ Framework \ Convert \ ConvertArray. ConvertArray è utile per creare un file xml da un array multidimensionale e File può scriverlo per te (e controllare i permessi, creare directory e altro). Ecco un esempio di base:

public function __construct(
    \Magento\Framework\Filesystem\Io\File $file,
    \Magento\Framework\Convert\ConvertArray $convertArray
)
{
    $this->file = $file;
    $this->convertArray = $convertArray;
}

public function createMyXmlFile($assocArray, $rootNodeName, $filename = 'file.xml')
{
   // ConvertArray function assocToXml to create SimpleXMLElement
   $simpleXmlContents = $this->convertArray->assocToXml($assocArray,rootNodeName);
   // convert it to xml using asXML() function
   $content = $simpleXmlContents->asXML();
   $this->file->write($filename, $contents);
}

se il mio array è:

$myArray = array(
  'fruit' => 'apple',
  'vegetables' => array('vegetable_1' => 'carrot', 'vegetable_2' => 'tomato'),
  'meat' => 'none',
  'sweets' => 'chocolate');

e chiamo la mia funzione:

$simpleXmlContents =  $this->convertArray->assocToXml($myArray, 'diner');
$this->file->write($myXmlFile,$simpleXmlContents->asXML());

Vorrei ottenere quanto segue in myfile.xml:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<diner><fruit>apple</fruit><vegetables><vegetable_1>carrot</vegetable_1> 
<vegetable_2>tomato</vegetable_2></vegetables><meat>none</meat> 
<sweets>chocolate</sweets></diner>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.