Magento: PHP / JS сохраняет WebForm в файл xml / xls с определенной файловой структурой - PullRequest
0 голосов
/ 20 декабря 2018

Мне нужен очень специфический функционал.

ЦЕЛЬ: Мне нужно сгенерировать конкретный файл TXT или XLS со строгим шаблоном, где я буду размещать содержимое веб-формы, когда кто-то отправляет форму.||Сохраните содержимое формы в файл TXT / XLS с предварительно заданным шаблоном.(что легче понять :)) И сохраните его на другом сервере, кроме самого Magento, в нужную папку, по запросу FTP или отправьте по электронной почте.

Я использую расширение Magento: WebForm от MageMe: https://mageme.com/docs/magento-form-builder/add-custom-functionality-to-submission.html

Структура файла WebFormsProcessResult. Всего содержит 4 файла.

  1. app / etc / modules
    • VladimirPopov_WebFormsProcessResult.xml
  2. app / code / community / VladimirPopov / WebFormsProcessResult
    1. / etc
      • config.xml
      • system.xml
    2. / Модель
      • Observer.php

app / etc / modules / VladimirPopov_WebFormsProcessResult.xml

<?xml version="1.0"?>
 <config>
  <modules>
    <VladimirPopov_WebFormsProcessResult>
        <active>true</active>
        <codePool>community</codePool>
    </VladimirPopov_WebFormsProcessResult>
  </modules>
 </config>

etc / config.xml

<?xml version="1.0"?>
 <config>
  <modules>
    <VladimirPopov_WebFormsProcessResult>
        <version>1.0.0</version>
    </VladimirPopov_WebFormsProcessResult>
  </modules>
  <adminhtml>
    <acl>
        <resources>
            <all>
                <title>Allow Everything</title>
            </all>
        </resources>
    </acl>
  </adminhtml>
  <global>
    <models>
        <webformsprocessresult>
            <class>VladimirPopov_WebFormsProcessResult_Model</class>
        </webformsprocessresult>
    </models>
    <events>
        <webforms_result_submit>
            <observers>
                <webforms_result_submit_observer>
                    <type>singleton</type>


            <class>VladimirPopov_WebFormsProcessResult_Model_Observer</class>
                    <method>exportXML</method>
                </webforms_result_submit_observer>
            </observers>
        </webforms_result_submit>
    </events>
  </global>
 </config>

etc / system.xml

<?xml version="1.0"?>
 <config>
  <sections>
    <webforms>
        <groups>
            <processresult translate="label comment">
                <comment></comment>
                <label>Results Post Processing</label>
                <frontend_type>text</frontend_type>
                <sort_order>1000</sort_order>
                <show_in_default>1</show_in_default>
                <show_in_website>1</show_in_website>
                <show_in_store>1</show_in_store>
                <fields>
                    <enable translate="label comment">
                        <comment>
                            <![CDATA[Results will be additionally processed by custom function]]>
                        </comment>
                        <label>Enable results post processing</label>
                        <frontend_type>select</frontend_type>
                        <source_model>adminhtml/system_config_source_yesno</source_model>
                        <sort_order>10</sort_order>
                        <show_in_default>1</show_in_default>
                        <show_in_website>1</show_in_website>
                        <show_in_store>1</show_in_store>
                    </enable>
                </fields>
            </processresult>
        </groups>
    </webforms>
   </sections>
  </config>

Model / Observer.php

<?php
 class VladimirPopov_WebFormsProcessResult_Model_Observer{

  public function exportXML($observer){
    if(!Mage::getStoreConfig('webforms/processresult/enable')) return;

    $webform = $observer->getWebform();

    /*
    *   Check web-form code
    *   if($webform->getCode() != 'myform') return;
    */

    $result = Mage::getModel('webforms/results')->load($observer->getResult()->getId());
    $xmlObject = new Varien_Simplexml_Config($result->toXml());

    // generate unique filename
    $destinationFolder = Mage::getBaseDir('media') . DS . 'webforms' . DS . 'xml';
    $filename = $destinationFolder . DS . $result->getId().'.xml';

    // create folder
    if (!(@is_dir($destinationFolder) || @mkdir($destinationFolder, 0777, true))) {
        throw new Exception("Unable to create directory '{$destinationFolder}'.");
    }

    // export to file
    $xmlObject->getNode()->asNiceXml($filename);
  }

 }
