POPSブログ

BaserCMS 2.0 ファイルの修正と移動

137

  Category:  basercms2012/08/18 pops 

BaserCMS 2.0系のレイアウト変更などで、どうしてもbaser階層にあるファイルを修正したい場合がある。「ファイルの修正と移動」に関し別ページでも多少言及していますが、まとめ的なものです。


BaserCMS 2.0 ファイルの修正と移動

主にブログの詳細ページの表示に関してである。BaserCMSはコーポレートサイト向けのため、実際使用しているサイトであっても「ブログ」と言うよりも「NEWS」としての簡単な「最新情報」を記載するための目的になっている。
ブログの詳細ページの表示変更に際しsingle.phpファイルの修正などを行うには。テーマフォルダの所定の位置に移動して修正することになる。


BaserCMSのファイルの修正と移動の原則。

  • baser階層のファイルはバージョンアップの時に上書きされるのでそのまま修正は出来ない。
  • 移動フォルダなどは決められている。「ブログ」の場合はテーマフォルダの所定の位置に移動する。
  • フォルダ移動などでおきる問題は自己責任である。

ファイルを移動すれば、修正などができます。


ブログのレイアウト関係のdefaultフォルダをテーマフォルダに移動


移動といっても、「defaultフォルダ」をフォルダごとコピーして「テーマフォルダ」の中にペーストするだけである。システムはこれを察知して「テーマフォルダ」のファイルを実行する。そのような仕組みに出来ている。
図示すれば、下記の図のようになる。

説明図


● defaultフォルダの中身


在る場所と中身
baser/plugins/blog/views/blog/default
カテゴリーなどアーカイブ表示用ページ
archives.php
ブログ、インデックスページ
index.php
ブログ記事一覧blogPosts出力エレメント
posts.php
ブログ記事詳細表示ページ
single.php

default階層の移動で、好きな様に書き換えが可能である。但しレイアウトの修正位にしたほうが無難です。

上図で、ウィジェット階層、widgetsフォルダの移動は、通常の人には必要はない。


移動後の修正について


● single.php

ブログ記事詳細のページで在る。個別のデザインなどがある場合は好きなように構成すればよい。
標準ではブログCSS読み込み、ライトボックス(colorbox.js)の読み込みはここで行われている。


● index.php と archives.php

記事出力で、[ ≫ 続きを読む ]を付ける、付けないの処理方法についてである。
バージョン2.0.4で記事出力の関数 [コンテンツを表示する] postContent の修正がされたために index.php の引数が違ってきた。
バージョン2.0.4で、index.php は次ぎのようになっている。(バージョン1.6系では関数 postContentは修正されていないので、そのままで良い)


index.php
修正前のpostContent出力
<?php $blog->postContent($post,true,true) ?>

修正後のpostContent出力
<?php $blog->postContent($post,false,true) ?>

archives.php が修正されていない。同じく修正すべきであろう。
私の場合、archives.phpも同様に修正している。



archives.php
修正前のpostContent出力
<?php $blog->postContent($post,true,true) ?>

修正後のpostContent出力
<?php $blog->postContent($post,false,true) ?>

注意、関数postContentのことである、関数getPostContentではない。

言うなれば、バージョン2以前から関数 postContentは問題が有ったことになる。index.php と archives.phpともにレイアウトなど変更はしても、記事出力部分の変更はすることは無いので今まで気が付くことが無かったのであろう。
私もpostContentを単独で使用することないので判らなかった。


● 関連記事の表示

BaserCMS 2.0.4 拠り新たな関数$bcBaser->element('blog_related_posts')ができた。同じタグの関連投稿を取得する、single.php の中に記入して使用する。
挿入には postクラスの後が良いようだ。


略
<!-- post detail -->
<div class="post">
	<?php $blog->postContent($post) ?>
	<div class="meta"><span>
		<?php $blog->category($post) ?>
		 
		<?php $blog->postDate($post) ?>
		 
		<?php $blog->author($post) ?>
	</span></div>
	<?php $bcBaser->element('blog_tag', array('post' => $post)) ?>
</div>

<?php $bcBaser->element('blog_related_posts') ?>
<br />

<!-- contents navi -->
<div id="contentsNavi">
	<?php $blog->prevLink($post) ?>
	 | 
	<?php $blog->nextLink($post) ?>
</div>
<!-- comments -->
<?php $bcBaser->element('blog_comments') ?>

タグが複数個、登録の場合はそれぞれ個別のタグのあるページ全て拾ってくるので注意。よって必ずしも関連記事とはならない。表示数の設定もないので記事より長くなる恐れもある。


1記事に、タグを複数個登録した場合は、処理方法次第ではあるが本当の「関連記事」を取り出す処理は難しい。この新しい機能をつかうには、

