ページ 11

CMSDとFlashの連動に関して

Posted: 2007年7月30日(月) 20:50
by okakensanta
いつもお世話になっております。

現在、CMSDとFlashの連動をやっているのですが、
改行コードで上手くいきません。

FlashのXML読み込みは、
CR+LFだと改行が2回あるものだと判断してしまうらしく、
CRまたは、LFでXMLを生成する必要があるそうです。

CMSDの管理画面にて、文字を入力し
吐き出すXMLファイルはどうやら、CR+LFの改行コードになっており
これを何とかしようと、スキーマ・デザイン・埋め込みファイルを
CRにしてアップロードしたのですが、実現できませんでした。

エントリーフォルダにあるxmlファイルを見ると
やはりCR+LFになってました。

どうにかして、XMLの改行コードをCRにして吐き出せないでしょうか。
スキーマ・デザイン・埋め込みファイルのコードを下に記します。

お忙しいとは思いますが、どうぞよろしくお願い致します。

【スキーマ定義】

コード: 全て選択

<?xml version="1.0" encoding="utf-8"?>

<schema name="profile" caption="プロフィール">
	
<data name="birth" type="text" size="20" caption="誕生日" />
		
<data name="horoscope" type="text" size="20" caption="星座" />
		
<data name="type" type="text" size="20" caption="血液型" />
		
<data name="hobby" type="text" size="20" caption="趣味" />
		
<data name="career" type="textarea" cols="50" rows="5" caption="キャリア" />
		
</schema>
【デザイン定義】

コード: 全て選択

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" omit-xml-declaration="yes" />
<xsl:template match="/entry">

<model>

	<person>
	
		<birth><xsl:value-of select="birth" /></birth>
		<horoscope><xsl:value-of select="horoscope" /></horoscope>
		<b-type><xsl:value-of select="type" /></b-type>
		<hobby><xsl:value-of select="hobby" /></hobby>
		<career><xsl:value-of select="career" /></career>
		
	</person>
	
</model>

</xsl:template>
</xsl:stylesheet>
【埋め込み】

コード: 全て選択

<?php require_once("../cmsdesigner/include/view.php.inc"); // encoding="euc-jp"?>
<cmsd:output encoding="utf-8" />
<cmsd:entry name="m1_profile" design="default" output="xml" />
<?php cmsd_end_template();?>

Re: CMSDとFlashの連動に関して

Posted: 2007年7月31日(火) 11:08
by webmaster
 okakensantaさん、いつもお世話になっております。

 FlashでのXML読み込みについてですが、弊社でFlash8(ActionScript2)を
使って試したところ、ignoreWhiteをtrueに設定することで問題なく読み込めて
います。
 http://livedocs.adobe.com/flashlite/2_j ... 00902.html

 実際に動作しているサンプルはこちらです。
 http://cms.al-design.jp/course.php?eid=00003

 バージョンの違いなどあるかもしれないので、お使いのFlashのバージョンを
ご確認頂いてもよろしいでしょうか。
 また、「改行コードでうまくいかない」というのは、何かエラーが発生するという
事でしょうか。それとも、文章中の改行が2回出力されたりとか、改行されない、
というような事象でしょうか。

 最終的に出力されるXMLデータをここに貼り付けて頂くか、そのURLを教えて
頂けると、また何か分かるかもしれません。

 CMSDが出力するXMLの改行コードは、PHPのXMLライブラリが出力する改行
コードをそのまま出力している為、改行コードの取扱いについてはXMLライブラリ
の仕様に合わせた形となっております。

Posted: 2007年7月31日(火) 12:03
by okakensanta
早々のご返答、ありがとうございます。
私が使っているFlashのバージョンは、
Flash Proffessional Version8.0です。
FlashのActionScriptは、ルート1フレーム目に下のように記しています。
長くてすみません :cry:

コード: 全て選択

