ページ 1 / 1

rssの出力で「new」の表示はできますか?

Posted: 2007年1月29日(月) 14:55
by きょうこ
お世話になります。今回はRSS出力について質問したく、書き込みました。

リファレンスマニュアル−「6.3.8 RSSの出力」を見て、rssを配信しています。
うまく配信されるところまでできているのですが、
「現在の日付から●日前のエントリに[New]という表示をさせる」
ことができないかで、悩んでいます。


下記のトピックを拝見すると、Newという表示は難しいようなのですが、
その後のバージョンアップ時などで対応済みということはありませんか?

■外部XML/RSSの読み込み機能
http://cms.al-design.jp/phpbb/viewtopic ... hlight=rss

関連する記事を探してみたのですが、ちょっとわからず、、教えていただきたいと思います。

もし既に該当するトピックがございましたら、そちらを教えていただけると助かります。

よろしくお願い致します。

Re: rssの出力で「new(アイコン)」の表示はできますか?

Posted: 2007年1月31日(水) 17:03
by webmaster
 きょうこさん、ご質問ありがとうございます。
 お返事遅れましてすいません。

 リファレンスマニュアル 5.5.14の「「NEW!」表示をする。」が参考になるかもしれません。
 また、最近追加された機能として現在日時の取得機能があります。
 こちらはリファレンスマニュアルの5.5.15をご覧下さい。

 ご不明な点はまたご質問頂ければ幸いです。

Re: rssの出力で「new(アイコン)」の表示はできますか?

Posted: 2007年2月01日(木) 02:13
by きょうこ
webmaster様。レスありがとうございます。

rss出力は成功していると書いたのですが、マニュアルとサンプル.xslを
そのまま使って作ったもので、正直なところ、内容はほとんど理解できていません。
マニュアルを見ても、また同梱されているcms_doc_rssの各サンプルや利用方法を
見ても、いまいち何をしているのかが理解できないのです。
そのため、かなり初心者レベルの質問になのですが、お許し下さい。
webmaster さんが書きました:リファレンスマニュアル 5.5.14の「「NEW!」表示をする。」が参考になるかもしれません。
下記のトピでは、現在の日付を取得することができないため、Newマークを
つけることができないと書いてあります。

■外部XML/RSSの読み込み機能
http://cms.al-design.jp/phpbb/viewtopic ... hlight=rss

これはRSS読み込みだからできなかったのであって、出力の場合は、5.5.14を
参照すれば、Newマークをつけることが可能なのでしょうか?

また、この機能はサイト内のお知らせ等で使っているので、
機能としては理解しているのですが、rss出力で使う場合、
どこに記述すればいいのでしょうか?
CMS Designerで使用されているrssの場合はどこに記述するのかと
教えていただけるとわかりやすいのですが。。。

webmaster さんが書きました:また、最近追加された機能として現在日時の取得機能があります。こちらはリファレンスマニュアルの5.5.15をご覧下さい。
5.5.14の場合と、5.5.15の機能の違いが今ひとつ理解できないのですが、
今回のようにNewマークをつけたいという場合は、どちらの機能を使っても
実現可能ということなのでしょうか?


CMS Designerを使用されている方はxsltにも詳しい方ばかりのようで、
的はずれな質問をしているのかも……と思い、心苦しいのですが、
ご回答よろしくお願い致します。

Re: rssの出力で「new(アイコン)」の表示はできますか?

Posted: 2007年2月01日(木) 07:19
by webmaster
 きょうこさん、ご質問ありがとうございます。

 RSS関連については「RSS対応」と謳ってはいるものの、実際のところXSLTテンプレート
を応用しているだけなので、結構複雑かと思います。

 ところで、実は良くわかっていないのですが、rssの出力でnewの「アイコン」を表示
するというのは、具体的にはどのようにされたいでしょうか。
 rssにアイコンを表示する、という部分についてもう少しご説明頂ければと思います。

 rssとして出力する際に、titile部分の先頭に「[new]」という文字を挿入する、という
事ではないのですよね?(「アイコン」と書いてありますので)。
 description(説明)の部分の先頭に、<img src="http://〜/new.gif" /> のような
アイコン画像のタグを挿入したい、ということでしょうか。しかし、rssの情報は基本的に
画像データを無視して表示されることが多いので、imgタグを挿入しても意味はないかも
しれません。

 例えば前者であれば、