1. 記事に対し、1つのタグを設定する。(1記事に複数は設定しない)
2. タグ名はそれぞれ独特な名前にする。(タグ名が非常に多くなる可能性がある)
3. タグ名は、業種、ブログの利用形態、ブログの内容、などに左右される。よって簡単に旨く行く場合と、難しい場合があるので工夫が必要だ。



例えば、下のような区分は簡単
中型冷蔵庫、大型冷蔵庫、18インチ液晶TV、32インチ液晶TV、

例えば、下のような区分は難しい
jquery css js html flash

このような準備があって、規則性のある設定をすれば「関連記事」として間違いなく拾ってくるでしょう。
複数タグを設定した場合は多くの記事を拾ってくるのは避けられない。


出力HTMLのリストを整える

PHPでのHTMLのリストが汚いとは言え、少しはキレイに見せたいものです。修正方法について考えます。


● 出力HTMLのリストを整える1 (ヘッド部分)

1. ヘッド部分のHTMLのリストを整えるには、適当な「改行」などを加えたりインデントを取って出力のリストを見ながら修正します。(ここがコツ)
2. 途中、全て関数処理ではなく手書きも加えてみました。$errorはエラー時の処理に使用する変数です。
3. ブログCSSは標準では、ブログでよみこまれますが、ここで読み込んでみました。
4. robot用のタグを入れています。完全にサイトのテストを終了し公開する場合に削除します。
5. テスト段階ではRSS、GoogleAnalyticsを実行させないようにしています。
6. JS、CSS、などは関数を使用しなくとも手書きでも挿入可能です。
7. サブフォルダを basercms2 としています。

微妙に「改行間隔」が違っている事に留意ください。これだけで概ねキレイになります。


<?php
/**
 * デフォルトレイアウト
 */
?>
<?php $bcBaser->xmlHeader() ?>
<?php $bcBaser->docType() ?>
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
<head>
	<?php $bcBaser->charset() ?>

	<?php $bcBaser->title() ?>

	<meta name="robots" content="noindex,nofollow" />
	<?php $bcBaser->metaDescription() ?>

	<?php $bcBaser->metaKeywords() ?>

	<?php $bcBaser->icon() ?>

	<?php /* $bcBaser->rss('ニュースリリース RSS 2.0', '/basercms2/news/index.rss') */ ?>

	<?php $bcBaser->css(array('import')) ?>
<?php
//error
$error=false; 
if ($bcBaser->getContentsName() == 'Error') {$error=true;}
//blog CSS
$contentsname=$bcBaser->getContentsName();
if ( $contentsname == 'News') {
	$bcBaser->css(array('blog-style'));
}
?>

<?php if($bcBaser->isHome()): ?>
<?php $bcBaser->css(array('top')) ?>
<?php $bcBaser->css(array('pops-photofader.css')) ?>
<?php endif ?>
<?php $bcBaser->js(array(
'jquery-1.7.2.min',
'startup',
'common'
)) ?>
<?php $bcBaser->scripts() ?>
	<script type="text/javascript" src="/basercms2/themed/corporation/js/pops-photofader.js"></script>
	<script type="text/javascript" src="/basercms2/themed/corporation/js/jquery.corner.js"></script>

<?php /* $bcBaser->element('google_analytics') */ ?>

</head>
<body id="<?php $bcBaser->contentsName() ?>">
</body>
</html>

以上は仮想サンプルです。


● 出力HTMLのリストを整える2 (ブログリスト部分)

ここは面倒であり、バージョンアップの場合に大変ですのでお勧めしません。参考程度にしてください。

出力HTMLのリストはphpの性格上「インデント」がばらばらになる。少しでも整えるには、色々なファイルを修正しなければならない。
ウィジェット関連のリスト出力は baser/plugins/blog/views/elements/widgets にまとまっている。
図のように、テーマの「elementsホルダ」に「コピー&ペースト」して修正出来る。但し完全にするには、その外のファイルをも修正しなければならない。



baser/plugins/blog/views/elements/widgets

blog_calendar.php
blog_category_archives.php
blog_monthly_archives.php
blog_recent_entries.php
blog_yearly_archives.php

これだけでも移動して、「インデント」部分を修正すれば少しは良くなる。
その外は、ヘルパーファイルの該当部分を修正しなければならない。大変な仕事である。よほどの事情がない限り修正することはないと思いますが、、。


blog_category_archives.phpの修正例

「インデント」を取り去り、HTML部分をすべて左によせている。これ以上の修正の場合は、出力HTMLを確認しながらインデントを付けて行く。


