nc.vicunaのチューニング

投稿者: | 2011年1月4日
Pocket

はじめに

これまで、http://www.infra.jp/debian/nucleus/にて様々なプラグインの設定方法について紹介してきましたが、vicunaを使用する場合は独自のチューニングが必要なところも出てきます。本記事では、これまで紹介してきたプラグインの設定方法を踏襲しつつ、vicuna独自の設定部分についてまとめていきたいと思います。

サイドバーにサブカテゴリーを表示させる

NP_MultipleCategoriesの設定が前提になります。

管理画面のレイアウト設定 -> テンプレート編集にて以下の2つのテンプレートを編集

  1. vicuna/index
    <!-- NP_MultipleCategoriesを使う場合は下の一行を削除、コメントアウト部を使ってください
     				<li class="category"><a href="<%categorylink%>" title="<%category%> Index"><%category%></a></li>
    -->
    <!-- NP_MultipleCategoriesを使う場合は以下を有効にしてください -->
    				<li class="category"><%MultipleCategories%></li>
    <%edit%>
    
  2. vicuna/item
    <!-- NP_MultipleCategoriesを使う場合は下の一行を削除 
     				<li class="category"><a href="<%categorylink%>" title="<%category%> Index"><%category%></a></li>
    -->
    <!-- NP_MultipleCategoriesを使う場合は以下の一行を有効に -->
    				<li class="category"><%MultipleCategories%></li>
    <%edit%>
    

続いて、管理画面のプラグイン -> スキンファイル -> vicunaにあるnavi.incを以下の通り編集

<dt>Categories</dt>
<dd>
	<%categorylist(vicuna/title)%>
	<%ContentsList(>subtemplate)%>
</dd>

トラックバック対応

NP_Trackbackの設定が前提になります。通常のスキンとの差分は、トラックバック受信時のテンプレート編集になります。

管理画面のレイアウト設定 -> テンプレート編集にある’vicuna/index’を編集し、アイテムの本体部分を以下の通り書き換えます。

<!-- NP_TrackBackを使う場合はコメントアウトを解除 -->
				<li class="trackback"><a href="<%itemlink%>#trackback" title="<%title%>へのトラックバック" rel="nofollow">TrackBack</a>: <span class="count"><%TrackBack(count)%></span></li>
<!-- NP_TrackBackを使う場合は以下の一行を削除 
				<li class="trackback">TrackBack (Close): <span class="count"> - </span></li>
-->
			</ul>

グローバルナビゲーションの設置

サイドバーとは別に、グローバルナビゲーション(本サイトでいうところのHOME,About,Book,Link,Travel)及びスペシャルスキンパーツ(リンク先の専用ページ)を作成します。

レイアウト設定 -> スキン編集 -> vicuna: メインの目次ページにて以下のピンクの箇所を追加します。

<div id="header">
	<p class="siteName"><a href="<%blogsetting(url)%>"><%blogsetting(name)%></a></p>
	<p class="description"><%blogsetting(desc)%></p>
       <ul id="globalNavi">
         <li><a href="http://www.example.jp/">HOME</a></li>
         <li><a href="http://www.example.jp/page-a/">Page-A</a></li>
         <li><a href="http://www.example.jp/page-b/">Page-B</a></li>
         <li><a href="http://www.example.jp/page-c/">Page-C</a></li>
</div>

上記の4つのリンク先を専用ページとして作成します。

TOPページ作成

まずHOMEとして、http://www.example.jpへのアクセス時に表示させるページを作成します。

# vi /var/www/example/index.php

//setup for benchmarking
include('./benchmark.inc');

// This file will generate and return the main page of the site
$CONF = array();
//$CONF['Self'] = 'index.php';
//$CONF['Self'] = 'http://www.example.jp';
$CONF['Self'] = '';
include('./config.php');
if (!count($_GET)) $_GET['special']='top';
selector();

ピンクの箇所を追記します。

次に、管理画面のレイアウト設定 -> スキン編集 から、vicunaの「編集」リンクをクリックし、「スペシャルスキンパーツ」のフォームにTopと入力して作成します。そして、Home相当にしたいのでとりあえずメインの目次ページのコードをコピーします。

次にtop専用のheaderを作ります。同じく管理画面のスキンファイル -> vicunaと辿り、head.incを以下の通りに編集します。

<%if(skintype,top)%>
	<link rel="alternate" type="application/xml" href="<%sitevar(url)%>xml-rss2.php" title="RSS 2.0" />
	<link rel="alternate" type="application/atom+xml" href="<%sitevar(url)%>atom.php" title="Atom cite contents" />
	<link rel="contents" href="<%archivelink%>" title="<%blogsetting(name)%> Archives" />
	<link rel="stylesheet" type="text/css" href="<%skinfile(styles-site.css)%>" />
	<meta name="description" content="<%blogsetting(desc)%>" />
	<title><%blogsetting(name)%></title>
<%endif%>

※<%if(skintype,index)%>よりも前に追加します。

以上で、http://www.example.jpへのアクセス時に、スペシャルスキン「Top」が表示されるようになります。