//XMLオブジェクトを定義----------------------------------
var profileXML = new XML();
//空白を無視---------------------------------------------
profileXML.ignoreWhite = true;
//XMLをロード---------------------------------------------
profileXML.load("http://kmln3366.cpinet.jp/cqlea/m1/profile.php");
profileXML.onLoad = ModelMenu;
function ModelMenu(success){
		if(success){
			rootNode = profileXML.firstChild; //<model>
			childNode = rootNode.firstChild; //<person> 
			grandNode = childNode.childNodes;//1番目<person>以下のノード配列
			
			birthText = grandNode[0].firstChild.nodeValue; //<birth>
			horoText = grandNode[1].firstChild.nodeValue; //<horoscope>
			bloodText = grandNode[2].firstChild.nodeValue; //<type>
			hobbyText = grandNode[3].firstChild.nodeValue; //<hobby>
			careerText = grandNode[4].firstChild.nodeValue; //<career>
	}else {
		gotoAndStop("error");
		}
}
改行コードが上手くいかないというのは、webmaster様がおっしゃる
『文章中の改行が2回出力されてしまう』
という問題です。

私なりの予想では、改行コードがCR+LFになっているからではないかということです。

サイトは、下記URLになっております。
http://kmln3366.cpinet.jp/cqlea/index.html

上記サイトの下部に出てくる女性の写真をクリックし、
左に出てくる『Profile』ボタンを押すと、各女性のプロフィールが
CMSDから吐き出したXMLを読み込むようにしています。

Flashで読み込もうとしているXML(PHP)ファイルは下記にございます。
http://kmln3366.cpinet.jp/cqlea/m1/profile.php

お忙しい中すみませんが、よろしくお願い致します。

Posted: 2007年7月31日(火) 12:58
by webmaster
 詳細なご連絡、ありがとうございます。
 大変素敵なFlashサイトですね!
 FlashとCMSDの連携事例が増えて欲しいと思っていた為、大変参考に
なります。

 改行コードの件は現在対処方法を検討しているところなのですが、その前に
下記2点をお試し頂いてもよろしいでしょうか。

・デザイン定義の「omit-xml-declaration」を"no"にするか、もしくは属性ごと削除する。
・埋め込みタグを以下のようにする。

コード: 全て選択

<?php require( "cmsdesigner/include/view.php.inc" ); ?><cmsd:entry name="m1_profile" design="default" output="xml" /><?php cmsd_end_template(); ?>
 omit-xml〜は、xml宣言を出力しない、という命令で、CMSDのコンテンツ
埋め込み時にはここはyesにしなければならないのですが、XMLデータとして
出力する場合にはxml宣言が必要になります。

 また、埋め込みタグ側のcmsd:outputタグですが、デザイン定義側で出力
文字コードを指定していない為、ここは自動的にUTF-8になります。
 その為、埋め込みタグ側でのcmsd:outputでUTF-8を出力する必要はありません。
(・・・のはずなのですが、もしEUC-JPで出力されてしまったらすいません。
 再度cmsd:outputを指定してください。(^^;)

 タグの間の改行を詰めているのは、XMLデータに余計な改行が含まれない
ようにする為です。

 以上、よろしくお願い致します。

 改行が2回繰り返される件については、Flash側で何らかの対応ができないかを
検討してみます。

Posted: 2007年7月31日(火) 15:20
by webmaster
 CR+LFの件ですが、こちらにFlash側での対処コードを見つけました。
 http://blog.keitap.com/archives/000621.html

コード: 全て選択

function crlf2lf(str:String) { 
  var p : Number = 0;
  while ((p = str.indexOf('\r', p)) != -1) { 
    if (str.charAt(p + 1) == '\n') { 
      str = str.substring(0, p) + str.substring(p + 1); 
    }
    p++;
  }
  return str; 
}
 ActionScript3ではもう少し簡単にできると思うのですが、こちらの方が
汎用的だと思います。
 ActionScriptに親しんでいる場合には、splitを使った方法がより効率的かも
しれませんが、具体的なコードを書いている時間が取れませんでした。

 使う際には、

コード: 全て選択

careerText = crlf2lf( grandNode[4].firstChild.nodeValue );
 というような形で可能かと思います。
 多少面倒になりますが、一度お試し頂ければ幸いです。

ありがとうございます!できました!

Posted: 2007年8月01日(水) 16:15
by okakensanta
ありがとうございます!できました!
私もどうしてもFlashとCMSDの連携がやりたかったので感動です!
これでクライアントにFlash+CMSDの提案をしていけます!

お忙しい中、わざわざお調べになってくれてありがとうございます。
ありがとうございました!