<div class="widget widget-blog-categories-archives widget-blog-categories-archives-<?php echo $id ?> blog-widget">
<?php if($name && $use_title): ?>
<h2><?php echo $name ?></h2>
<?php endif ?>
<?php if($by_year): ?>
<ul>
<?php foreach($categories as $key => $category): ?>
<li class="category-year"><span><?php $bcBaser->link($key.'年', array('plugin' => null, 'controller' => $blogContent['BlogContent']['name'], 'action' => 'archives', 'date', $key)) ?></span><?php echo $blog->getCategoryList($category, $depth, $view_count, array('named' => array('year' => $key))) ?>
</li>
<?php endforeach ?>
</ul>
<?php else: ?>
<?php echo $blog->getCategoryList($categories, $depth, $view_count) ?>
<?php endif ?>

</div>

一番壊している部分の修正例

リスト出力で次ぎのような部分は「インデント」「改行」を全て取り、直線状に整形する。


このような部分は
		<li<?php echo $class ?>>
			<?php $bcBaser->link($title, array(
				'admin'			=> false, 
				'plugin'		=> '', 
				'controller'	=> $blogContent['BlogContent']['name'], 
				'action'		=> 'archives', 
				'date', $postedDate['year']
			)) ?>
		</li>

下のようにする
<li<?php echo $class ?>>
<?php $bcBaser->link($title, array('admin'=> false,'plugin'=> '','controller'=> $blogContent['BlogContent']['name'],'action'=> 'archives','date', $postedDate['year'])) ?>
</li>
または
<li<?php echo $class ?>><?php $bcBaser->link($title, array('admin'=> false,'plugin'=> '','controller'=> $blogContent['BlogContent']['name'],'action'=> 'archives','date', $postedDate['year'])) ?></li>

カテゴリー一覧を下のようにするには、blog_category_archives.phpの修正だけでは直らない。


<div class="widget widget-blog-categories-archives widget-blog-categories-archives-1 blog-widget">
<h2>カテゴリー一覧</h2>
<ul class="depth-1">
<li><a href="/basercms2/news/archives/category/CMS">CMS(2)</a></li>
<li><a href="/basercms2/news/archives/category/JQUERY">JQUERY(2)</a></li>
<li><a href="/basercms2/news/archives/category/FLASH">FLASH(0)</a></li>
<li><a href="/basercms2/news/archives/category/MEMO">MEMO(4)</a></li>
</ul>
</div>

ブログヘルパーの、getCategoryList()を修正せねばならない。
ループ処理されている場合は「改行」している部分に注意ください。ループの形態、処理方法により「改行させて修正」する所が違ってきます。

ここの場合は、' ' 文字列の中で「改行」している。(HTML部分なので \n など挿入できない)


baser/plugins/blog/views/helpers/blog.php

/**
 * カテゴリーリストを取得する
 * 
 * @param $categories
 * @param $depth
 * @return string
 * @access public
 */
	function _getCategoryList($categories, $depth=3, $current=1, $count = false, $options = array()) {
		
		if($depth < $current) {
			return '';
		}

		if($categories) {
$out = '<ul class="depth-'.$current.'">
';

			$current++;
			foreach($categories as $category) {
				if($count && isset($category['BlogCategory']['count'])) {
					$category['BlogCategory']['title'] .= '('.$category['BlogCategory']['count'].')';
				}
				$url = $this->getCategoryUrl($category['BlogCategory']['id']);
				$url = preg_replace('/^\//', '', $url);
				
				if($this->_view->params['url']['url'] == $url) {
					$class = ' class="current"';
				} elseif(!empty($this->_view->params['named']['category']) && $this->_view->params['named']['category'] == $category['BlogCategory']['name']) {
					$class = ' class="selected"';
				} else {
					$class = '';
				}
$out .= '<li'.$class.'>'.$this->getCategory($category, $options);
				if(!empty($category['BlogCategory']['children'])) {
$out.= $this->_getCategoryList($category['BlogCategory']['children'],$depth,$current, $count, $options);
				}
$out.='</li>
';

			}
$out .= '</ul>';
			return $out;
		}else {
			return '';
		}
		
	}

かなり面倒ですね。またブログヘルパーのコードも読みにくいです。「インデント」はコード優先にしているわけです。
書き換えたら、間違いなく作動するか確認すること。少しの間違いがエラーで作動しなくなります。
バージョンアップがあればまた直す気力は無くなります。ほどほどにしておきましょう。


修正などを行った場合は必ず「メモ」して保存しておきましょう。


フォルダ移動などは自己責任である。バージョンアップの場合に「移動しているファイルが変更されていないか」十分に確認することが肝要である。


以上、個人的見解です。



[ この記事のURL ]


タグ:basercms2 , memo

 

ブログ記事一覧

年別アーカイブ一覧



[1]