■ユーザーズフォーラム リニューアルのお知らせ
新規投稿は新ユーザーズフォーラムにお願いします。

カテゴリを含むページ毎の条件判定についての質問です。(プラグイン未使用の場合)

clothoweb > カテゴリを含むページ毎の条件判定についての質問です。(プラグイン未使用の場合) @ 2012/1/26 19:26
みなさん、こんにちは。

今、テーマを作成している中でどうしても初歩的な部分が解決出来ず、
先に進めなくなってしまっているため、質問させていただきます。

以下のようなdefault.ctpに記述する際の条件判定文の場合だと

<?php if($baser->isTop()): ?>
	<?php $baser->element('topcontents') ?>
<?php else: ?>
	<div><?php $baser->img('etcpages.png',array('alt'=>'etcpages','width'=>'980px','height'=>'120px')) ?></div>
<?php endif; ?>

・トップページの場合は'topcontents(.ctp)'を読み込んで表示
・そうでない場合は'etcpages.png'の画像を表示

という記述方法で上手く判別されて表示出来ているのですが、
elseifの部分がなぜか条件判定の記述で詰まってしまいました。
<?php elseif(isset($page) && !isset($blog)): ?>

実際に上記のタイプでの記載だということは分かるのですが、
以下のようなページ構成の際には具体的にどういう記述が必要でしょうか。

top
 ├ clinic 
 ├ access
 ├ doctor (category)
      ├ suzuki
      ├ takeda
      └ ihara
 ├ news (blog plugin) 
 ├ blog (blog plugin)
 ├ contact (Mail plugin)
 └ reservation (Mail plugin)

各ページ毎にお店のコンセプト画像だけを差し替えたいという状況で
プラグイン形式ではなく、出来れば判定で処理は出来ないものかと考えています。

画像だけを差し替える場合は、以下の方法で実現することが出来ました。
・default.ctp 任意の箇所へ記述
<div class="<?php echo $baser->getContentsName(true) ?>"></div>

・style.css 任意の箇所へ記述 例:会社概要(ページ名がServiceの場合)
div.Service {
	margin:0 auto;
	padding:0;
	width:980px;
	height:100px;
	background:#fff url(../img/hb_service.png) no-repeat left top; 
}

後は画像だけではなく$title文の内容とは異なる「テキスト文章」として
キャッチフレーズをページ毎に表示できるようにしたいという状況です。

我流さんのページや、goichiさんのレイアウト個別設定プラグインページ、
GUiLZ Projectさんのページ、こちらのフォーラムの過去スレッドなども
参考にしてみながらも、未だ解決できずに数日間考え込んでしまっています。

お忙しい中恐縮ですが、よろしければご教授いただけませんでしょうか。
Garyuten > Re: カテゴリを含むページ毎の条件判定についての質問です。(プラグイン未使用の場合) @ 2012/1/30 23:44
>clothowebさん
テーマ内でカテゴリ判別したいのはすごくよくわかります。
既に自己解決してたらすいません。

引用:

elseifの部分がなぜか条件判定の記述で詰まってしまいました。
<?php elseif(isset($page) && !isset($blog)): ?>

実際に上記のタイプでの記載だということは分かるのですが、

カテゴリとなると、現在表示してるURLの文字列からカテゴリを取得・判別するが一番早いと思います。
$baser->getContentsName(true); だとページID(カテゴリ名+ページ名まで含まれる)なので判別には向きません。

BaserCMSにはカテゴリを取得する方法がない(?)ので僕は以下のような方法でやっています。


<?php
//default.ctp 内に記述
$CtgAry = split("/",$this->here);  // "/"で分割して配列に格納
$Ctg = $CtgNameAry[1]; //メインカテゴリ
$SubCtg = $CtgNameAry[2]; //サブカテゴリ
?>
例) /category-a/sub-category/page にアクセスした場合、以下のように格納されます
$Ctg → category-a
$SubCtg → sub-category

//判別
<?php if( $baser->isTop() ): ?>
<!-- HOMEの内容 -->
<?php elseif( isset($page) && !isset($blog) ): ?>
<!-- Pageの内容 -->
	<?php if($Ctg == 'staff' ): ?>
		カテゴリ:スタッフの内容
		<img src="<?= $Ctg ?>.png" alt="カテゴリ:<?= $Ctg ?>" />
	<?php elseif($Ctg == 'doctor' ) ?>
		カテゴリ:ドクターの内容
		<img src="<?= $Ctg ?>.png" alt="カテゴリ:<?= $Ctg ?>" />
	<?php else: ?>
		カテゴリがないor分岐不要のページの内容
	<?php endif; ?>
