一覧ページには本文の最初の100文字を表示し、
・最後に「....」をつけて、後を表示しない。
・「....」をクリックすると、一件表示ページにリンクして全文が読める。
・100文字を超えない場合は「....」は表示しない。
というようなことがしたいのですが、可能でしょうか?
指定した文字数をオーバーした場合
Re: 指定した文字数をオーバーした場合
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
ご不明な点はお手数ですが再度ご質問ください。
ご質問の件ですが、可能です。
詳しい説明は省くのですが、以下の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
ご不明な点はお手数ですが再度ご質問ください。
関連で
上記質問と同じことを行いたく、方法を探しておりました。
上記質問に関連してお伺いしたいのですが、
■文字列の一部を得る関数
substring( mytext1, 1, 100 )
この例では、mytext1項目の1文字目から100文字分を取得しています。
<xsl:value-of select="substring( mytext1, 1, 100 )" disable-output-escaping="yes" />
のようにすることで表示可能です。
とありますが、この「mytext1」はhtmlでないといけないのでしょうか?
CMSで生成したページのタイトルページ(list)に、生成したページの一部を入れたいのです。
上記質問に関連してお伺いしたいのですが、
■文字列の一部を得る関数
substring( mytext1, 1, 100 )
この例では、mytext1項目の1文字目から100文字分を取得しています。
<xsl:value-of select="substring( mytext1, 1, 100 )" disable-output-escaping="yes" />
のようにすることで表示可能です。
とありますが、この「mytext1」はhtmlでないといけないのでしょうか?
CMSで生成したページのタイトルページ(list)に、生成したページの一部を入れたいのです。
Re: 関連で
ちょむんさん、ご質問ありがとうございます。
tsuさんのご回答の通り、特に output="html1"や"html2"でなければならない
ということはありません。
ただ、最初の回答にもあるとおり、埋め込みタグ側で tagremoving="on"を
指定する必要がある為、用途が限られるかと思います。
エントリ一覧ページのデザインとして、タイトルだけでなくその内容をも表示
したい、という場合には、tagremoving="on"を指定した上で、上記の方法が
取れるかと思います。
その場合には改行等は無視される事になりますのでご留意下さい。m(__)m
tsuさんのご回答の通り、特に output="html1"や"html2"でなければならない
ということはありません。
ただ、最初の回答にもあるとおり、埋め込みタグ側で tagremoving="on"を
指定する必要がある為、用途が限られるかと思います。
エントリ一覧ページのデザインとして、タイトルだけでなくその内容をも表示
したい、という場合には、tagremoving="on"を指定した上で、上記の方法が
取れるかと思います。
その場合には改行等は無視される事になりますのでご留意下さい。m(__)m
文字列制限というのはできませんでしょうか?
すみません。こちらのご質問を拝見させていただいて
追加で質問させていただきたいのですが、
文字数の制限ではなくて、1〜5列目までを表示して6行目は表示しない
というような、文字列の制限というのはできませんでしょうか?
例えば、<br/>を5回使用した場合は次の文字は表示しないとか。
どうかよろしくお願い致します。
追加で質問させていただきたいのですが、
文字数の制限ではなくて、1〜5列目までを表示して6行目は表示しない
というような、文字列の制限というのはできませんでしょうか?
例えば、<br/>を5回使用した場合は次の文字は表示しないとか。
どうかよろしくお願い致します。