コード: 全て選択

<title><xsl:value-of select="タイトル用項目名" /></title> 
 の部分を、

コード: 全て選択

<title><xsl:if test="@daysago<7">[NEW]</xsl:if><xsl:value-of select="タイトル用項目名" /></title>
 のように変更すればOKかと思います。
 またご不明点がありましたらよろしくお願い致します。
これはRSS読み込みだからできなかったのであって、出力の場合は、5.5.14を
参照すれば、Newマークをつけることが可能なのでしょうか?
 はい、RSSの読み込みと出力はまったく別の機能となります。
 RSSの読み込みでは、現在日時を取得する機能がない為、現在では実現することが
できません。m(__)m
5.5.14の場合と、5.5.15の機能の違いが今ひとつ理解できないのですが、
今回のようにNewマークをつけたいという場合は、どちらの機能を使っても
実現可能ということなのでしょうか?
 はい、5.5.14は、5.5.15の機能がなかった頃に、少しでも簡単に「NEW」表示を実現
させる方法として提供したものです。5.5.15の機能を使えば5.5.14も実現可能です。
 ただ、5.5.14の方が単純ですので、利用もしやすいと思います。
 5.5.15はもっと複雑なことを実現可能となっていますが、その分使い方もちょっと難しい
です。

 その他、ご不明点はなんなりとご質問下さい。
 XSLTは日本のウェブデザイナーのほとんどの方が詳しくないと思いますので、お気軽によろしくお願いします。

Re: rssの出力で「new(アイコン)」の表示はできますか?

Posted: 2007年2月01日(木) 09:41
by きょうこ
webmaster様、いつも素早いご回答ありがとうございます。

RSSについてはお客様からも要望されることが多いので、助かっています。

 ところで、実は良くわかっていないのですが、rssの出力でnewの「アイコン」を表示
するというのは、具体的にはどのようにされたいでしょうか。
 rssにアイコンを表示する、という部分についてもう少しご説明頂ければと思います。
申し訳ありません。。アイコンに限定していたのではなく、[New]という文字を表示させることができればOKです。
RSSですから、画像が無視されるのは当然ですよね。。混乱させてしまってすみません!

教えていただいたように次のように記述してみました。

コード: 全て選択

<title><xsl:if test="@daysago<7">[NEW]</xsl:if><xsl:value-of select="タイトル用項目名" /></title> 
"@daysago<7" ではうまくいかなかったのですが、既に一覧表示のデザイン定義 で設定していた15か14の数値を入れたところ、うまくいきました。


実現できたので問題はないのですが、下記の点がよく理解できずにいるため、よろしければ教えていただけると幸いです。


現在、下記のようなデザイン定義を作っています。
1)news.list.top.design.xsl (トップページに組み込むためのデザイン定義)
2)news.list.default.design.xsl (一覧)
3)news.default.design.xsl  (1件表示)


そして、1)と2)に下記のように記述しています。

コード: 全て選択

<xsl:if test="@daysago<15">
	<dd class="new">
		<a href="news.php?eid={@id}">
			<xsl:value-of select="title" disable-output-escaping="yes" />
		</a><span class="none"> 【NEW】</span>
	</dd>
</xsl:if>
<xsl:if test="@daysago>14">
	<dd>
		<a href="news.php?eid={@id}">
			<xsl:value-of select="title" disable-output-escaping="yes" />
		</a>
	</dd>
</xsl:if>

RSS用のデザイン定義には次のように記述しました。
14を15に変えてもうまくいきました。

コード: 全て選択

        <title><xsl:if test="@daysago<14">[NEW]</xsl:if><xsl:value-of select="title" /></title>
5.5.14は、5.5.15の部分がわからず悩んでいたのですが、この説明でとてもよくわかりました :D
はい、RSSの読み込みと出力はまったく別の機能となります。
 RSSの読み込みでは、現在日時を取得する機能がない為、現在では実現することが
できません。m(__)m
5.5.14は、5.5.15の機能がなかった頃に、少しでも簡単に「NEW」表示を実現
させる方法として提供したものです。5.5.15の機能を使えば5.5.14も実現可能です。
 ただ、5.5.14の方が単純ですので、利用もしやすいと思います。
 5.5.15はもっと複雑なことを実現可能となっていますが、その分使い方もちょっと難しいです。


