Tạo tập tin xml theo chương trình


8

Tôi cần tạo một .xmltập tin từ phần mở rộng của mình. Namespace/Module/view/adminhtml/ui_component/Thư mục bên trong ,

Tôi cần phải làm điều này theo ngữ pháp vì .xmltệp sẽ được tạo dựa trên việc thu thập dữ liệu, có cách nào để làm điều này không?


Không bao giờ là một ý tưởng tốt để tạo các tệp bố cục một cách nhanh chóng. Nó vít lên phiên bản của bạn. Giải thích vấn đề bạn đang cố gắng giải quyết thay vì cách tiếp cận bạn đã thực hiện. Có thể có một cách khác để giải quyết nó mà không tạo tệp ui-thành phần.
Marius

@Marius nó liên quan đến câu hỏi khác của tôi về cơ bản, tôi cần thêm cột tùy chỉnh trong lưới đặt hàng bán hàng một cách linh hoạt
Idham Choudry

Câu trả lời:


1

Hiện tại tôi đang sử dụng chức năng gốc php để ghi / tạo tệp trong thư mục tiện ích mở rộng của mình như thế này:

    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;
     }

Nếu có cách nào phù hợp hơn để làm điều đó trong Magento 2, vui lòng cho tôi biết và tôi sẽ chấp nhận câu trả lời cho câu hỏi này, nhưng bây giờ nếu có ai muốn sử dụng nó như một giải pháp thì nó hoạt động đúng với tôi nhưng tôi không khuyên bạn nên


Đó là một thực tiễn tồi tệ - sử dụng các hàm PHP nguyên gốc sẽ loại bỏ lợi thế của việc sử dụng khung dựng sẵn của Magento. Tôi sẽ đề nghị xem xét các mô-đun cốt lõi, đặc biệt là các mô-đun nhập / xuất.
Bery

0

Nếu bạn muốn thử một cách khác, có thể sử dụng Magento \ Framework \ Filesystem \ Io \ File và Magento \ Framework \ Convert \ ConvertArray. ConvertArray rất hữu ích để tạo một tệp xml từ một mảng nhiều chiều và Tệp có thể viết nó cho bạn (và kiểm tra quyền, tạo thư mục và hơn thế nữa). Đây là một ví dụ cơ bản:

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

nếu mảng của tôi là:

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

và tôi gọi chức năng của mình:

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

Tôi sẽ nhận được những điều sau đây trong 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>
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.