ページ 1 / 1
別々のスキーマを合わせて表示したい。
Posted: 2008年7月18日(金) 19:02
by suzuki
現状、一つのエントリ入力画面でお店情報と、イベント情報、アルバイト情報を入力し、
店舗ページとして全ての内容を表示しております。
しかし、イベント情報や、アルバイト情報の更新タイミングが問題となってしまい、
「お店情報(shop)」と「イベント情報(shop-e)」と「アルバイト情報(shop-a)」を
それぞれ別のスキーマとして設定管理しながら、現状の店舗ページ同様に「お店情報」と「イベント情報」と「アルバイト情報」を
一度に表示することができないか考えています。
※()内はスキーマの名前です。
イベント情報は、月初に前月分のイベントと当月分のイベント情報を仮想で更新予約する機能を付けようと思い
A店のイベント情報1とイベント情報2を公開非公開設定を利用し交互にお店情報に表示させようと思います。
このとき、エントリ入力画面にお店のグループを作り、お店を選択させグループ管理させようと思います。
「shop-e」スキーマ
コード: 全て選択
<data name="shop" type="menu" caption="ショップ" group="True" >
<menuitem id="1">A店</menuitem>
<menuitem id="2">B店</menuitem>
</data>
そして、「お店情報」のエントリ入力画面で、該当するイベント情報のグループを指定しておきます。
「shop」スキーマ
コード: 全て選択
<data name="event" type="menu" caption="ショップイベント情報" group="True" >
<menuitem id="1">A店イベント情報</menuitem>
<menuitem id="2">B店イベント情報</menuitem>
</data>
このような指定をし、ブラウザで「shop.php?eid=×××」
のパラメータを受け取った時に
<cmsd:entry name="shop" design="default" />
のデザイン定義内で
<xsl:if test="event='1'">
の時に、イベント情報のグループ「shop='1'」のエントリーを抽出し、
さらに、公開非公開設定から、公開期間の方を表示させる。
なんて事が出来ないものか考えていますが、こんな事可能ですか?
同時にアルバイト情報も同じです。
Re: 別々のスキーマを合わせて表示したい。
Posted: 2008年7月31日(木) 16:32
by webmaster
suzukiさん、お返事が大変遅れまして申し訳ありません。
この件については要望も多いのですが、CMSD本体の機能としては用意しており
ません。
代わりに、IFRAME埋め込みによって同等のことを実現することが可能です。
このケースですと、例えばイベント情報のHTMLを部分的に表示する
「eventlist_iframe.php」を作って置き、お店の詳細ページにIFRAMEとして
埋め込むようにします。
埋め込む際のiframeタグのsrcとして、eventlist_iframe.php?shop=1
のようなURLを与えます。
デザイン定義の例としては、
<iframe src="eventlist_iframe.php?shop={shop}">
<a href="eventlist_iframe.php?shop={shop}">イベント情報一覧</a>
<iframe>
のようになるかと思います。iframe内のaタグは、iframe非対応のブラウザ用
です。
iframeの高さがどうしても固定になりますし、CSSの管理が面倒になりますが、
現状ですとこれがベストかと思います。
javascriptを使ってiframeの代わりに直接サーバからHTML部分を読み込むという
方法もあり、こちらですとCSSや高さの問題が解決しますが、javascriptによる生成
の為、検索エンジンにはヒットしにくくなります。
お役に立たないかもしれませんが、何かの参考になれば幸いです。
回答ありがとうございます
Posted: 2008年8月01日(金) 16:22
by suzuki
CMSDでは機能的に別々のスキーマの情報を合わせて表示することは基本的に出来ないということですね。
ただ「iframe」や「javascript」を利用すれば表現可能とのことですが、
「iframe」については説明を読むとりかいできますが、
「javascript」で直接サーバ読み込むとありますが、あまりjavascriptは詳しくないので
イメージがわきません。
具体的にどのような方法で読み込むのでしょうか?
可能であれば教えて頂けますでしょうか?
SEO的にはこのページ(店舗情報ページ)はそれほど気にしなくても良いので
出来ればjavascriptが使えるのであれば試してみたいと思います。
Re: 回答ありがとうございます
Posted: 2008年8月01日(金) 17:37
by webmaster
suzukiさん、お返事ありがとうございます。
javascriptによる読み込みは、所謂ajaxという方法になります。
ajaxは自分で全てコーディングする方法もありますが、ブラウザ毎の違いなどが
あり、現在ではライブラリを利用するのが一般的です。
恐らくデザイナーの方に最も分かり易いajaxライブラリはjQueryというものに
なるかと思います。私自身、jQueryを最も良く利用します。
http://jquery.com/
こちらからダウンロードできるjquery.jsをページのhead内でリンクした上で、
例えば次のようにデザイン定義で記述できます。
コード: 全て選択
<div onload="$(this).load('eventlist_iframe.php?shop={shop}')"></div>
これで、このdivタグが読み込まれると同時にeventlist_iframe.php?shop=xxx
へのリクエストが実行され、divタグ内にその結果が表示されます。
$(xxx).load( url )
と書くことで、xxxという要素の内部にurlの内容を読み込みます。
jQueryの機能です。
xxxの部分にthisと入れているのは、読み込む対象自身のonloadイベントで
このコードを記述している為です。これを、thisを使わずに
コード: 全て選択
<div id="eventlist" onload="$('eventlist').load('eventlist_iframe.php?shop={shop}')"></div>
のように記述しても良いと思います。
実際に試したわけではないので、記述ミスなどあるかもしれませんが、その際には
申し訳ありませんがまたご質問頂ければ幸いです。
ご説明ありがとうございます。
Posted: 2008年8月06日(水) 14:51
by suzuki
まだ試してはいませんが
説明して頂きありがとうございます。
これから試してみたいと思います。
うまくいかなかった場合またご質問するかもしれませんが
よろしくお願いします。
インラインフレームの方は表示しました。
Posted: 2008年8月09日(土) 11:58
by suzuki
お世話になります。
webmaster様の指示のもとスキーマやら、デザイン定義などを色々いじりながら試してみたところ、
インラインフレームについては「お店情報」ページから「アルバイト情報」のページを読み込むことが出来ました。
公開設定についても自動的に読み込むアルバイト情報を切り替えて表示ができました。
ありがとうございます。
こんな感じです。
コード: 全て選択
<iframe src="shop-rec.php?shop={shop}">
<a href="shop-rec.php?shop={shop}">イベント情報一覧</a>
</iframe>
受け取った{shop}のパラメータから
該当するアルバイト情報を読み出します。
コード: 全て選択
<cmsd:entry name="shop-rec" design="default" >
<cmsd:group key="shop" />
</cmsd:entry>
ただ、一点だけ問題がありまして、公開設定を利用した場合において、
公開終了日をすぎた場合、アルバイト情報表示エリアに現在時刻が表示されてしまいます。
例えば以下の情報が予め登録されているとします。
08年8月1日〜31日までのアルバイト情報
08年9月1日〜30日までのアルバイト情報
この場合10月1日からのアルバイト募集を表示しないとなった場合
管理画面では9月30日までの情報が掲載終了した時点で、
お店情報のページのアルバイト情報は表示しなくなるのですが、
代わりにアクセスした日時が表示されてしまいます。
この表示は消せますでしょうか?
あと長くなってすいませんJquery.jsを利用しての表示ほうほうですが、
お店情報ページ(shop.php)のヘッダには
コード: 全て選択
<script type="text/javascript" src="../js/jquery.js"></script>
このように設定し、
お店情報のデザイン定義に
コード: 全て選択
<div onload="$(this).load('shop-rec.php?shop={shop}')"></div>
このように設定致しました
その結果以下のような情報がソースには表示されています。
コード: 全て選択
<div onload="$(this).load('shop-rec.php?shop=1')"></div>
ここまでは情報を引っ張ることが出来るのですが、
アルバイト情報を表示することが出来ません。
なにぶんjavascriptやajaxについては素人なもので、これ以上何をして良いのやら
皆目検討がつきません。
何がいけないのでしょうか?

