指定した文字数をオーバーした場合

「まったく何も分からない・・・」そんなユーザーさんの為のフォーラムです。どんなご質問でもお気軽にどうぞ。
返信
rm
記事: 2
登録日時: 2006年9月02日(土) 02:53

指定した文字数をオーバーした場合

投稿記事 by rm » 2006年9月02日(土) 03:09

一覧ページには本文の最初の100文字を表示し、
・最後に「....」をつけて、後を表示しない。
・「....」をクリックすると、一件表示ページにリンクして全文が読める。
・100文字を超えない場合は「....」は表示しない。

というようなことがしたいのですが、可能でしょうか?

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

Re: 指定した文字数をオーバーした場合

投稿記事 by webmaster » 2006年9月02日(土) 22:09

 rmさん、ご質問ありがとうございます。
 ご質問の件ですが、可能です。

 詳しい説明は省くのですが、以下のXSLT関数を使って実現可能です。

 ■文字列の一部を得る関数
 substring( mytext1, 1, 100 )
 この例では、mytext1項目の1文字目から100文字分を取得しています。
 <xsl:value-of select="substring( mytext1, 1, 100 )" disable-output-escaping="yes" />
 のようにすることで表示可能です。

 ■文字列の長さを得る関数
 string-length( mytext1 )
 この例ではmytext1項目の長さを取得しています。
 <xsl:if test="string-length( mytext1 ) > 100">
 のようにifの中で使用することができます。(>は、">"の意味です)

 if文でmytext1の長さをチェックし、100文字以上ならばsubstringを使って
100文字分を取得し、"..."で詳細ページへのリンクをつけます。
 100文字以内であれば、そのまま表示します。

 但し、substringを使用する場合には一つ注意点があります。
 それは、substringは、タグも1文字と数えてしまうという点です。
 この為、例えば

「今日は楽しかったです。<br />」

 という文章があって、これを先頭から15文字分取り出すと、

「今日は楽しかったです。<br 」

 となってしまい、タグが途中で切れてしまいます。
 これを防ぐ為に、CMSDにはエントリ中のタグを除去して表示する機能があります。
 表示用の埋め込みタグに、

<cmsd:entrylist name="myentry1" design="default" tagremoving="on" />

 のように、tagremoving="on" を追加します。
 これを指定しておけば、正しく先頭100文字を取得することができるように
なります。

 但し、タグ情報が失われてしまう為、用途が限られると思います。
 その点だけ、ご了承頂ければ幸いです。m(__)m

 ご不明な点はお手数ですが再度ご質問ください。

rm
記事: 2
登録日時: 2006年9月02日(土) 02:53

投稿記事 by rm » 2006年9月03日(日) 00:39

うまくいきました!
丁寧なご返答ありがとうございました!

ちょむん
アクティブユーザー
記事: 10
登録日時: 2007年3月29日(木) 09:33

関連で

投稿記事 by ちょむん » 2007年4月06日(金) 00:21

上記質問と同じことを行いたく、方法を探しておりました。
上記質問に関連してお伺いしたいのですが、

 ■文字列の一部を得る関数
 substring( mytext1, 1, 100 )
 この例では、mytext1項目の1文字目から100文字分を取得しています。
 <xsl:value-of select="substring( mytext1, 1, 100 )" disable-output-escaping="yes" />
 のようにすることで表示可能です。

とありますが、この「mytext1」はhtmlでないといけないのでしょうか?
CMSで生成したページのタイトルページ(list)に、生成したページの一部を入れたいのです。

tsu
パワーユーザー
記事: 208
登録日時: 2006年1月16日(月) 12:00
お住まい: さいたま

投稿記事 by tsu » 2007年4月06日(金) 13:36

この「mytext1」はhtmlでないといけないのでしょうか?
このhtmlとはCMSdesignerで設定するhtml1,html2,text1,text2のコトでしょうか?
それとも他のファイルの内容でしょうか?

CMSDのことであれば多分どれでも使えると思います。

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

Re: 関連で

投稿記事 by webmaster » 2007年4月06日(金) 15:45

 ちょむんさん、ご質問ありがとうございます。
 tsuさんのご回答の通り、特に output="html1"や"html2"でなければならない
ということはありません。
 ただ、最初の回答にもあるとおり、埋め込みタグ側で tagremoving="on"を
指定する必要がある為、用途が限られるかと思います。

 エントリ一覧ページのデザインとして、タイトルだけでなくその内容をも表示
したい、という場合には、tagremoving="on"を指定した上で、上記の方法が
取れるかと思います。
 その場合には改行等は無視される事になりますのでご留意下さい。m(__)m

ちょむん
アクティブユーザー
記事: 10
登録日時: 2007年3月29日(木) 09:33

出来ました!

投稿記事 by ちょむん » 2007年4月07日(土) 09:28

tsuさま、webmasterさま、ご回答ありがとうございました!
希望通りのことが出来ました。

↓↓これから、同じようなことを検索される方の参考になればと思います↓↓↓
今回行いたかったのは、情報検索サイトによくある情報一覧ページ(list)に、記事のタイトルと記事内容の前半を表示し、「続きを読む」でCMSDで生成した記事の詳細ページ(eid=******)に飛ぶというものでした。

sal
アクティブユーザー
記事: 23
登録日時: 2006年11月20日(月) 11:53

文字列制限というのはできませんでしょうか?

投稿記事 by sal » 2008年11月26日(水) 21:01

すみません。こちらのご質問を拝見させていただいて
追加で質問させていただきたいのですが、
文字数の制限ではなくて、1〜5列目までを表示して6行目は表示しない
というような、文字列の制限というのはできませんでしょうか?
例えば、<br/>を5回使用した場合は次の文字は表示しないとか。
どうかよろしくお願い致します。

返信