いつもすばやくご対応いただけるので助かっています。
今後ともよろしくお願いいたします。

Re: rssの出力で「new(アイコン)」の表示はできますか?

Posted: 2007年2月01日(木) 15:24
by webmaster
きょうこ さんが書きました: 実現できたので問題はないのですが、下記の点がよく理解できずにいるため、よろしければ教えていただけると幸いです。
うまく使用されているようなので、こちらから見ると全て理解されているように見えるのですが、ご質問の意味は@daysagoの使い方ということでよろしかったでしょうか。

@daysagoは、そのエントリの更新日時が、現在日時から数えて「○日前」かを取得するものです。
XSLTでは<xsl:if>を使って「ある特定の条件の場合のみ○○を出力せよ」という事ができるので、これを組み合わせます。

<xsl:if>は、test属性の中身を条件式として判断し、結果が「成立する(=真:Trueである)」か「成立しない(=偽:Falseである)」かによって処理を変えることができます。結果が真の場合にのみ、<xsl:if>の内部を実行します。

コード: 全て選択

<xsl:if test="@daysago<7">[NEW]</xsl:if>
ここでtest属性の中身が「@daysago<7」となっていますが、この「&lt:」が「<」を表すというのはHTMLでも同じなのでお分かりかと思います。HTMLやXML中に「<」を直接書くと、タグの開始と混乱してしまうので、「<」のように書きます。ちなみにltとはless thanの略です。「>」は>(greater than)と書きます。

つまり、「@daysago<7」は「@daysago<7」という意味になります。これはつまり、「@daysagoが7より小さかったら」という条件を表す不等式です。

全部合わせると、

コード: 全て選択

<xsl:if test="@daysago<7">[NEW]</xsl:if>
「@daysagoが7より小さい、つまり6日以内に更新されたエントリならば、[NEW]という文字を表示する」という内容になります。

このようなご説明でよろしかったでしょうか。

その他、ご不明な点はなんなりとご質問下さい。

Re: rssの出力で「new(アイコン)」の表示はできますか?

Posted: 2007年2月02日(金) 02:06
by きょうこ
何度も丁寧にご説明いただき、本当にありがとうございます。

コード: 全て選択

<xsl:if test="@daysago<7">[NEW]</xsl:if>
という意味は理解できていると思っているのですが、

教えていただいたように@daysago<7"にするとうまくいかず、@daysago<14"または@daysago<15"にしなければうまくいかない部分が、いまいち理解できないんです。

news.list.design.xslのファイルにて14、15で設定していることが影響しているのでしょうか?


一覧表示の際とRSS出力の際のNew表示の設定日付を同じにしなければならないというのであれば理解できるのですが、news.list.design.xslにてどう定義しようが関係なく、rss出力の際に、@daysago<7にしてもうまくいくのではないかと思うのです。
どこが違うのか教えていただけないでしょうか?

たびたび申し訳ございませんが、よろしくお願いいたします。

Re: rssの出力で「new(アイコン)」の表示はできますか?

Posted: 2007年2月02日(金) 10:04
by webmaster
 すいません、また外してしまったようで…。

 @daysago<7でうまくいかず、14や15にするとうまくいく、というのは私から
見ても謎です。仰るとおり、「一覧表示の際とRSS出力の際のNew表示の設定日付を
同じにしなければならない」というようなことはありません。

 「うまくいかない」という内容にもよりますが、それは、例えば

・2007年1月1日の更新日時のエントリがある。
・そのエントリに対して「@daysago<7」の条件で[NEW]表示をするデザインを作成。
・そのデザインを、2007年1月5日に表示した。
・ところが、[NEW]が表示されない。
・「@daysago<15」にすると表示された。

 というような感じでしょうか?
 それとも、エラーか何かが表示されるのでしょうか。
 または、本来[NEW]が表示されてはいけない部分にまで[NEW]が表示されるのでしょうか。
 それともまた別の何かが起きているのでしょうか。

 大変お手数ですが、その辺を再度ご連絡頂ければ幸いです。

Re: rssの出力で「new(アイコン)」の表示はできますか?

Posted: 2007年2月02日(金) 12:12
by きょうこ
webmaster様、素早いご対応ありがとうございます。

また、漠然とした質問を投げてしまい、申し訳ありません……。

