ブロックからページタイトルを変えられますか?

2014年4月30日 at 9:49

毎度質問ですみません。

自作の「商品検索ブロック」があるのですが、検索された商品名をタイトルに入れたいと思います。(単一)
(ブロックからページ属性をいじるのはかなり特殊だとは思いますが)

ページタイトルはページ属性で指定できると思いますが、ロジックから入力することは可能ですか?
PageのsetPropertiesFromArrayというメソッドがありますが、これをどうにかすればできるのでしょうか?

ご存じの方がいらしたらお教え下さい。

タグ:

Re: ブロックからページタイトルを変えられますか?

2014年4月30日 at 11:10
ページ属性を編集する機能を提供する有償ブロックはあるみたいです。使ったことはないですが…
http://www.concrete5.org/marketplace/addons/attribute-block/


ページの基本情報を更新するには、Pageオブジェクトのupdateメソッドが使えます。

$page->update(array('cName'=>'ほげほげ'));

ドキュメント:
http://www.concrete5.org/documentation/developers/pages/overview
 

Re: ブロックからページタイトルを変えられますか?

2014年4月30日 at 11:21
簡単に言うと、ページタイトルは $pageTitle で扱われますので、その値の設定をテーマに渡してあげることができればOKです。

ページタイトルは、
/concrete/elements/header_required.php
の11行〜28行目で処理しています。

ここは、テーマファイルでは
php Loader::element('header_required');
の宣言で読み込まれるところです。

ですので、それまでに、 $pageTitle の値を、検索された商品名がセットされるように設定したらできます。
 

Re: ブロックからページタイトルを変えられますか?

2014年5月1日 at 1:01
hissyさん、katz515さん、ご返信ありがとうございます。

まず試した結果ですが、
$page = Page::getCurrentPage();
$page->setAttribute('meta_title', $product->title);
としてメタキーに書き込む方法を試しました。

これはページ読み込み後に値がセットされるため、
 1回目の表示 > 変わってない
 2回目の表示 > 前回の商品名が表示される
という動作になってしまいました。


つぎにkatzさんの方法を試しました。

<?php Loader::element('header_required', array('pageTitle' => $product->name )); ?>

としてLoaderで読み込ませてみました。

定数('aaa'など)ならば希望通りの動作になったものの、ブロック内のデータを使用する場合(上記のように $product->name にした場合)ではダメでした。

ブロックがレンダリングされたあとに$productsが設定されるため、ヘッダー読み込み時にはnullとなっていました。



商品ページだけ専用のテーマを作るしかないのかな、という感じです。

トリッキーな方法でもかまいませんので他にあればヒントをお願いします。
 

Re: ブロックからページタイトルを変えられますか?

2014年5月1日 at 1:29
ブロックの controller から on_page_view で出力を試しました。

$this->addHeaderItem('<title>aaa</title>');

として出力したのですが、これ自体はOKでした。
が、Concrete5が出力するtitleタグとダブって2つ出力されていまいました。

メインの出力を止める方法はあるのでしょうか?
 

Re: ブロックからページタイトルを変えられますか?

2014年5月1日 at 11:44
ひとまず下記の方法で解決しました。

パッケージのelementにheader_required.phpのクローンを入れ、title部を再定義(非表示オプションを追加)
検索ブロックからaddHeaderItemで商品名を出力

で落ち着きました。
 

Re: ブロックからページタイトルを変えられますか?

2014年5月1日 at 15:44
何か見当違いなアドバイスをしてしまったみたいですね。とりあえず、解決して良かったです smiling
 

Re: ブロックからページタイトルを変えられますか?

2014年5月1日 at 17:49
とんでもないです!
また次回もアドバイスお願いします。
 

Re: ブロックからページタイトルを変えられますか?

2014年5月1日 at 18:05
おおお!!!

addHeaderItem('aaa');

の存在をすっかり忘れていました・・・
すいません orz

解決できて良かったです!
 

Re: ブロックからページタイトルを変えられますか?

2014年5月2日 at 16:30
ありがとうございます。
またアドバイスお願いします!