詳細ページ(エントリ1件用)で非公開の設定にしても現在時刻が表示されてしまう

「まったく何も分からない・・・」そんなユーザーさんの為のフォーラムです。どんなご質問でもお気軽にどうぞ。
返信
hohosawa
記事: 3
登録日時: 2005年3月25日(金) 10:35

詳細ページ(エントリ1件用)で非公開の設定にしても現在時刻が表示されてしまう

投稿記事 by hohosawa » 2007年2月10日(土) 11:37

お忙しいところ申し訳ありませんが
1点ご質問させて下さい。

非公開の設定にして、詳細ページ(エントリ1件用)を確認すると
なぜか現在時刻が表示されます。 :(
(※既存ページに部分的に埋め込んで使用しています)
これを現在時刻も表示されない、文字通りの非公開にしたいのですが、、、
ご教授よろしくお願いいたします。

尚、一覧ページ(エントリ一覧)では非公開設定にすると、現在時刻は表示されずに非公開になります。

webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

Re: 詳細ページ(エントリ1件用)で非公開の設定にしても現在時刻が表示されてしまう

投稿記事 by webmaster » 2007年2月14日(水) 16:00

 hohosawaさん、ご質問ありがとうございます。

 この件ですが、ひょっとすると、「表示の確認」機能を使った場合のお話でしょうか。

 表示の確認機能を使った場合に非公開エントリが表示される(ログインしている
場合のみ)のは、仕様となっております。これは、公開前でも表示内容を確認したい
というご要望があった為です。

 尚、表示の確認機能を使った場合でも、エントリ一覧の表示については非公開
エントリは表示されません。

 それとも、「なぜか現在時刻が表示される」とのことで、非公開エントリを表示しようと
すると、表示した際の現在時刻が表示される、ということでしょうか?
(つまり、表示する度に時刻が変わる)

 大変お手数ですが、お返事をお待ちしております。

hohosawa
記事: 3
登録日時: 2005年3月25日(金) 10:35

投稿記事 by hohosawa » 2007年2月14日(水) 18:18

返信ありがとうございます。

表示の確認機能はとても重宝させて頂いています。
ただ今回は管理画面からボタンをクリックしての確認ではなく、
利用者が実際にアクセスするページに『現在の時刻』のみが
非公開にしているのに表示されてしまうのです。。。
(現在の時刻以外は表示されません)

省略している箇所もありますが下記のように使用しています。


■html(php)の一部分に埋め込むタグ
<cmsd:entry name="ferry" design="title" />

■スキーマ ferry.schema.xml
<?xml version="1.0" encoding="UTF-8"?>
<schema name="ferry" caption="XXXXX" >
<data name="title" type="text" caption="XXXXX" output="text1" />
</schema>

■デザイン定義 ferry.title.design.xsl
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" encoding="EUC-JP" omit-xml-declaration="yes" />
<xsl:template match="/entry">

<xsl:if test="not(title='')">
<h3><xsl:value-of select="title" /></h3>
</xsl:if>
<xsl:if test="title=''"></xsl:if>

</xsl:template>
</xsl:stylesheet>

■非公開にすると表示される時間の例(公開時は表示されません)
2007-02-14 17:25

>非公開エントリを表示しようとすると、表示した際の現在時刻が表示される、ということでしょうか? (つまり、表示する度に時刻が変わる)

その通りです。。。

>尚、表示の確認機能を使った場合でも、エントリ一覧の表示については非公開
エントリは表示されません。

エントリ一覧用のデザイン定義で作れば良さそうですね。。。
:? (通常、こういった場合はエントリ一覧用のデザイン定義で作成するのでしょうか?)

分かりづらくて申し訳ないのです。
お手数をおかけ致しますが
よろしくお願いいたします。

webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

投稿記事 by webmaster » 2007年2月15日(木) 11:13

 hohosawaさん、お返事ありがとうございます。

 「表示の確認」機能ではなく、通常表示の話だということで、認識がズレており申し訳
ありませんでした。

 現在時刻の話も、本当に現在時刻のみが表示される、ということで、こちらとしても
かなり謎の挙動となっております。
 弊社で再現させようといろいろやっているのですが、再現させることもできておりません。

 CMSDの仕様としては非公開エントリはそもそもデザイン定義に渡される前に
除外される為、デザイン定義の書き方や埋め込みタグの書き方等に左右される
事はないと思います。

 「現在時刻」というと、1.1.5aで追加した「現在時刻の取得機能」が絡んだ不具合
である可能性が高い為、もう少し調査してみます。m(__)m

webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

投稿記事 by webmaster » 2007年2月15日(木) 11:45

 webmasterです。

 原因が分かりました。というか、ご質問内容をようやく認識できました。
 今回の現象は、次のようにして回避可能です。
 大変お手数ですが、下記変更をお願いしてよろしいでしょうか。

コード: 全て選択

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

<xsl:if test="not(title='')">
<h3><xsl:value-of select="title" /></h3>
</xsl:if>
<xsl:if test="title=''"></xsl:if>

</xsl:template>
[color=red]<xsl:template match="/noentry">
</xsl:template>[/color]
</xsl:stylesheet> 
 赤字部分を追加して下さい。

 一般的に「非公開」のエントリを「表示」しようとすることは無いとは思うのですが、
今回ではそれが必要になったということで、この現象が発見されたものと思います。

 この現象は不具合ではなく仕様となります。

 以降、興味のある方に今回の現象をご説明します。

 CMSDでは、非公開のエントリは表示上は「存在しない」ものと扱われます。
 それを表示しようとすると、entrylist要素やentry要素ではなく、「noentry」という
要素が出力されるようになっています。

 これまではnoentry要素の中身は主に空っぽだったのですが、1.1.5a以降は
現在時刻情報が追加されるようになった為、今回のような動作が起こるようになった
ようです。

 ただ、それでも通常は「デザイン定義で指定しないものは出力されない」はずなのですが、
どうもPHPで利用できるXSLTエンジンは、xsl:templateでマッチするものがなかった
場合に元のデータをそのまま出力してしまうようで、今回から追加された現在時刻情報が
表示されてしまった、という状況のようです。

 何かにマッチさせればいいわけなので、noentry に対してマッチさせる xsl:template
要素を追加で置くようにすることで、今回の事象は回避可能です。

 尚、

コード: 全て選択

<xsl:template match="/noentry">
 指定された情報は存在しません。
</xsl:template>
 のように、エントリが存在しない場合のメッセージを表示させることもできます。

 以上、いろいろとお手間をおかけして申し訳ありませんでした。

 ご不明な点がございましたら再度ご質問頂ければ幸いです。m(__)m

返信