ナビゲーションについて

「まったく何も分からない・・・」そんなユーザーさんの為のフォーラムです。どんなご質問でもお気軽にどうぞ。
返信
まこゆき

ナビゲーションについて

投稿記事 by まこゆき » 2005年12月22日(木) 02:12

はじめまして。結構がんばってみたのですが今ひとつうまくいかないのでご質問します。

戻口口口口
口口口口口
口口口口口
口口口口口
口口口口進

「戻」と「進」はナビゲーション、「口」は画像です。
前ページ、後ページがあるときは、上記のように表示し、それぞれ存在しない時はそこに普通に画像を表示したいと思うのですが、上手くいきません。

整形や表示位置指定までは何とかなったのですが、ナビゲーションボタンを分離して設置するTIPSが見つけられなかったのでご質問させていただきました。

一応、当方のデザイン定義ををここに貼ります。(整形に関してはこの掲示板を参考になんとかごまかして表示しております)
25件表示で、データは25件以上あるのですが、以下の定義だと、単に1件目と25件目が非表示になり、ソースを見ても何も表示されて居ない状態です。
条件付けが間違ってるのか、あるいはnaviの指定方法がおかしいのか、いまひとつ判断がつきませんでした。
このようなナビゲーションの配置は可能でしょうか?
お手数ですがよろしくお願いいたします。
<?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="/entrylist">
<div class="cellcontainer">
<xsl:for-each select="entry">
<div class="cell">
<div class="padding">
<xsl:choose>
<xsl:when test="position() mod 25=1">
<xsl:for-each select="navi">
<xsl:for-each select="prev">
<a href="{@href}"><img src="img/back.gif" border="0"/></a>
</xsl:for-each>
<xsl:if test="not(prev)"><img src="img/back.gif" /></xsl:if>
</xsl:for-each>
</xsl:when>
<xsl:when test="position() mod 25=0">
<xsl:for-each select="navi">
<xsl:for-each select="next">
<a href="{@href}"><img src="img/next.gif" /></a>
</xsl:for-each>
<xsl:if test="not(next)"><img src="img/next.gif" /></xsl:if>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:if test="image/text()">
<a href="javascript:void(0)" onClick="window.open('{image}', 'newwin', 'width={image/@width},height={image/@height},scrollbars=1')"><img src="{image}&w=40&h=40" /></a>
</xsl:if>
<xsl:if test="not(image/text())">
<img src="img/noimage.gif" />
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</div>
</div>
</xsl:for-each>
</div>
</xsl:template>
</xsl:stylesheet>

まこゆき

自己レスです。

投稿記事 by まこゆき » 2005年12月22日(木) 23:45

一応、ナビゲーションと中身を切り離してセルに指定し、中身部分のみを繰り返し、折り返しはボックスの幅で行うことで、考えていたものと屋や近い形を実現できました。

残念ながら「コンテンツがある時はコンテンツ、無い時はナビゲーション」とするのは難しく、断念しましたが、いちおう以下のような形で実現しましたので書かせていただきます。
リストデザイン
<?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="/entrylist">
<div class="cellcontainer">

<div class="cell">
<xsl:for-each select="navi">
<xsl:for-each select="prev">
<a href="{@href}"><img src="img/back.gif" border="0" /></a>
</xsl:for-each>
<xsl:if test="not(prev)"><img src="img/starthere.gif" /></xsl:if>
</xsl:for-each>
</div>

<xsl:for-each select="entry">
<div class="cell">
<xsl:if test="image/text()">
<a href="javascript:void(0)" onClick="window.open('{image}', 'newwin', 'width={image/@width},height={image/@height},scrollbars=1')"><img src="{image}&w=40&h=40" /></a>
</xsl:if>
<xsl:if test="not(image/text())">
<img src="img/noimage.gif" />
</xsl:if>
</div>
</xsl:for-each>

<div class="cell">
<xsl:for-each select="navi">
<xsl:for-each select="next">
<a href="{@href}"><img src="img/next.gif" /></a>
</xsl:for-each>
<xsl:if test="not(next)"><img src="img/noimage.gif" /></xsl:if>
</xsl:for-each>
</div>
</div>
</xsl:template>
</xsl:stylesheet>
スタイルシート(セル部分のみ)
.cellcontainer
{
width : 218px;
height: 218px;
}

.cell {
width : 43px;
height : 43px;
float : left;
background-color : #EFE7DE;
}