?>

toXml Функция:

public function toXml(array $arrAttributes = array(), $rootName = 'item', $addOpenTag = false, $addCdata = true)
{

    $webform = Mage::getModel('webforms/webforms')
        ->setStoreId($this->getStoreId())
        ->load($this->getWebformId());

    if ($webform->getCode())
        $this->setData('webform_code', $webform->getCode());

    foreach ($this->getData() as $key => $value) {
        if (strstr($key, 'field_')) {
            $field = Mage::getModel('webforms/fields')
                ->setStoreId($this->getStoreId())
                ->load(str_replace('field_', '', $key));
            if (!empty($field) && $field->getCode()) {
                $this->setData($field->getCode(), $value);
            }
        }
    }
    return parent::toXml($arrAttributes, $rootName, $addOpenTag, $addCdata);
}

Выше код генерирует вывод, как это:

ТЕКУЩИЙ РЕЗУЛЬТАТ |ВЫХОД:

<item>
  <id>36782</id>
  <webform_id>6</webform_id>
  <store_id>1</store_id>
  <customer_id>0</customer_id>
  <customer_ip>0</customer_ip>
  <created_time>2018-12-19 15:40:01</created_time>
  <update_time>2018-12-19 15:40:01</update_time>
  <approved>1</approved>
  <field_63>Honnig</field_63>
  <key_63/>
  <field_64>Winnie</field_64>
  <key_64/>
  <field_65>Pooh</field_65>
  <key_65/>
  <field_66>BigTree</field_66>
  <key_66/>
  <field_67>12342</field_67>
  <key_67/>
  <field_68>Forest</field_68>
  <key_68/>
  <field_69>123</field_69>
  <key_69/>
  <field_70>winnie@pooh.wl</field_70>
  <key_70/>
  <field_80>I need honey</field_80>
  <key_80/>
  <field_81>1234</field_81>
  <key_81/>
  <field_502>winniepoooh.wl/honig.html</field_502>
  <key_502/>
  <ip>0.0.0.0</ip>
  <webform_code>honnig</webform_code>
  <hidden_title>Sweet Honig</hidden_title>
  <name>Winnie</name>
  <nachname>Pooh</nachname>
  <strasse>BigTree</strasse>
  <plz>123</plz>
  <city>Forest</city>
  <phone>23412341234</phone>
  <email>winnie@pooh.wl</email>
  <bemerkungen>I need Honig</bemerkungen>
  <bedarf>1234</bedarf>
  <hidden_url>winniepoooh.wl/honig.html</hidden_url>
</item>

Так что сейчас я могу экспортировать всю структуру формы с HTML-тегами.

ЦЕЛЬ: Мне нужно создать конкретный шаблон, где яВыложу содержимое этой формы, когда кто-то будет подавать форму.И сохраните его на другом сервере, в нужную папку по запросу FTP.

Я хотел бы передать этот шаблон приведенному выше коду |Сохраните содержимое формы в этом шаблоне как файл TXT или XLS:

НЕОБХОДИМЫЙ РЕЗУЛЬТАТ |РЕЗУЛЬТАТ:

###ANREDE:#
###VORNAME:Pooh#
###NAME:Winnie#
###STRASSE:BigTree 8#
###ORT:Neverland#
###PLZ:111111#
###TELEFON:0123456789#
###LAND:WL#
###FIRMA:#
###TELEFAX:#
###LIEFERANSCHRIFT:
Winnie
Pooh
BigTree 8
11111 Forest
WL
Telefon: 0123456789#
###POS_NR:1#
###POS_ARTIKELBE:Honnig#
###POS_ARTIKELNR:123#
###POS_EPREIS:12#
###POS_GPREIS:13#
###POS_ANZAHL:1#
###POS_RABATT:0,0#
###VERSAND:PayPal#
###BEMERKUNG:1#
###BESTELLNUMMER:123#
###EMAIL:winnie@pooh.wl#
###STEUER:1#
###VERSANDKOSTEN:13#

Я также предполагал возможность сделать это с помощью сохранения jQuery при отправке.Что лучше и проще?Я приму любое полезное решение!

Пожалуйста, помогите мне, я не очень хорош в PHP или Magento: / Спасибо, ребята!

...