<?php else: ?>
<!-- Blog,Form の内容 -->
<?php endif; ?>


こんな感じでどうでしょうか?

カテゴリの判別式は、よくhead内に入れて、カテゴリやブログ毎にCSSを切り替える時にも使っています。

余談)
カテゴリ名をCSSのClassでは頭一文字だけ大文字(Staff, Doctor)で記述してる場合は、PHP上もそれに合わせて ucfirst($Ctg) とすることもあります。
clothoweb > Re: カテゴリを含むページ毎の条件判定についての質問です。(プラグイン未使用の場合) @ 2012/2/1 0:32
>Garyutenさん

こんばんは。がらくた屋さんをいつも愛読させていただいてます!

偶然にも月末になって集中した仕事に追われていたため、
自己解決どころか情報収集する時間すらありませんでした。><

早速教えていただいた内容を見て実際に試してみましたところ、
まさに要望通りの処理分岐をさせる事が出来ました。
本当にありがとうございました!

週末くらいには落ち着くのでまたテーマ公開に向けて頑張ります!

※ タイミングの悪い返信でごめんなさい!出来ましたら「sage」で。。。
ryuring > Re: カテゴリを含むページ毎の条件判定についての質問です。(プラグイン未使用の場合) @ 2012/2/6 14:55
こんにちは。

引き数を与えない getContentsName ではダメですか?

<?php if($baser->getContentsName()) == 'Default'): ?>

<?php elseif($baser->getContentsName() == 'Test'): ?>

<?php endif ?>


ただ、baserCMS 1.6.15 、baserCMS 1.7.0 beta では不具合があります。。1.6.15であれば、修正ファイルをあててください。
http://forum.basercms.net/modules/newbb/viewtopic.php?topic_id=362&forum=3

Twitter:@ryuring
baserCMS総合サービスサイト ビーコミ

Garyuten > Re: カテゴリを含むページ毎の条件判定についての質問です。(プラグイン未使用の場合) @ 2012/3/2 12:31
>clothowebさん
解決できたみたいでなによりです!

>ryuringさん
引用:
引き数を与えない getContentsName ではダメですか?

一義の個別のページのIDとして設定する時は便利なので、

とかはよく使わせてもらってます。

ただ、カテゴリの中で共通のclassを当てたい時にはページIDだときついことがあります。

例)固定ページのカテゴリ階層
├ about
 ├ index
 ├ page1
 └ page2
└ staff
 ├ index
 ├ page1
 └ page2

カテゴリの同階層ページにはclassを指定しておきたいことがたまにあります。




もっと深いところでいうと、CSSシグネチャでメニューのCurrent (現在位置)の表現の制御したい時があります。

例)何かしらのメニュー
<ul>
<li class="menu01"><a>About</a><li>
<li class="menu02"><a>Staff</a><li>
</ul>


▽メニュー部分のCSS
body.About li.menu01,
body.Staff li.menu02 {
  /* メニューが現在位置である事を表現する指定 */
}


なので、カテゴリ(親、子)名をよくclass名に指定するために個別に抽出してました。

参考)
CSSシグネチャとは?メリットと実用TIPS - LIQUID DESIGN BLOG http://blog.lqd.jp/css/000179.html
ryuring > Re: カテゴリを含むページ毎の条件判定についての質問です。(プラグイン未使用の場合) @ 2012/3/6 22:12
こんばんは。

getContentsNameは、何度もバグを含んでしまって、仕様があやふやになっている感があるのですが、
基本的には、引き数を与えない場合、URLの第一階層までを取得するようになっています。
http://basercms.net/reference/archives/47

なので、次のような文字列が取得できるというのが正しい仕様です。

├ index → Default
├ page1 → Default
├ page2 → Default
├ about  → About
 ├ index → About
 ├ page1 → About
 └ page2 → About
└ staff  → Staff
 ├ index → Staff
 ├ page1 → Staff
 └ page2 → Staff


言っている事が的を得ていないかもですが、いちお念の為。

Twitter:@ryuring
baserCMS総合サービスサイト ビーコミ

clothoweb > Re: カテゴリを含むページ毎の条件判定についての質問です。(プラグイン未使用の場合) @ 2012/3/7 2:02
Garyutenさん、こんばんは!

