Re: title表記の変更について

2014年12月18日 at 22:39

ありがとうございます!
説明が足りず、恐縮です。

経緯です。
①デフォルトのtitie表記ルールを任意の形式に変えたい&titleタグやmetaタグのHTMLソースを任意の位置(順)表示したい
②利用したテーマでは、titie表記やmeta周りはheader_requiredに書かれているようだ
③header_requiredを見たが、CMS的に必須の部分とそうでない部分がわからない
④header_requiredは編集しづらそうだから、header_required内のtitleやmetaの出力記述を消して、ページ側(テンプレート側)で、処理してみよう
こんな感じです。

> タイトルとはサイト名のことでしょうか?
title要素の表記の事です。
こんな表記になる部分の事です→「サイト名 :: ページ名」

> お使いのテーマは何ですか?
使っているテーマの元は、プレーンなんとかみたいなデフォルトでついているやつです。
それをベースにカスタムしています。(といってもページ自体はゼロからに等しいです)

> concrete5では標準でメタ要素はページに設定されたものが出力されますので
元にしたテーマのheader_required内にmetaの記述(<meta name="description"~とか<meta name="keywords" )があり、
これが使われているはずですが、認識が違うでしょうか。

http://github.com/concrete5/concrete5/blob/master/web/concrete/elements/header_required.php#L55
こちらでいうと、55行目と60行目にmetaの記述があります。
記事の設定からカスタム設定に移動すると、任意のメタ要素が入れられたと思いますが、
そこに入力した場合にここが使われているんではないかと推測しています。

Re: title表記の変更について

2014年12月19日 at 7:23
axleさん

”デフォルトのtitie表記ルールを任意の形式に変えたい&titleタグやmetaタグのHTMLソースを任意の位置(順)表示したい”

この部分、もう少し具体的に教えて頂けますでしょうか?
例えば、metaタグも、ogpを設定したいとか、あると思います・・・
 

Re: title表記の変更について

2014年12月19日 at 10:12
endoさま
ありがとうございます!

まずは詳細ページで着手したいので、それを例にします。
例えば、こんな感じにしたいです。

★=固定値を出力
■=値があればその値を出力(カスタム属性を利用する予定)
◎囲み=CMS管理の記事タイトルやカスタム属性などを出力
CSSとjsはルート直下のものを利用しますので、このままで構いません。
★や■、◎内にconcret5からの記述を書けばいけそうな気がしています。

--------------------------------------------
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="keywords" content="★■">
<meta name="description" content="★■">
<meta name="viewport" content="width=device-width">
<meta property="og:type" content="article" />
<meta property="og:title" content="◎記事タイトル◎" />
<meta property="og:description" content="★■">
<meta property="og:image" content="http://~.png" >
<meta property="og:url" content="http://~.html">
<meta property="fb:app_id" content="0000000000000000" />
<title>◎記事タイトル◎|◎カテゴリ◎|◎任意の文字列(サイトの名前に近いもの)◎</title>
<link rel="stylesheet" href="/common/css/master.css" media="screen,print">
<!--[if lte IE 8]><link rel="stylesheet" href="/common/css/ie.css" media="screen,print"><![endif]-->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script src="/common/js/common.js"></script>
</head>
<body>
--------------------------------------------

ごく普通のソースですが、これをこのままの順で表現する事はデフォルトのheader_requiredを使っている以上できないと思っています。
なので、header_requiredをCMSの編集機能のみにして、titieとmetaの出力はページ(テンプレート側)でなんとかしたいなと。
そもそもheader_requiredにシステム必須とtitleとmetaが入っているのがよろしくないと思っています。
(ソース構造もそれに縛られてしまう為、必須とそれ以外で分離しておくべき)

不明点などございましたら、何なりとお願い致します。
 

Re: title表記の変更について

2014年12月19日 at 13:32
axleさん

header_required.phpをオーバライドする方法は、お望みじゃないかも知れませんが、
オリジナルの40〜65行目を以下に替えてみました。(動作未検証です)

<meta charset="UTF-8">
<?php
$akd = $c->getCollectionAttributeValue('meta_description');
$akk = $c->getCollectionAttributeValue('meta_keywords');

$w_akd = "";
if ($akd) {
$w_akd = ',' . htmlspecialchars($akd, ENT_COMPAT, APP_CHARSET);
}

$w_akk = "";
if ($akk) {
$w_akk = ',' . htmlspecialchars($akk, ENT_COMPAT, APP_CHARSET);
}

$w_tag = "";
if($options instanceof SelectAttributeTypeOptionList && $options->count() > 0) {
$w_tag = implode(',', $options);
}