TOPページ以外(Page-A,B,C)の作成

続いて、残りのPage-A,Page-B,Page-Cページを作成していきます。

スペシャルスキンパーツ及びHeader部分の修正方法についてはtopと同様の手順になりますので割愛し、差分であるNucleusのindex.phpの修正方法について以下で説明します(スペシャルスキン名はpage-a, page-b, page-cとします。)。

完成イメージとしては以下の2パターンがありますのでそれぞれについて説明します。

  1. http://www.example.jp/page-a.php
  2. http://www.example.jp/page-a/

パターン1(www.example.jp/page-a.php)

/var/www/example/index.phpをpage-a.phpという名前でコピーして、selector();の前に$_REQUEST[‘special’] = ‘page-a’;を入れます。

# vi /var/www/example/page-a.php

...

//setup for benchmarking
include('./benchmark.inc');

// This file will generate and return the main page of the site
$CONF = array();
//$CONF['Self'] = 'index.php';
//$CONF['Self'] = 'http://www.example.jp';
$CONF['Self'] = '';
include('./config.php');
$_REQUEST['special'] = 'page-a';
selector();

この状態で http://www.example.jp/page-a.phpにアクセスするとスキン名:page-aにアクセス可能となります。

※エラー対応

http://www.example.jp/page-a/にアクセスするとどうなるか試してみたところ以下のようなエラーがブラウザに表示されました。

Fatal error: Call to a member function getID() on a non-object in /var/www/example/nucleus/plugins/NP_TrackBack.php on line 1417

リンク先の無いページとはいえ、ファイルのパスが表示されてしまい気持ち悪いので対応することにします。206RC.orgさんのサイトで気になる記事を発見したため、参考にさせて頂きNP_Trackback.phpを修正したところ、通常のページが無い時のエラーになりました。

global $blog;
global $manager, $blog;

$bid = $blog->getID();
if (!empty($blog)) {
	$b =& $blog;
} else {
	$b =& $manager->getBlog($CONF['DefaultBlog']);
}
$bid = $b->getID();

パターン2(www.example.jp/page-a/)

続いてパターン2の実現方法です。

パターン1ではindex.phpをコピーしてpage-a.phpを作成しましたが、パターン2ではpage-aというディレクトリをindex.phpと同じ階層に作成し、その中にindex.phpをコピーします。

index.phpの修正はパターン1と同じですが、includeしているファイルのパスが変わるので要注意です。

# mkdir /var/www/example/page-a
# cp /var/www/example/index.php /var/www/example/page-a/index.php
# vi /var/www/example/page-a/index.php

<?php
/*
 * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
 * Copyright (C) 2002-2009 The Nucleus Group
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 * (see nucleus/documentation/index.html#license for more info)
 */

/**
 * Nucleus index.php
 *
 * @license http://nucleuscms.org/license.txt GNU General Public License
 * @copyright Copyright (C) 2002-2009 The Nucleus Group
 * @version $Id: index.php 904 2009-02-06 16:26:06Z shizuki $
 */

//setup for benchmarking
include('../benchmark.inc');

// This file will generate and return the main page of the site
$CONF = array();
//$CONF['Self'] = 'index.php';
//$CONF['Self'] = 'http://www.example.jp';
$CONF['Self'] = '';
include('../config.php');
$_REQUEST['special'] = 'page-a';
selector();

?>

サイト上方の画像変更

デフォルトで以下のサバンナ画像を使用しています。これを別ファイルにすることで変更できます。

/var/www/example/skins/vicuna/style-galaxy/images/eyecatch/image1.png

タイトルの修正

デフォルトでheaderのtitleがブログ名 – カテゴリ名となっておりSEO的にいまいちなため、以下のように修正します。

サブカテゴリー画面:サブカテゴリー名 – カテゴリー名 – ブログ名

コンテンツ画面:コンテンツ名 – カテゴリー名 – ブログ名

管理画面のプラグイン -> スキンファイル -> vicunaにあるhead.incを以下の通り編集します。

<%if(skintype,index)%>
<%if(category)%>

...

	<link rel="contents" href="<%archivelink%>" title="<%blogsetting(name)%> Archives" />
	<link rel="contents" href="<%archivelink%>" title="<%MultipleCategories(1,name)%> - <%category(name)%> - <%blogsetting(name)%>" />

...

	<title><%blogsetting(name)%> - <%category(name)%> Archive</title>
	<title><%MultipleCategories(1,name)%> - <%category(name)%> - <%blogsetting(name)%></title>

...

<%if(skintype,item)%>

...

	<link rel="contents" href="<%archivelink%>" title="<%blogsetting(name)%> Archives" />
	<link rel="contents" href="<%archivelink%>" title="<%itemtitle%> - <%category(name)%> - <%blogsetting(name)%>" />

...

	<title><%blogsetting(name)%> - <%itemtitle%></title>
	<title><%itemtitle%> - <%category(name)%> - <%blogsetting(name)%></title>

...

参考文献

Citrocubeさんのサイト

206RC.orgさんのサイト

vicuna配布サイト

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です