Re: インラインフレームの方は表示しました。
Posted: 2008年8月27日(水) 13:28
by webmaster
suzukiさん、お返事が遅れまして申し訳ありません。
既に解決済みか、別の方法を取られているかもしれませんが、回答させて頂きます。
データがなかった場合に日付が表示されてしまう件については、noentryに
対する記述をデザイン定義に加えることで対処可能です。
詳しくはこちらのトピックをご覧下さい。
http://cms.al-design.jp/phpbb/viewtopic.php?t=698
ajaxの件については、拝見する限りはそれで問題ないように見えます…。
「shop-rec.php?shop=1」を直接ブラウザに入力すると、問題なく内容が
表示されているでしょうか?
jQueryのloadは、該当の要素に、指定したURLの内容をそのまま放り込む
というだけなので、ブラウザで問題なく表示されているのであれば、それで
うまくいくはずなのですが…。
一度ご確認頂ければ幸いです。
一部表示が出来ました
Posted: 2008年8月27日(水) 18:20
by suzuki
返信ありがとうございます。
日付の表示については、ご指示いただいた内容で進めてみます。
ajaxの件について
コード: 全て選択
<script type="text/javascript" src="../js/jquery.js"></script>
コード: 全て選択
<div onload="$(this).load('shop-rec.php?shop={shop}')"></div>
この記述ではどうにも表示が出来ませんでした。
そこで色々とサイトを検索して一部表示することが出来ました。
以下のサイトから「jquery.inc-5.js」をダウンロードして
http://johannburkard.de/blog/programmin ... lugin.html
shop.phpに以下を追加し
コード: 全て選択
<script type="text/javascript" src="../js/jquery.js"></script>
<script type="text/javascript" src="../js/jquery.inc-5.js"></script>
さらに店舗情報のデザイン定義に以下を追加したところ
アルバイト情報を表示することが出来ました。
コード: 全て選択
<div class="inc:shop-rec.php?shop={shop}"></div>
ただ、何故かFirefoxで確認すると、win,macとも
アルバイト情報だけ日本語が文字化けをしてしまいます。
何か原因があるのでしょうか?
自己解決しました
Posted: 2008年8月30日(土) 10:38
by suzuki
自己解決しました
ページ個別の出力文字コードを指定したら文字化けが無くなりました。
コード: 全て選択
<cmsd:output encoding="utf-8"/>
コレで、なんちゃって更新予約が出来ます。