.cell img {
margin-left:3px;
margin-top:3px;
text-align : center;
border:0;
}
画像等はすべて40pxで用意しています。また、エントリが無くても「noimage」と同じ表示になるように実は背景に43x43を5x5で配置した画像をはっつけています。ちょっとズルですが。

以上です。

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

Re: ナビゲーションについて

投稿記事 by webmaster » 2005年12月24日(土) 14:48

 webmasterです。まこゆきさん、せっかくご質問して頂いたのにお返事が遅れまして
申し訳ありません。

 こういう面白いUIに使って頂いてこそ、CMSDを作ったかいがあると思っております。

 掲載して頂いた最初のXSLTは、ほとんど合っています。
 ただ、一点だけ、既にお気づきのようですが、naviを取得する箇所がentrylist直下
ではなくentrylist/entry の下になっている為、取得できなくなっています。

 naviのXML上での位置は /entrylist/navi ですので、<xsl:for-each select="entry">
の中でnaviを取得する場合には、

コード: 全て選択

<xsl:for-each select="/entrylist/navi">
 と、XMLのルートからフルパスで指定して頂く必要があります。
 この点に関してはXSLTやXMLに慣れていないとなかなか活用が難しいと思われる為、
マニュアルには特に記載しておりません。
 いつかXSLT上級編なども書いてみたいのですが、現在は本体のバージョンアップ
を優先しております。m(_ _)m

 尚、細かい点ですが、あと一点だけ、

コード: 全て選択

position() mod 25=1
 や

コード: 全て選択

position() mod 25=0
 の部分については、単純に「1番目を」とか「25番目を」と指定したい場合には

コード: 全て選択

position()=1
 や

コード: 全て選択

position()=25
 と指定して頂いてもOKです。

 またご不明点などありましたらよろしくお願い致します。

ゲスト

投稿記事 by ゲスト » 2005年12月28日(水) 11:25

ご回答ありがとうございます。現在いろいろな形を実現できると面白いかと思い試用させていただいております。
下記の

コード: 全て選択

position() mod 25=1

コード: 全て選択

position() mod 25=0
ですが、項目数が増えた場合に、2ページ目、3ページ目となった時に動作させようと思って書いたのですが、「position()」は、各ページでの何番目、という意味合いなのでしょうか。
当方の理解では全データの何番目か、という意味かと思っていたので、上記のように記していたのですが。どこかに書いてあったら申し訳ないです。

XMLやらXSLTもきちんと勉強したいのですが時間が無くてやっつけやっつけで、都度リファレンスを引いてごまかしごまかしやっております。またよろしくお願いします。

ありがとうございました。


[/code][/url]

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

投稿記事 by webmaster » 2005年12月28日(水) 11:34

 webmasterです。

 position() については、仰るとおり、1ページ内での順番を取得する命令になります。
 どちらかというと高度な使い方に属する為、マニュアルにも詳しく書いておりません。
 分かりにくくて申し訳有りません。m(_ _)m

 様々な形で使って頂くことを想定しておりますので、また問題点や不明点など
ありましたら気軽にご質問ください。
 お待ちしております。

まこゆき

ここで書かせていただいていた件

投稿記事 by まこゆき » 2006年1月21日(土) 04:25

一応、下記ページのような形で実現しました。

http://azpocoz.fnow.org/portfolio_stylea.php

本来はグループ化して実現したほうが良い箇所もあるかもしれませんが、デザイン周りがかなり現状でも煩雑なので、グループごとに別phpファイルを用意して実現しています。
おそらく、グループ化を使用すれば、phpファイル自体ももっと少なくできるように思います。
(まあこのほうが、設置自体は比較的直感的でわかりやすいと言うのはあるのですが)

とりあえずご紹介までにて。

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

Re: ここで書かせていただいていた件

投稿記事 by webmaster » 2006年1月21日(土) 12:38

 webmasterです。
 まこゆきさんのサイトを早速拝見致しました。
 イラストがとてもキュートです。(^-^)

 こういう、ポートフォリオ的な使い方は結構要望があるような気がします。
 素晴らしい事例をありがとうございました。

 また、バナー掲載もして頂き、ありがとうございます。m(_ _)m

 仰るとおり、グループ化を多用すればphpファイルは少なくて済むのですが、
どちらかがシンプルかというと難しいですね…。
 この場合は、まこゆきさんの取られた方法がシンプルで良いと思いました。

 また何かありましたらご連絡くださいませ。

返信