「うまくいかない」という具体的症状は、webmaster様が書いて下さっているように下記の通りです。
・2007年1月1日の更新日時のエントリがある。
・そのエントリに対して「@daysago<7」の条件で[NEW]表示をするデザインを作成。
・そのデザインを、2007年1月5日に表示した。
・ところが、[NEW]が表示されない。
・「@daysago<15」にすると表示された。
エラー等はなく、きちんと表示されていますが、Newと表示されるべきところに表示されないという具合です。
記述方法が違うのかなと思いましたが、単純に7→15(もしくは14)にするとうまくいくので、記述の問題ではないのかなと思いました。
本来[NEW]が表示されてはいけない部分にまで[NEW]が表示されるということもありません。


下記のようなご回答をいただいておりますので、リスト表示と1件表示で個別の設定ができるのですから、RSSのデザイン定義も同じものと理解して、間違いないということですよね。
 @daysago<7でうまくいかず、14や15にするとうまくいく、というのは私から
見ても謎です。仰るとおり、「一覧表示の際とRSS出力の際のNew表示の設定日付を
同じにしなければならない」というようなことはありません。
この回答を拝見し、認識は間違っていないことに安心しました。
不具合というよりは、私の方で何か勘違いをして処理している気がしますので、もう一度いろいろなケースでチェックしてみます。


P.S.他の方がトピックを拝見された場合のことを考えて、タイトルから「アイコン」の文字を消しました。

Re: rssの出力で「new(アイコン)」の表示はできますか?

Posted: 2007年2月02日(金) 12:45
by webmaster
 認識が合致したようで嬉しいです。:)
 そういうことでしたら、ひょっとするとCMS Designerの不具合である可能性も
あるかもしれません。

 一度、@daysago の内容を画面に出して確認して頂いてもよろしいでしょうか。

<xsl:value-of select="@daysago" />

 で、@daysagoの内容を表示できます。

 エントリ更新日時と現在日時を比較して、@daysagoの内容が間違いなくその
日数差になっているかを目視にてご確認下さい。

 例えば 2007年1月30日0:00 のエントリを、2007年2月2日10:00 に表示すれば、
@daysagoは「3」と表示されるはずです。

Re: rssの出力で「new(アイコン)」の表示はできますか?

Posted: 2007年2月02日(金) 13:55
by きょうこ
具体的な状況をきちんと書いていなかったため、ややこしくしてしまい、申し訳ないです。
そういうことでしたら、ひょっとするとCMS Designerの不具合である可能性も
あるかもしれません。
一度、@daysago の内容を画面に出して確認して頂いてもよろしいでしょうか。
早速、該当ファイルに記述したのですが、RSS出力のデザイン定義ファイルでは、どこに記述していいかわからなかったので、一覧表示のデザイン定義ファイルに記述してみました。

次のような作業を行いました。

1,2007年1月30日付けのエントリを投稿する
2,news.list.design.xslに、<xsl:value-of select="@daysago" />の記述を追加する
 ※<xsl:for-each select="entry">のすぐ下に入れました。
3,news.phpを表示し、日数差を確認
 例えば 2007年1月30日0:00 のエントリを、2007年2月2日10:00 に表示すれば、
@daysagoは「3」と表示されるはずです。
1〜3の作業をした結果、1/30のエントリの日数差は「9」と表示されました。
これは「3」と表示されないとダメってことですよね?

該当ファイルのキャプチャをとりましたので、webmaster様宛に送らせていただきたいと思います。

Re: rssの出力で「new」の表示はできますか?

Posted: 2007年2月28日(水) 12:11
by きょうこ
webmaster様。いつも迅速なご対応ありがとうございます。

質問している件について、2/2にキャプチャを添付してメールを送っているのですが、届いておりますでしょうか…?

別トピで「メールが届かない件について」を見たので、もしかして…!?とちょっと気になって書き込みしました。

届いているのであればそれで構いませんが、もし届いていない場合はどのようにさせていただけばよいか、ご連絡いただけると助かります。

よろしくお願い申し上げます。

Re: rssの出力で「new」の表示はできますか?

Posted: 2007年2月28日(水) 17:35
by webmaster
 きょうこさん、大変失礼致しました。
 只今確認したところ、2/2に確かにメールが届いておりました。
 見過ごしていたようです。お待たせしてしまい、申し訳ありません。m(__;)m

 お返事にもう少しお時間頂くと思いますが、いましばらくお待ち頂ければ幸いです。