これが私の問題です:クロスワードパズルに2つのSWFファイルがあります。1つ目は[保存]ボタンをクリックしてパズルを作成してXMLファイルを出力するためのもので、2つ目のSWFはXMLファイルを一覧表示してロードすることでユーザーにパズルを表示します。クリックすると、選択したXMLファイルがSWFにロードされます。ここまではこれで大丈夫です。ただし、Webインターフェイスを使用して、Webサイト内のユーザーがWebページでこれらのXMLリストを表示し、クリック/選択すると、2番目のSWFに関連するXMLファイルが読み込まれるようにする必要があります。 drupalオーガニックグループなどのモジュールでこれらのXMLファイルを整理するため、これが必要です。各ユーザーに異なるXMLファイルのリストが表示されます。たとえば、 drupal内のOrganicグループモジュールでは、各グループに異なるエディターがあるため、これらのエディターはパズルを作成し、Organicグループモジュールを使用してグループに設定します。
いくつかの調査の後、私は友人の助けを借りてこれを達成するための可能で合理的な方法を見つけたと思います。つまり、これまでのことをまとめます。
-私はパズルメーカーのswfとパズルプレーヤーのswfを持っています。 -Puzzle makerは実際にPuzzle player(swf)で再生できるいくつかのxmlファイルを生成します。 -これらのxmlファイルはDrupalに保存されます。 -保存されたxmlファイルの動作は、オーガニックグループの動作と同じです。特定のグループに属するファイルにグループメンバーがアクセスできる場所。
実装のアイデアはここにあります、
1.)Puzzle maker(swf)を使用してパズルを作成するためのカスタムページ。 xmlファイルを保持する「パズルデータ」コンテンツタイプ。このノードは有機グループの下にあります。
2.)編集者がパズルを作成し(ここまでは問題ありません)、xmlファイルが編集者のコンピューターにダウンロードされます。
3.)これで、エディターはxmlファイルをアップロードして、「パズルデータ」ノードに添付できます。
4.)これで、Views with Organicモジュールのすべての「Puzzle Data」ノードを表示するビューを作成できます。
5.)トリッキーな部分です。実際のノード表示は、ノードにアップロードされた「xml」ファイルを使用するPuzzle Player(swf)である必要があります。
いくつかの調査の後、カスタムノードテンプレートを作成するか、カスタムフィールドフォーマッタを作成することで、これを実現できます。したがって、ここでは、各ノードがノードに接続されているパズルプレーヤー(swf)に添付されたxmlファイルを送信/送信できるように、phpコードの部分について少し助けが必要です。
(この2つのステップ:xmlをダウンロードして後でノードにアップロードするのは望ましくないことです。おそらく、パズルメーカー(swf)をノード内に埋め込むことができます/パズルデータコンテンツタイプのパスを追加し、編集者はxmlをダウンロードして、それを再びにアップロードします。同じページのフィールド。)
テーマまたはノードモジュール(コアの一部)から既存のものをコピーして、新しいnode.tpl.phpを作成します。コピーノードの名前を変更します-mycontenttype。tpl.phpをテーマディレクトリに配置します(他の.tplファイルと一緒に)。
Develをインストールし、dpm()を使用して$ content変数を調べます。 XMLフィールドを非表示にし、ファイルID(fid)を抽出して、file_loadに渡します。これにより、ファイルパスを含むオブジェクトが返されます。再度dpm()を使用してこの配列を探索し、ファイルを取得します。
https://api.drupal.org/api/drupal/includes%21file.inc/function/file_load/7
.swfを新しいnode.tpl.phpに直接埋め込み、他のFlash引数と同じようにXMLをそれに渡します。
これは私が問題を修正した方法です。カスタムノードを作成しました-私のpuzzleplay.swfファイル用のpuzzle.tpl.php。このカスタムノードテンプレートは、「puzzle」ノードタイプ内の「field_xml」フィールドに添付されたxmlファイルのURLを取ります。次に、このURLがFlashvarsでAS3に送信されるため、field_xmlにxmlファイルが添付されたノードがあるたびに、puzzleplay.swfはFlashvarsで送信されたURLからその特定のxmlをロードします。
node--puzzle.tpl.php:
<?php
$xmlpath = file_create_url($node->field_xml['und']['0']['uri']);
?>
<object
<param name="AllowScriptAccess" value="always">
<param name="allowFullScreen" value="true" />
<param name="quality" value="high" />
<param name="flashVars" value="xmlPath= <?php echo $xmlpath; ?>" />
<param name="movie" value="/path/to/puzzleplay.swf" />
<embed allowScriptAccess="always" flashvars="xmlPath=<?php echo $xmlpath; ?>"src="/path/to/puzzleplay.swf" type="application/x-shockwave-flash" ></embed>
</object>
AS3コード:
var XML_URL:String = root.loaderInfo.parameters.xmlPath;
var myXMLURL:URLRequest = new URLRequest(XML_URL);
var myLoader:URLLoader = new URLLoader(myXMLURL);
myLoader.addEventListener("complete", xmlLoaded);