引用:
CSSシグネチャとは?メリットと実用TIPS - LIQUID DESIGN BLOG http://blog.lqd.jp/css/000179.html

ありがとうございます、とても参考になりました!
特にスマートフォンに有用なタブがありがたい。。。

実は今、スマートフォンも合わせてのテーマを作るために
スマートフォンレイアウトに格闘中でしたのでとても助かりました。^^ヾ

また今後ともよろしくご教授願います〜。
clothoweb > Re: カテゴリを含むページ毎の条件判定についての質問です。(プラグイン未使用の場合) @ 2012/3/7 2:05
ryuringさん

引用:
引き数を与えない getContentsName ではダメですか?

いつもありがとうございます、そちらも参考にさせていただきました。
ですが、多分私のやり方が悪かったようでその時は失敗していました。^^;

現在のところでは、ページを追加した時にもCSSを記述する必要が
あるんですが、目的とした場所に以下のような方法でも対処できました。
<div class="<?php echo $baser->getContentsName(true) ?>"></div>

/* PageHeaderLayout
----------------------------------------------- */
div.Product {
	width:980px;
	margin:0 auto;
	padding:0;
	height:170px;
	position: relative;
	background:url(../img/hb_product.jpg) no-repeat left top;
}
div.Renewal {
	width:980px;
	margin:0 auto;
	padding:0;
	height:170px;
	position: relative;
	background:url(../img/hb_renewal.jpg) no-repeat left top;
}
div.Case {
	width:980px;
	margin:0 auto;
	padding:0;
	height:170px;
	position: relative;
	background:url(../img/hb_case.jpg) no-repeat left top;
}

続く〜


またも今回、相変わらず修正ファイルをあてていませんでした。><
次こそは自分で修正パッチをあてたパッケージで挑戦してみますね。

みなさん、色々なアドバイスをいただきありがとうございました!^^
clothoweb > Re: カテゴリを含むページ毎の条件判定についての質問です。(プラグイン未使用の場合) @ 2012/3/7 2:20
Ryuringさん、こんばんは!

引用:
getContentsNameは、何度もバグを含んでしまって、仕様があやふやになっている感があるのですが、
基本的には、引き数を与えない場合、URLの第一階層までを取得するようになっています。
http://basercms.net/reference/archives/47


なるほど・・・。この内容はここだったんですね。
全ページ読破したつもりが、ちゃんと目を通せていませんでした。

ついでいうと「基本リファレンス」のページへの入り口も
ずっとボタンとは知らずにデザインアクセントだと勘違いを。><
http://basercms.net/manuals/index.html

色々とアドバイスいただき、ありがとうございました。

またこれからもテーマ作りに頑張りますね、せめて今月中だけでも
後2本は公開したいと考えていますので・・・。^^;

次回は不動産業者様向けと、喫茶店様向けになると思います。
でも下手すると、エステか美容院さんが先になるかも知れません。

EC-CUBEでPHP勉強するより、BaserCMS(CakePHP)で覚えたい!><
毎日BaserCMSの構築依頼ばかりで満足できる日が来ますように。笑
ryuring > Re: カテゴリを含むページ毎の条件判定についての質問です。(プラグイン未使用の場合) @ 2012/3/9 15:30
clothowebさん、こんにちは。


引用:
ついでいうと「基本リファレンス」のページへの入り口も
ずっとボタンとは知らずにデザインアクセントだと勘違いを。><
http://basercms.net/manuals/index.html


あ、なるほど、ちょっと調整が必要ですね。クリックポイントとか。


引用:
またこれからもテーマ作りに頑張りますね、せめて今月中だけでも
後2本は公開したいと考えていますので・・・。^^;


おおお、すごいです!
うちの場合、代理店からの受託の仕事ばかりなので、なかなか配布前提では作れないんですよね〜^^;
clothowebさんにそうやって頑張って頂けると、とても頼もしいです!


そうなるように僕もがんばります!^^

Twitter:@ryuring
baserCMS総合サービスサイト ビーコミ

ログイン
ユーザー名:
パスワード:


  新規登録 / パスワード紛失

検索

facebook
フォーラムで悩みが解決した場合など、よかったら「いいね!」をポチっとクリックしてください!質問の回答者や開発者の励みになります

フォーラムガイド


関連リンク

オンライン状況
32 人のユーザが現在オンラインです。 (32 人のユーザが フォーラム を参照しています。)

登録ユーザ: 0
ゲスト: 32