■ユーザーズフォーラム リニューアルのお知らせ
新規投稿は新ユーザーズフォーラムにお願いします。
このフォーラムは閲覧専用のアーカイブです。

ページカテゴリーのタイトルだけを出力する方法は?

inugami > ページカテゴリーのタイトルだけを出力する方法は? @ 2012/7/17 20:33
最近baserCMSでサイトを作り始めたのですが、タイトルのとおり
ページカテゴリーのタイトルだけを出力する方法がどうしてもわからず質問に参りました。

ブログのカテゴリー名の場合だと、リファレンスの中の
$blog->category( $post,[$options] )

この関数で好きな場所に表示できますが、ページカテゴリーでもこれと同じことをしたいのです。
titleの関数だとカテゴリー名以外のコンテンツ名も出力されてしまうので、
なんとかカテゴリー名だけ抜き出してこられないか、ページ一覧やパンくずリストのテンプレートなども見てみたのですが
phpは初心者でさっぱりわからず……。
具体的には、レイアウトテンプレートの中にページのカテゴリー名を出力する関数を書いて
category1(名前はカテゴリー1)の場合なら「カテゴリー1」を、
category2(名前はカテゴリー2)の場合なら「カテゴリー2」を表示するようにしたいのです。

ちょっと説明がわかりにくいかもしれません……。
今は見よう見真似の苦肉の策で
<?php if($bcBaser->getContentsName() == 'Category1'): ?>
<h2>カテゴリー1</h2>
<?php elseif($bcBaser->getContentsName() == 'Category2'): ?>
<h2>カテゴリー2</h2>
:

このようにしてページのカテゴリー名を表示しているのですが、
これをもっと簡素で汎用的なものに書き換えられないだろうか、と頭を悩ませています。
もしかしたらブログを使ったほうが早いのかもしれませんが、
そういった指摘も含めてお知恵をお貸しいただけたらとてもありがたいです。

■BaserCMSのバージョン:2.0.2
■レンタルサーバー名:ロリポップ
■スマートURLの利用:ON
■設置フォルダ:サブフォルダ
■利用しているデータベース:SQLite
■PHPスキル:全くわからな

