Переменная XML в PHP, затем во Flashvars - PullRequest
0 голосов
/ 02 февраля 2012

Можно ли использовать php для чтения XML-файла, а затем передать эти данные во Flashvars?

При поиске решения я могу только найти способ указать XML на файл.В настоящее время я открываю файл XML, присваиваю его переменной PHP, настраиваю и записываю в файл, который затем выбирается Flashvars.Это работает в 99% случаев, но иногда результаты совершенно неверны!Я не могу с помощью моих текущих знаний отладить эту проблему.

Было бы намного проще, если бы я мог просто передать данные в виде строки вместо файла.

Вот мой текущий код PHP...

    <?php
    $homepage = file_get_contents('content.xml');

    // Search and replace text in $homepage

    $myFile = "testFile.txt";
    $ourFileHandle = fopen($myFile, 'w') or die("can't open file");
    fwrite($ourFileHandle, '');
    fwrite($ourFileHandle, $homepage);
    fclose($ourFileHandle);
    ?>

    <script type="text/javascript" src="swfobject/swfobject.js"></script>
    <script type="text/javascript">
        var flashvars = {};
        flashvars.pathToXML = "testFile.txt";
        var params = {wmode: "transparent"};
        var attributes = {};
        swfobject.embedSWF("flashfile.swf", "myAlternativeContent", "660", "120", "9.0.0", false, flashvars, params, attributes);
    </script>

А вот мой XML ...

    <root>
        <config>
            <columns>6</columns>
            <padding>8</padding>
            <horizontal_align>true</horizontal_align>
            <vertical_align>true</vertical_align>
            <scale>0.7</scale>
        </config>

        <loop>
            <title>6th (bottom)</title>
            <path>sounds/string6</path>
            <key>name6</key>
            <volume>0.6</volume>
            <panning>0</panning>
            <offset>0</offset>
        </loop>
        <loop>
            <title>5th</title>
            <path>sounds/string5</path>
            <key>name5</key>
            <volume>0.6</volume>
            <panning>0</panning>
            <offset>0</offset>
        </loop>
        <loop>
            <title>4th</title>
            <path>sounds/string4</path>
            <key>name4</key>
            <volume>0.6</volume>
            <panning>0</panning>
            <offset>0</offset>
        </loop>
        <loop>
            <title>3rd</title>
            <path>sounds/string3</path>
            <key>name3</key>
            <volume>0.6</volume>
            <panning>0</panning>
            <offset>0</offset>
        </loop>
        <loop>
            <title>2nd</title>
            <path>sounds/string2</path>
            <key>name2</key>
            <volume>0.6</volume>
            <panning>0</panning>
            <offset>0</offset>
        </loop>
        <loop>
            <title>1st (top)</title>
            <path>sounds/string1</path>
            <key>name1</key>
            <volume>0.6</volume>
            <panning>0</panning>
            <offset>0</offset>
        </loop>     
    </root>

Ответы [ 2 ]

0 голосов
/ 03 февраля 2012

Вот что вы делаете:

Скачать xml2array, очень полезно во всех приложениях php / xml http://www.bin -co.com / php / scripts / xml2array /

Включите его на своей странице.

Затем используйте следующие строки:

$homepage = file_get_contents('content.xml');

$xml_array = xml2array($homepage);

Вы можете сделать несколько вещей, если хотите: либо использовать explode (), чтобы сделать его строкой, как вы сказали, вы можете json_encode () массив и затем отобразить это в своем блоке Javascript, либо просто вывести код на странице вот так:

param.something = <?= $xml_array['my_key']; ?>;
0 голосов
/ 03 февраля 2012

Я сделал нечто подобное некоторое время назад. надеюсь, что это поможет вам.

 <?php


    function extractXML($url){
      $doc = new DOMDocument();
      $doc->load($url);
      $arrFeeds = array();
      foreach ($doc->getElementsByTagName('loop') as $node) {
        $itemRSS = array ( 
          'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
          'path' => $node->getElementsByTagName('title')->item(0)->nodeValue,
          'key' => $node->getElementsByTagName('title')->item(0)->nodeValue,
          'volume' => $node->getElementsByTagName('title')->item(0)->nodeValue,
          'panning' => $node->getElementsByTagName('title')->item(0)->nodeValue,
          'offset' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue
          );
        array_push($arrFeeds, $itemRSS);
      }
        return $arrFeeds;
    }


    $tabXmlData = extractXML("YOURLINK");


    for($i = 0; $i < (int)$feedAmount; $i++){
        if(isset($tabXmlData[$i])){
            $flashVars .= "INSERT WHAT NEEDED";
        }
    }


    ?>

<script type="text/javascript" src="swfobject/swfobject.js"></script>
<script type="text/javascript">
    var flashvars = {<?php echo $flashVars ?>};
    flashvars.pathToXML = "testFile.txt";
    var params = {wmode: "transparent"};
    var attributes = {};
    swfobject.embedSWF("flashfile.swf", "myAlternativeContent", "660", "120", "9.0.0", false, flashvars, params, attributes);
</script>

Пояснения: функция в основном хранит ваш XML в массиве с ассоциативными ключами. все, что вам нужно сделать после этого, это взять нужные параметры и сохранить их в правильном формате для flashvars.

PS: если вам нужно заменить значение строки, проверьте str_replace() или preg_replace()

...