手動TOP5表示

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

手動TOP5表示

投稿記事 by kiku » 2007年7月24日(火) 10:26

はじめまして。現在、ブログのようなものを作っております。
手動でTOP5を1位〜5位まで指定して、タイトルのみを一覧表示させたいのですが、
考え方がおかしいのか、書き方がおかしいのか、もわからない状態です。

1位 夏
2位 電話
3位 車
4位 週末
5位 顔文字

↑理想はこのような形です。
登録する時に手動で順位を決めたいです。
それ以外は載せません。

スキーマは以下のように書きました。naka-diary.schema.xml
<schema name="diary" caption="日記帳">
<data name="title" type="text" caption="タイトル" />
<data name="kubun" type="menu" caption="区分">
 <menuitem id="1">類なし</menuitem>
 <menuitem id="2">仕事</menuitem>
 <menuitem id="3">音楽</menuitem>
 <menuitem id="4">趣味</menuitem>
</data>
<data name="access" type="menu" caption="アクセス" group="true">
 <menuitem id="1">なし</menuitem>
 <menuitem id="2">1位</menuitem>
 <menuitem id="3">2位</menuitem>
 <menuitem id="4">3位</menuitem>
 <menuitem id="5">4位</menuitem>
<menuitem id="6">5位</menuitem>
</data>
<data name="body" type="textarea" caption="本文" output="html2" rows="15" cols="75"/>
<data name="footer" type="textarea" caption="フッター" output="text2" rows="8" cols="75"/>
<data name="separator1" type="separator" capion="画像" description="画像を選択してください" />
<data name="photo" type="img" caption="画像1" />
</schema>

デザインはこのように・・・naka-diary.list.top5.design.xsl
<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="/entrylist">
<xsl:if test="access='1'">1位 <a href="naka-diary.php{@href}"> <xsl:value-of select="title"/></a></xsl:if>
<xsl:if test="access='2'"> 2位 <a href="naka-diary.php{@href}"> □ <xsl:value-of select="title"/></a></xsl:if>
<xsl:if test="access='3'"> 3位 <a href="naka-diary.php{@href}"> □ <xsl:value-of select="title"/> </a></xsl:if>
<xsl:if test="access='4'">4位 <a href="naka-diary.php{@href}"> □ <xsl:value-of select="title"/> </a></xsl:if>
<xsl:if test="access='5'">5位 <a href="naka-diary.php{@href}"> □ <xsl:value-of select="title"/> </a></xsl:if></xsl:template>
</xsl:stylesheet>

表示部分はテーブルに一行ずつ表示したいので、
<div class="side-contents">
<TABLE class="top5">
<TR><TD class="top5-kisu">
<cmsd:entrylist name="naka-diary" design="top5">
<cmsd:group key="access" value="2" />
</cmsd:entrylist>
</TD></TR>

<TR><TD class="top5-gusu">
 <cmsd:entry name="naka-diary" design="title">
 <cmsd:group key="access" value="3" />
 </cmsd:entry>
</TD></TR>
 ・
 ・
 ・
<続きも同じように数字を変えて記入>
</TABLE></div>

と、テーブル表示に1行ずつ書いてます。


長々と書いて申し訳ありません。
よろしくお願いいたします :cry:

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

Re: 手動TOP5表示

投稿記事 by webmaster » 2007年7月24日(火) 13:13

 ちょっと難しい方法なのですが、私ならこうします、という例をご紹介します。
 
 まず、スキーマには

コード: 全て選択

<data name="rankinout" type="menu" caption="ランク入り" group="true">
  <menuitem id="rankout">ランク外</menuitem>
  <menuitem id="rankin">ランク入り</menuitem>
</data> 
<data name="rankvalue" type="int" caption="ランク順位" />
 という二つの項目を用意します。
 
 ランキングリストに登録したい場合には、「ランク入り」項目を「ランク入り」
に設定してもらい、「ランク順位」に好きな数字を指定してもらいます。
 このランク順位で、後ほどxsl:sortを使ってソートします。
 
 ランキング表示用の埋め込みタグには次のように書きます。

コード: 全て選択

<cmsd:entrylist name="xxxx" design="ranking">
  <cmsd:group key="rankinout" value="rankin" />
</cmsd:entrylist>
 これで、ランク入りしている項目だけが絞り込めます。しかし、このままでは
ランク順位どおりに並んでいないので、xsl:sortを使ってデザイン定義側で並び替えます。

コード: 全て選択

<xsl:template match="entrylist">
  <xsl:sort select="rankvalue" order="ascending" data-type="number" />
  <xsl:value-of select="position()" />位 <a href="naka-diary.php{@href}"><xsl:value-of select="title"/></a>
</xsl:template>
 xsl:sortを使った並び替え方法はマニュアル等で説明しておらず、xslの入門書
等をご覧頂く必要があるかもしれません。

 試していないので記述ミスなどあるかもしれませんが、その際にはご指摘下さい。

kiku
記事: 3
登録日時: 2007年7月24日(火) 09:37

遅れました!未解決。

投稿記事 by kiku » 2007年8月02日(木) 19:07

お返事送れて申し訳ありません。

教えていただいた事を自分なりに理解して表示させようとしましたが、

なかなか・・・上手くいきません :oops:

まだ未解決ですが、後回しになりましたので・・・じっくり考えてみます。

kiku
記事: 3
登録日時: 2007年7月24日(火) 09:37

解決☆

投稿記事 by kiku » 2007年8月16日(木) 17:39

大変お世話になりました!!
連休明け、ノンビリ丁寧に挑戦してみたら・・・出来ました。

LLLLLLLLスキーマLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL

コード: 全て選択

<data name="rankinout" type="menu" caption="ランク入り" group="True">
  <menuitem id="rankout">ランク外</menuitem>
  <menuitem id="rankin">ランク入り</menuitem>
</data>
<data name="rankvalue" type="int" caption="ランク順位" />
LLLLLLLLLデザインLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL

コード: 全て選択

<xsl:template match="/entrylist">
  <xsl:for-each select="entry">
    <xsl:sort select="rankvalue" order="ascending" data-type="number" />
    <xsl:value-of select="rankvalue"/>位 <a href="naka-diary1.php{@href}"><xsl:value-of select="title"/></a>
  </xsl:for-each>
</xsl:template>
LLLLLLLLLLPHP内LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL

コード: 全て選択

<cmsd:entrylist name="○○" design="top5">
    <cmsd:group key="rankinout" value="rankin"/>
</cmsd:entrylist>

教えていただいた通りでした!
ありがとうございました :P

返信