goichi > Re: ページカテゴリーのタイトルだけを出力する方法は? @ 2012/7/17 21:45
こんにちは(^^
カテゴリ名ですよね。
ちょっとアイディアが湧いたので参考までに回答します。

ページのパンくずリストって、カテゴリ名が出てきますよね。
そこで取得しているカテゴリ名をヘルパーをちょっといじって、
表示するようにしてはどうでしょうか。

[拡張]bc_baser.php

上記のアドレスにサンプルを作ってみました。
これを解凍すると「bc_baser.php」というファイルが出てくると思います。
そのファイルをそのまま
/app/views/helpers/
に入れて下さい。(デフォルトでは何も入っていない空のフォルダだと思います。)
(/baser/views/helpers/ではありません。必ず「/app/」側にいれてください。。。)

カテゴリ名を表示したい箇所で
<?php $bcBaser->getCategoryName() ?>

といれると出てきませんでしょうか?
(もしかしたら、条件次第で動かないかも知れませんが・・・)
inugami > Re: ページカテゴリーのタイトルだけを出力する方法は? @ 2012/7/18 0:38
わあ!こんなに早くファイルまで用意していただいて本当に感謝感激です!
さっそくダウンロードして/app/views/helpers/へ入れてみました。
ですが、どうもその「条件次第で動かない」の条件に何かがかち合ってしまったようです。
何がバッティングしてしまったのか探ろうとしてみたものの
やはり皆目見当もつかず、せっかくご用意してくださったのに不甲斐ないです……。

テーマを自作したので、もしかするとそのあたりで何か引っかかったのかとも思って
Demoに戻してカテゴリ名を出力するコードを入れてみたのですが、それでも表示されません。
サブフォルダにbaserCMSを置いているので、それが引っかかっているのでしょうか。

やりたいことはまさにgoichiさんの案のような
コードひとつでカテゴリ名を表示できる方法なので、なんとか条件をクリアしてこれを使えるようになりたいです。
そもそもphpを勉強して何が原因なのかあたりをつけられるようにならないといけないですね……!

■BaserCMSのバージョン:2.0.2
■レンタルサーバー名:ロリポップ
■スマートURLの利用:ON
■設置フォルダ:サブフォルダ
■利用しているデータベース:SQLite
■PHPスキル:全くわからな

goichi > Re: ページカテゴリーのタイトルだけを出力する方法は? @ 2012/7/18 10:09
お役に立てず、すみません(*o*)
ロリポップの環境が手元になかったので、
ヘテムルでやってみたのですが、私の所では表示されました。
ちょっと強引な事をしているので、
カテゴリ階層の状態なんかに左右されてるんだろうと思います。

お手間を取らせてしまって、すみませんでしたm(__)m
goichi > Re: ページカテゴリーのタイトルだけを出力する方法は? @ 2012/7/18 11:02
連投ですみません。
なんか悔しかったので作戦を変更しました。(笑
(お役に立てなかったらごめんなさい)

今回は関数名は変わりませんが、
引数にgetContentNameをとり、
ヘルパーから無理矢理カテゴリDBを参照して
その名前だけを取得します。

(再び)bc_baser.php

アップ先は前回と同じで、/app/views/helpers/です。
使い方は、カテゴリ名を表示させたい場所で、
<?php
  $bcBaser->getCategoryName($bcBaser->getContentsName());
?>

という一分を、そのまま書き込んでみて下さい。

例えば、
カテゴリ名:caregory1
カテゴリタイトル:カテゴリ1
というカテゴリに含まれるページ内で、上記のコードを入れると
カテゴリ1

と表示されると思います。
(なお、どのカテゴリにも含まれないページでは、なにも出力されません。)

いかがでしょうか!?(ドキドキ)
inugami > Re: ページカテゴリーのタイトルだけを出力する方法は? @ 2012/7/18 22:03
本当にありがとうございます、こちらこそお手間をおかけしてすみません!
そしてまたもや残念なお知らせです(;_;)
用意していただいた新しいファイルを/app/views/helpers/に入れ、
レイアウトテンプレートにコードを入れてみたのですが、やはりカテゴリータイトルが表示されません。
ためしにカテゴリーに属している通常の固定ページ作成の画面の方でコードを入れてみたのですが、同じ結果でした。
だめもとでテーマをDemoに戻してもみたのですが、それでも表示されず……。

ページカテゴリーの階層は今のところすべて一段階目です。
もともとの苦肉の策で書いたコードを戻してみると動くので、ContentNameは問題なく取得できていると思うのですが
その先で何かの条件が合わないのか、それともインストール段階でそもそも問題が発生していたのか……
実は一度今のサブフォルダよりさらに深い階層の中にためしにインストールしてみて、その後それを消した後
今のサブフォルダ(こちらはルートのすぐ下です)にインストールし、さらにためした後に
もう一度消して今のサイトを構築している、というわけのわからないことをしています^^;
このようなことがデータベースに影響を及ぼしたりするのでしょうか。
今はロリポップの簡単インストールでインストールしたままの状態を使っていて、
他に入れたものといえばアップローダープラグインくらいのもので、パッチなどは当てていない状態です。
パッチが足りないと動かない、ということもあり得るでしょうか。

うう、基礎の基礎が抜けているので見当違いの質問をしているかもしれません。
とにかく、こちらの条件に合うようにといろいろとファイルを用意してくださって本当に感謝してもし足りません。
ありがとうございます。

■BaserCMSのバージョン:2.0.2
■レンタルサーバー名:ロリポップ
■スマートURLの利用:ON
■設置フォルダ:サブフォルダ
■利用しているデータベース:SQLite
■PHPスキル:全くわからな

goichi > Re: ページカテゴリーのタイトルだけを出力する方法は? @ 2012/7/18 22:41
どうもですm(__)m
なんかお手数ばかりおかけしてしまっているようで・・・。
ちょっと、別案を考えますので、
その間に以下の事をお確かめいただきたいのです。
(さきほど入れていただいた「bc_baser.php」は、そのままでお願いします)

1.まず管理画面にログインします。
2.システム管理にいって、ページの上の方にある「サーバーキャッシュの削除」を実行します。
3.同じくシステム管理内の「オプション」(設定項目の一番下)をクリックし、出てきた項目の中の「制作・開発モード」を「デバッグモード1」にします。
4.固定ページ管理メニューにいきます。
5.ページの新規作成にいきます。
6.以下の条件でページを作成してみてください。

条件1、なんでも良いのでカテゴリに入れる。
条件2、編集エディタの「ソース」をクリックし、ソースモードにして以下のコードを入れる。
<?php $bcBaser->getCategoryName($bcBaser->getContentsName()); ?>


上記の条件でページを保存してください。
そして、このページにアクセスするとどうなるでしょうか?
この手順で、サーバーキャッシュ、ブラウザキャッシュともに無い状態で、
ヘルパーの動きを確認でき、私が書いたPHPに問題があればエラーメッセージがでるはずです。

いかがでしょうか?
inugami > Re: ページカテゴリーのタイトルだけを出力する方法は? @ 2012/7/18 23:42
いえいえ、本当にこちらこそ頼りきりで!
さっそく確かめてみたところ、以下のようなエラーメッセージと思しきものが出てきました。

Notice (8): Undefined index: url [CORE/baser/controllers/baser_app_controller.php, line 256]
Warning (2): Cannot modify header information - headers already sent by (output started at /home/users/1/xxx.xx-xxx/web/xxx/cake/basics.php:128) [CORE/cake/libs/controller/controller.php, line 646]

どこまで書けばいいものかわからなかったので、とりあえず出てきたメッセージのURL的なところ以外は全てそのまま書いてあります。
丸投げになってしまって本当に恐縮ですが、これで参考になりますでしょうか。

■BaserCMSのバージョン:2.0.2
■レンタルサーバー名:ロリポップ
■スマートURLの利用:ON
■設置フォルダ:サブフォルダ
■利用しているデータベース:SQLite
■PHPスキル:全くわからな

goichi > Re: ページカテゴリーのタイトルだけを出力する方法は? @ 2012/7/19 20:48
どうもです。
エラーメッセージですね・・・・。うーん。

他のページ($bcBaser->getCategoryNameを使っていないページ)では、
そんなエラーメッセージは出てこないですもんね。
いま、問題のページに書いてもらっている
<?php
  $bcBaser->getCategoryName($bcBaser->getContentsName());
?>

の部分を削除すると、やっぱりエラーメッセージは消えますでしょうか?

ちょっと環境が違うので、エラーを再現できていないのですが、
[システム管理]→[環境設定情報]で、
PHPのバージョンなんかが出てくると思うので、
もしよければ、その部分を拝見できないでしょうか?
似たような環境を作ってみて、試してみます。


追記です:
引用:
実は一度今のサブフォルダよりさらに深い階層の中にためしにインストールしてみて、その後それを消した後
今のサブフォルダ(こちらはルートのすぐ下です)にインストールし、さらにためした後に
もう一度消して今のサイトを構築している、というわけのわからないことをしています^^;
このようなことがデータベースに影響を及ぼしたりするのでしょうか。

コピーとかじゃなくて、新しくインストールしているなら問題ないと思います(^^

inugami > Re: ページカテゴリーのタイトルだけを出力する方法は? @ 2012/7/19 22:15
わー、すみません!
エラーメッセージが出てきたところですっかり他を試すことが抜けてしまいました。

コードを消して保存しようとしたところ、全く同じエラーメッセージが出てきました。
いろいろ確かめた結果、このエラーメッセージはgoichiさんのコード由来のものではなく、
「サイト内検索の検索結果より除外する」のチェックボックスを外した状態でページを保存しようとすると
出現することがわかりました。もう手抜かりで本当に申し訳ないです!(xox)
他のページは、どうせサイト内検索使わないからチェックつけちゃえ〜という感じで
いちいちちまちまとチェックをつけていたので問題なく保存できていたようです……。

そして、チェックをつけた状態+コードを入れた状態で保存してみたところ
エラーも出ずきれいに保存することができました。
のですが、そのページをブラウザで確認してみてもやはりカテゴリ名は表示されない状態でした。

環境はこのような感じです。

>baserCMS環境
■ スマートURL: ON
■ 設置フォルダ: /home/users/1/xxx.xx-xxx/web/xxx/
■ セーフモード:Off
■ データベース: SQLite3
■ baserCMSバージョン: 2.0.2
■ CakePHPバージョン: 1.2.10

PHPバージョン: 5.2.17

他にも何か必要な情報はありますでしょうか。

引用:
コピーとかじゃなくて、新しくインストールしているなら問題ないと思います(^^

問題なさそうで一安心しました、ありがとうございます!

■BaserCMSのバージョン:2.0.2
■レンタルサーバー名:ロリポップ
■スマートURLの利用:ON
■設置フォルダ:サブフォルダ
■利用しているデータベース:SQLite
■PHPスキル:全くわからな

goichi > Re: ページカテゴリーのタイトルだけを出力する方法は? @ 2012/7/19 23:07
どうもです(^^
情報ありがとうございます。
ちょっと「bc_baser.php」を改造して、
細かくエラーメッセージを吐くようにしてみました。
三度目の正直とはいきませんが、原因を特定できると思います(^^

03bc_baser.php

今まで同様、このファイルを解答して出てくる「bc_baser.php」を
/app/views/helpers/
に入れて下さい。(前のが残っていたら上書きでOKです)

そして、管理画面で前回同様にサーバーキャッシュを削除します。
その後、今回はカテゴリを新規作成してください。
テストなので、日本語は使わず、
ページカテゴリ名:test_category
ページカテゴリタイトル:title_category
とでもしてみてください(^^

そして、ページの新規作成で、
カテゴリの項目で先ほど作ったカテゴリ「title_category」を選びます。
エディタ部分をソースモードにしていただき、以下のコードを入れて下さい。

<?php
if($bcBaser->testCategoryName($bcBaser->getContentsName())){
  echo $bcBaser->testCategoryName($bcBaser->getContentsName());
}else{
  echo '何!? そもそも実行できてない、だと!!?';
}
?>


エラーメッセージは、想定外の動きをしそうな箇所でそれぞれ用意しました。
もしカテゴリ名以外のメッセージがでたら、
それを教えてもらってもよいでしょうか?
きっと、あと少しで解決できるのではないかと思います(^^



inugami > Re: ページカテゴリーのタイトルだけを出力する方法は? @ 2012/7/20 20:39
重ね重ね本当にありがとうございます。
ファイルを入れてカテゴリを新規作成し、ページを作って確かめてみました!

出てきたメッセージは
「あれ、DBの情報が取得できないぞ・・・。」
でした!

うう、データベースとのやりとりがおかしくなっていたのですね。
一人では原因も究明できないところでした。
相変わらず完全に頼りきりで本当に恥じ入るばかりですが、とてもありがたいです。

■BaserCMSのバージョン:2.0.2
■レンタルサーバー名:ロリポップ
■スマートURLの利用:ON
■設置フォルダ:サブフォルダ
■利用しているデータベース:SQLite
■PHPスキル:全くわからな

goichi > Re: ページカテゴリーのタイトルだけを出力する方法は? @ 2012/7/21 20:53
引用:
相変わらず完全に頼りきりで本当に恥じ入るばかりですが、とてもありがたいです。

とんでもないです。こちらこそ、バシっと決めれずに申し訳ありませんですm(__)m

本題ですが、
引用:
出てきたメッセージは
「あれ、DBの情報が取得できないぞ・・・。」
でした!

との事。今回のコードで、このメッセージが出るのは
1.このページがカテゴリに上手く入っていないとき。
2.getContentsName()で上手くコンテンツ名を取得できず、コンテンツ名からDB上を検索できない。
3.このヘルパーから、本当にDBを利用できていない。
といったような場合だと思います。

[04]bc_baser.zip

そこで、本当にDBを利用できないのか、
少し内容を変更したコードを用意しています。
使い方は前回と全く同じです。
<?php
if($bcBaser->testCategoryName($bcBaser->getContentsName())){
  echo $bcBaser->testCategoryName($bcBaser->getContentsName());
}else{
  echo '何!? そもそも実行できてない、だと!!?';
}
?>


上記の3つの場面のうち、「1」または「2」の場合は、DBに登録されているカテゴリを全てリスト表示します。
「3」の場合は、再び「あれ、DBの情報が取得できないぞ・・・。」というメッセージが出ます。

何度もお試しいただいて、恐縮なのですが、
よろしくお願いします m(__)m
inugami > Re: ページカテゴリーのタイトルだけを出力する方法は? @ 2012/7/22 20:54
いえいえ、こちらこそ本当に何度もお付き合いいただいて感謝しきりです!

4番目のファイルを/app/views/helpers/に入れ、
この間のtest_categoryに新規にページを作って確かめてみました!
その結果、うまく全てのカテゴリ名を表示することができました。
何かでDBを壊してしまっていたならどうしようとドキドキでしたが、
すると1か2ということでしょうか……!

とりあえず、まずはご報告いたします。

■BaserCMSのバージョン:2.0.2
■レンタルサーバー名:ロリポップ
■スマートURLの利用:ON
■設置フォルダ:サブフォルダ
■利用しているデータベース:SQLite
■PHPスキル:全くわからな

goichi > Re: ページカテゴリーのタイトルだけを出力する方法は? @ 2012/7/22 22:52
どうもです(^^

引用:
うまく全てのカテゴリ名を表示することができました。

なんだか希望が見えてきましたね! 頑張ります!

[05]bc_baser.zip

で、ちょっと今までの方法とは別の手段でカテゴリタイトルを取得しようと思います。
今回はURLのカテゴリ部分を抜き取って、
それを元にしてカテゴリタイトルを表示します。

ですので、実験するページのURLをちょっと見て頂いて、
以下のようにカテゴリに入ってるか、確認していただきたいのです。

例えば、
カテゴリ名:[category01]
カテゴリタイトル:[カテゴリ1]
ページ名:[testpage]
という条件のページURLは
http:/(baserCMS設置URL)/category01/testpage

となっていると思いますが、いかがでしょうか?

もし、そうなっているならば、以下のコードをそのまま入れて下さい。
<?php
echo $bcBaser->getCategoryName();
?>


ページ上には
カテゴリ1

と表示されるはずです。

何度も申し訳ありませんが、お試しくださいませ。
inugami > Re: ページカテゴリーのタイトルだけを出力する方法は? @ 2012/7/23 22:53
本当にお世話になっております、ありがとうござます。
ファイルを入れて試してみたところ、ついについに、
念願かなって綺麗にビシッとカテゴリ名を表示することができました!(*^o^*)

今までテンプレートに何行にもわたって書いていたようなことをこれ1つでスッキリ実現できるなんて感動です。
私が最初に苦肉の策で作ったコードだと、カテゴリの階層を深くしていくことが難しくてとても困っていたのですが、
このコードだときちんと子カテゴリの名前まで表示できて、悩んでいたことが全部できるようになりました。

何より、こうして「できました!」と報告できることが本当に嬉しいです!
何度もたくさん案を出して丁寧に教えてくださって、感謝してもしたりないくらいです、本当にありがとうございます!m(_ _)m

■BaserCMSのバージョン:2.0.2
■レンタルサーバー名:ロリポップ
■スマートURLの利用:ON
■設置フォルダ:サブフォルダ
■利用しているデータベース:SQLite
■PHPスキル:全くわからな

goichi > Re: ページカテゴリーのタイトルだけを出力する方法は? @ 2012/7/23 23:05
おめでとうございます! \(^o^)/
実は明日から出張で、とある日本海側の離島に行くのですが(汗)、
その前に「上手くいった」という報告を見ることが出来て、スッキリしました!

本当によかったです。
こちらこそ、良い勉強になりました。ありがとうございました。m(__)m
ryuring > Re: ページカテゴリーのタイトルだけを出力する方法は? @ 2012/8/7 23:22
こんにちは。

ちょっと返信遅すぎかもしれませんが。。。補足です。。

実は、bcPageHelper というのがありまして、、
こちら、マニュアルに記載されてないんですよね。。(汗

■ 現在のページが所属するカテゴリ名を取得
<?php $bcPage->getCategoryName() ?>


■ 現在のページが所属するカテゴリデータを配列で取得
<?php $bcPage->getCategory() ?>


固定ページ機能でしか利用できないので、レイアウトで利用する場合は事前に、$bcPage の存在チェックが必要です。

<?php if($bcPage): ?>
<?php echo $bcPage->getCategoryName() ?>
<?php endif ?>

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