$w_pageTitle = htmlspecialchars($pageTitle, ENT_COMPAT, APP_CHARSET);
$w_site = htmlspecialchars(SITE, ENT_COMPAT, APP_CHARSET);
?>
<meta name="keywords" content="★<?php echo $w_akk ?>" />
<meta name="description" content="★<?php echo $w_akd ?>" />
<meta name="viewport" content="width=device-width">
<meta property="og:type" content="article" />
<meta property="og:title" content="<?php echo $c->getCollectionName(); ?>" />
<meta property="og:description" content="★<?php echo $w_akd ?>">
<meta property="og:image" content="http://~.png" >
<meta property="og:url" content="http://~.html">
<meta property="fb:app_id" content="0000000000000000" />
<title><?php echo $c->getCollectionName(); ?>|<?php echo $w_tag ?>|<?php echo $w_site ?></title>


ただ、動作させた訳ではないので、動かなかったらごめんなさい。

既存のPHPファイルにも参考になるロジック(CMS上のデータを取得する方法)が
沢山あるので、参考にされると良いと思います。
 

Re: Re: title表記の変更について

2014年12月19日 at 16:37
ご丁寧にありがとうございます!
本当にありがたいです。
後ほどトライしてみます。
 

Re: title表記の変更について

2014年12月19日 at 18:39
axleさん

今、動作確認してみたら、データが取れていない部分がありました。
(”カテゴリ”情報が取れていませんね)
このままでは、期待動作と違いますので、
ちょっと、再度コーディングを見直してみます。

申し訳ないのですが、別件で、バタバタしているので、お時間掛かるかも知れません。

#在来線の電車内でコード書くのは、品質悪いですね・・・
 

Re: title表記の変更について

2014年12月26日 at 9:45
ありがとうございます。
タグ(擬似カテゴリ)の情報って、このCMSの場合、容易には扱えない印象です。
お時間がある時で構いませんので、よろしくお願いいたします。
 

Re: title表記の変更について

2014年12月26日 at 10:27
出遅れました。header_required.phpをオーバーライドする必要はありません。Loader::element() には、配列で引数を渡すことができますので、テーマから title タグの内容を指定することが可能です。

<?php
$c = Page::getCurrentPage();
$attrTags = $c->getAttribute('tags');
$tags = array();
if ($attrTags instanceof SelectAttributeTypeOptionList) {
$list = $attrTags->getOptions();
foreach ($list as $l) {
$tags[] = $l->getSelectAttributeOptionDisplayValue();
}
}
if (count($tags) > 0) {
$pageTitle = sprintf(
'%s | %s | %s',
$c->getCollectionName(),
implode(', ', $tags),
SITE
);
} else {
$pageTitle = sprintf(
'%s | %s',
$c->getCollectionName(),
SITE
);
}
Loader::element('header_required', array('pageTitle'=>$pageTitle));
?>

meta description も渡すことが可能です。また、OGPタグは拙作のアドオンで挿入可能ですので、アドオンを使わない場合でも参考になるかと思います。

http://www.concrete5.org/marketplace/addons/open-graph-tags-lite/
 

Re: title表記の変更について

2014年12月26日 at 20:33
hissyさん

・タグ情報の取得方法
・Loader::element()への配列渡しの方法

共に参考にさせて頂きます。

#header_required.phpのソースにコメントでしっかり、$pageTitleはプログラムから渡せると書いてありました。
#ちゃんと読んでないとダメですね。
 

Re: title表記の変更について

2015年1月13日 at 9:30
お二方、ありがとうございます。
対応が遅れて申し訳ありません。

すみません。
お二方の会話の内容がまだ理解できるレベルではないようです。

まっさらな詳細ページ用のテーマで仮組みしていたところですが、いただいたソースを詳細ページ用のテーマ側で入れておけば、
そのテーマ内で自由にタイトル要素の表記について変更可能になるという事でしょうか。
ご提示いただいたソースの具体的な使用方法を知りたいです。

ブロック要素は、カスタムテンプレートを利用する事である程度ソースに手を加えられる事を覚えましたが、タイトル要素の変更に関しては、そことは毛色が異なる印象です。
書籍にもこのあたりの記載は見当たらない(あったらごめんなさい)ので、具体的な変更方法などが書かれているページなどがあれば、教えていただきたいです。
といっても、なかなか見つからないのでユーザーの皆様はその多くがデフォルトのままなんだろうなと推測しています。(他ユーザーの方からの情報もないようなので)
現時点で、タイトル表記の方法が自由にならない(情報が乏しい)という事であれば、CMSとして取り入れる際の弊害になり得そうです。