d3forumのトピック一覧のゲスト名にユーザー名を表示する方法 #xoops

d3forumのトピック一覧(listtopics)のゲスト名に投稿者名を表示する方法が、
分かったのでメモしておきます。

通常、d3forumのトピックに、非ログインユーザーが書き込むと、
トピック一覧の「トピック開始」「最新投稿」に、
「ゲスト」としか表示されない。
それだと、ユーザー登録をする割合が少ないXoopsコミュでは、
誰がどれを投稿したのか分かりにくく不便。

そこで、以下の方法を試すと、
ゲスト状態でも、d3forumにきちんと名前が表示されるようになる。
※ブロックには表示されない

1.プラグインをダウンロードする

まずは、必須のプラグインをダウンロードする。
http://ryus.co.jp/modules/d3downloads/index.php?cid=4にある、
「d3forumの一覧でゲストの名前を表示するプラグイン」
「uidからname(本名)があればそれを無ければunameを持ってくるプラグイン」
の2個をダウンロードする。

2.プラグインをインストールする

次に、XOOPSルートの「class\smarty\plugins」に、
ダウンロードしてきたファイル2個を入れる。

3.テンプレートを修正する

ユーザー名を表示するために、テンプレートを修正する。

「テンプレート管理」→「d3forum」にある、
「bbs_main_listtopics.html」や「bbs_main_listcategories.html」が今回の目標。

最初の投稿者名を修正するには、
このテンプレート内に記述してある、
<{$topic.first_post_uname}>

<{if $topic.first_post_uid eq 0}>
<{ryus_d3forum_poster_guest_name id=$topic.first_post_id mydirname=$mydirname}>
<{else}>
<{ryus_uid_to_name_uname uid=$topic.first_post_uid}>
<{/if}>
に変更すればOK。

同じように、最終投稿者の名前を変える場合は、
<{$topic.last_post_uname}>

<{if $topic.last_post_uid eq 0}>
<{ryus_d3forum_poster_guest_name id=$topic.last_post_id mydirname=$mydirname}>
<{else}>
<{ryus_uid_to_name_uname uid=$topic.last_post_uid}>
<{/if}>
に修正すれば完了。

以上で、d3forumのトピック一覧に、
ゲストの名前も表示されるようになります。

参考URL

Xoopsのモバイル化に挑戦中。

妻の携帯

ずーっと、放ったらかしにしていたXoopsのモバイル化。
こんな時代なのに、すいません。

新規モジュールがインストールできなかった不具合が、
気づいたら、勝手に解決していたので(;゚Д゚))))ガクガクブルブル
やっとこさ、手をつけ始めました。

まずは、『Xoops Users Group Japan – 携帯対応 – XUGJ Wiki
を参考に、WizMobileをインストール。
これだけで、なんとか携帯で見られる形になります。

さらに調べていくうちに、
WizMobileのためのモバイルテンプレートの存在を発見。
MBXoops – 概要

さらにさらに調べていくと、
モバイルテンプレートで使うモジュールのための、
テーマ下テンプレートの存在を発見。
テーマ下テンプレートとは

かるてぽすとで、メインで使わせてもらっている『d3forum』にも、
テーマ下テンプレートがありました。
mbxoops6専用モバイルテンプレート > d3forum

詳細をつめずに、どんどん突きすすんでみたので、
今のところ、MBXoopsが機能していない模様。

本日はここまで。

SmartyとCSSをつかって、Xoopsでも、現在ページがハイライトするメニューの作り方。ロールオーバー付き。 #xoops

Xoopsの場合、theme.htmlがひとつしかないので、
現在ページをハイライトさせるには、すこし工夫がいります。
自分用にメモしておきます。

結論から言ってしまうと、
Smartyをつかって、特定のURLの時にだけ、
メニューコードのclass属性を変化させます。

まず完成品から。

http://www.kartepost.com

このサイトでは、d3forumのforumを上メニューに置いて、
Smartyでforum_idを指定しています。

上メニューのページへ移動したとき、
現在ページがハイライトしているのが確認できると思います。

用意する画像

メニューにつかう背景画像です。

ロールオーバー時の画像と合わせて一枚にしているので、
background-positionを足し算引き算しながら、つかいます。

サンプルhtmlコード

モジュールのURLを表示している時だけ、
class属性にnowをくわえています。

<div id="main-menu">
<ul>
	<{if $xoops_requesturi == '/'}>
		<li id="top-now"><a href="<{$xoops_url}>">トップページ</a></li>
		<{else}>
		<li id="top"><a href="<{$xoops_url}>">トップページ</a></li>
	<{/if}>

	<{if $xoops_requesturi == '/modules/d3forum/'}>
		<li id="d3forum-now"><a href="<{$xoops_url}>/modules/d3forum/">掲示板</a></li>
		<{else}>
		<li id="d3forum"><a href="<{$xoops_url}>/modules/d3forum/">掲示板</a></li>
	<{/if}>

	<{if $xoops_requesturi == '/modules/d3blog/'}>
		<li id="d3blog-now"><a href="<{$xoops_url}>/modules/d3blog/">ブログ</a></li>
		<{else}>
		<li id="d3blog"><a href="<{$xoops_url}>/modules/d3blog/">ブログ</a></li>
	<{/if}>

	<{if $xoops_requesturi == '/modules/pico/'}>
		<li id="pico-now"><a href="<{$xoops_url}>/modules/pico/">ページ</a></li>
		<{else}>
		<li id="pico"><a href="<{$xoops_url}>/modules/pico/">ページ</a></li>
	<{/if}>
</ul>
</div>

サンプルCSSコード

CSSは特に変わったことはありません。
一般的なロールオーバーの作り方どおりです。

/* ヘッダーメニュー
--------------------------------------------------*/
div#main-menu{
	width: 800px;
	height: 40px;
	margin: 0;
	padding: 0;
}
div#main-menu img{
	margin: 0;
	padding: 0;
	display: block;
}
div#main-menu ul{
	list-style: none;
	margin: 0;
	padding: 0;
}
div#main-menu li{
	display: block;
	float: left;
	height: 40px;
	text-indent: -9999px;
	margin:0;
	padding: 10px 0 10px 0;
}
div#main-menu a{
	background: url(../../images/main-menu.gif);
	background-repeat: no-repeat;
	display: block;
	text-decoration: none;
	/* ¥*/ overflow: hidden; /* */
}
/*トップページ
------------------------*/
div#main-menu li#top a{
	background-position: 0px 0px;
	width:80px;
	height:40px;
}
div#main-menu li#top a:hover{
	background-position: 0px -40px;
	width:80px;
	height:40px;
}
div#main-menu li#top a:active{
	background-position: 0px -40px;
	width:80px;
	height:40px;
}
div#main-menu li#top-now a{
	background-position: 0px -40px;
	width:80px;
	height:40px;
}
/*掲示板
------------------------*/
div#main-menu li#d3forum a{
	background-position: -80px 0px;
	width:120px;
	height:40px;
}
div#main-menu li#d3forum a:hover{
	background-position: -80px -40px;
	width:120px;
	height:40px;
}
div#main-menu li#d3forum a:active{
	background-position: -80px -40px;
	width:120px;
	height:40px;
}
div#main-menu li#d3forum-now a{
	background-position: -80px -40px;
	width:120px;
	height:40px;
}
/*ブログ
------------------------*/
div#main-menu li#d3blog a{
	background-position: -200px 0px;
	width:100px;
	height:40px;
}
div#main-menu li#d3blog a:hover{
	background-position: -200px -40px;
	width:100px;
	height:40px;
}
div#main-menu li#d3blog a:active{
	background-position: -200px -40px;
	width:100px;
	height:40px;
}
div#main-menu li#d3blog-now a{
	background-position: -200px -40px;
	width:100px;
	height:40px;
}
/*ページ
------------------------*/
div#main-menu li#pico a{
	background-position: -310px 0px;
	width:110px;
	height:40px;
}
div#main-menu li#pico a:hover{
	background-position: -310px -40px;
	width:110px;
	height:40px;
}
div#main-menu li#pico a:active{
	background-position: -310px -40px;
	width:110px;
	height:40px;
}
div#main-menu li#pico-now a{
	background-position: -310px -40px;
	width:110px;
	height:40px;
}

参考URL

こちらのページに、Smartyをつかった小技がたくさん紹介されています。
http://www.xugj.org/modules/xpwiki/?Smarty%E5%B0%8F%E3%83%8D%E3%82%BF

『Googleカスタム検索』でXoopsのd3forumのポスト単位だけを表示させる方法

『Googleカスタム検索』では、
検索結果にふくむ範囲を、
自由に指定してやることができます。

その機能をうまいことつかってやると、
Xoopsのモジュールd3forumのpost単位だけを、
『Googleカスタム検索』に表示させることができます。

その方法は、こんなかんじです。

  1. 『Googleカスタム検索』にログインします。
  2. じぶんがつくった検索エンジンの『コントロールパネル』をクリック。
  3. 左メニューから『サイト』をクリック。
  4. 『追加したサイト』の『サイトを追加』をクリック。
  5. URLに『www.(ホームページのURL).com/*index.php?post_id=』をかく。
  6. 『追加対象』に『 URL パターン
  7. 以上。

d3forumのpost_idのパターンで、
検索対象を指定してあげることがミソです。

URLのところで、
post_idのかわりに、topic_idをかいてやると、
トピック単位で表示させることもできます。

もし、d3forumを複数インストールしていて、
ひとつだけを検索対象にえらびたい場合は、
『除外したサイト』に、さきほどと同じ手順で、
『www.(ホームページのURL).com/modules/(含めたくないモジュール)/*』
を指定してやるとOKです。

どんなときに、この方法が役に立つかというと、
もし、運営しているホームページが、
d3forumをメインモジュールにしている、
掲示板コミュニティであれば、
サイト内検索にd3forumのpost単位だけを表示させるほうが、
ユーザーが求めている情報を探しやすくなる、といった場合です。

運営しているホームページの種類によっては、
ユーザーにとって、あまり必要じゃない情報を、
隠してあげることも大切というわけです。

これですね。

ここに使われている

<{$topic.forum_id}>

を使って、CSSでカテゴリー画像を表示させます。

まず、カテゴリーのリンクが表示されているコードを、

に変更します。

idをつかって、td全体の装飾をおこない、
classによって、それぞれのカテゴリー画像を表示させます。

あとは、classごとに、
CSSでカテゴリー画像を置換表示すればOKです。

<{$topic.forum_id}>

をつかって、forumごとに置換表示を変えているのが、
今回の方法のミソになります。

Xoopsのd3forumの「トピック一覧」ブロックにカテゴリー画像をCSSで表示させる方法

d3forumの「トピック一覧」ブロックに、
自分が用意したカテゴリー画像を、
cssをつかって表示させる方法です。

もともと、d3forumの「トピック一覧」ブロックには、
詳細表示をすると、
カテゴリー名とそのリンクは表示されています。

<{$topic.forum_title}> <{$topic.forum_title}>

Xoopsにグーグルカスタム検索を導入する方法

Xoopsに元から備わっているサイト内検索が
以下の理由から使いにくく感じていたので、
代わりにGoogle Custom Searchを導入することにしました。

Xoopsのサイト内検索は、
・検索結果にページタイトルしか表示されない
・モジュールごとに5件ずつしか表示されず、わざわざ「全て表示」リンクをクリックしないといけない
・あるモジュールを検索対象から外す設定が難しい

という点が使いにくく感じました。

個々のモジュールのxoops_version.phpの

$modversion['hasSearch'] = 1;

$modversion['hasSearch'] = 0;

にすれば検索対象から外れるようですが、
細かいURLの指定ができないのが難点。

一方、Google Custom Searchでは
検索対象・検索除外対象URLを細かく指定できるため
使い勝手が良いのが採用のポイントです。

Google Custom Searchの設定において、
検索対象URLを指定することで、
検索範囲を指定するようにしてあります。

ただ、このままだと他モジュールのトピックも検索対象になってしまうので、
除外対象URLも合わせて指定しています。

そして、検索結果を表示するために
picoモジュールのURL名を変更してインストールし、
1ページ目のコンテンツにGoogle Custom Searchのコードを貼り付けています。

picoに Google Custom Searchを表示させる場合、
複数のコンテンツがあると検索結果がきちんと表示されないみたいなので
別途 picoモジュールを用意する必要があります。

また、検索結果のページには
アドセンス広告を表示しないように設定してあります。

XoopsのIEのコメントエラーメッセージを解決する方法

Internet Explorerでd3forumにコメントをつけようとすると、
「Web ページに問題があるため、正しく表示または機能しなくなる可能性があります。」
というメッセージがポップアップされる問題がありました。

原因を調べたところ、
コメントフォームに元々存在していた題名(subject)を、
削除していたことが作用していました。

</form>

の直前に

<input type="hidden" name="subject" id="html" value="<{$subject_raw|string_format:$smarty.const._MD_D3FORUM_FMT_COMMENTSUBJECT|escape}>">

を入力しておくことで、
エラーメッセージが表示しないようになりました。

Xoopsのd3forumのコメント欄の修正方法

Xoopsのモジュール『d3forum』の、
コメント欄をもっと小さくしたい場合、
『テンプレート管理』から「inc_post_form_quick.html」を開き、

<textarea name="message" cols="50" rows="8"><{$message}></textarea>

<textarea name="message" cols="50" rows="1"><{$message}></textarea>

に変更すれば、OKです。

コメント欄が小さいほうが、
投稿するときの、心理的なハードルが下がりますからね。

Xoopsのサーバー移転の手順メモ(XREA⇒さくらレンタルサーバー)

カルテポストを運営するためにXREA Plus(月額200円)と契約したのですが、契約した直後から1週間以上もアクセスできなくなる等、運営状況に不安を感じたのでサーバー移転を決意しました。

移転先はさくらのレンタルサーバ。口コミ情報を見る限りだと、スタンダードプラン(月額500円)は当たりはずれがあり、プレミアムプラン(月額1500円)だと安定性には問題ないらしい。また、スタンダードプランより上位でないとMySQLが使えないのでライトプランは候補から除外。ということで、ひとまずさくらのスタンダードプランと契約。様子を見るためにレンタル料を2ヶ月分だけ支払うことにします。

以下は、XREAからさくらレンタルサーバーへXoopsを移転する時の手順メモです。ドメインはValueDomainで取得した独自ドメインをそのまま運用しています。

1.XREAサーバーのファイルをPCに保存する

XREAに保存してきたXoopsのファイルをPCのデスクトップにでも保存しておいてください。後で使います。

2.XREAサーバーからXoopsのデータベースをエクスポートする

  • ValueDomainからXreaへログインし、「データベース」からPhpMyAdminへログインします。
  • PhpMyAdminへログイン後、Xoopsを運用しているデータベースを選択します。表のオーバーヘッドの項目に数値が表示されている場合は、こちらを参考に「テーブルの最適化)を行っておきます。
  • その後、上部メニューにある「エクスポート」を行います。「全選択」「SQL」を選び、「DROP TABLE / DROP VIEWを追加」「IF NOT EXISTSを追加」「ファイルに保存する」にチェックを入れて、『実行する』ボタンを押します。これでデータベースのエクスポートが完了します。

3.さくらレンタルサーバーでドメイン設定

  • 「ドメインの設定」で「新しいドメインの追加」のボタンをクリック。
  • 「4. 他社で取得、または他社で管理中のドメインを移して使う」の「上記以外のドメインの場合」を選びます。
    ドメイン名を入力します(例.□□□□□□.com)

4.さくらレンタルサーバーにXoopsのデータベースをインポートする

  • 「データベースの設定」でデータベースを作成します。
  • MySQLにログインして、Xoopsを運営するデータベースを選択します。
  • 上部メニューにある「インポート」へ移動。先ほどエクスポートしたテキストファイルを選択し、『実行する』をクリックします。これでデータベースのインポートが完了しました。

5.さくらレンタルサーバーにXoopsの全ファイルをアップロードする

  • 1で保存しておいたXoopsの全ファイルをさくらレンタルサーバーにアップロードします。(※PHPファイルのパーミッションは【755】、CGIは【705】で転送すること!)

6.mainfail.phpを修正する

このままだとXoopsが表示されませんのでmainfail.phpを修正する必要があります。

  • XOOPS_ROOT_PATHを「/home/■■■■■■■/www/□□□□□□.com」
  • XOOPS_TRUST_PATHを「/home/■■■■■■■//www/xoops_trust_path」(←はフォルダの場所によって適時異なると思います)
  • XOOPS_DB_HOSTを「mysql■■■.db.sakura.ne.jp」(サーバーの番号を入れてください)
  • XOOPS_DB_USER、XOOPS_DB_PASSも再設定

以上でXoopsのサーバー移転は完了です。何か抜けている作業を見つけた方はどうぞコメントでご指摘ください。

参考URL

Xoops Cube Legacyのアカウント情報を追加する手順

Xoopsのアカウント情報を追加するのにかなり手こずったのでまとめておく。アカウント情報を減らしたり、デフォルトの項目の名前を変更して代用したりするのは割と簡単なんだけど、アカウント情報をさらに追加するとなると一気に難易度が上がるので気合を入れよう。

例えば、「あなたの仕事はなに?」という項目を増やしたいと仮定する。あらかじめxoops側の名前を半角英数字で決めておく。今回は「user_work」とする。

1.ALTSYSというモジュールのインストール

これはXoops Cube Legacyの必須モジュールである。

2.テンプレートを複製する

「管理メニュー⇒互換レンダーシステム⇒テンプレート管理」へ移動し、defaultのテンプレートを複製する。名前はHPの名前でいいだろう。今後はこの複製したテンプレートをいじっていくことになる。テンプレートを複製しておくと、元に戻したくなったときのバックアップになってくれるのでとても重要になってくる。必ず複製したテンプレートをactiveにしておこう。

3.アカウント編集に項目を追加する

「管理メニュー⇒ALTSYS⇒テンプレート管理⇒ユーザーモジュール」にある「user_edituser.html」を編集する。追加したい項目の行を増やそう。既存の項目(<tr>から</tr>)をコピーすると楽にできる。赤字は修正が必要な箇所である。

<tr>
<td class=”head”><{$smarty.const._MD_USER_LANG_USER_WORK}></td>
<td class=”<{cycle values=”odd,even”}>”>
<{xoops_input name=user_work size=60 maxlength=150 value=$actionForm->get(‘user_work‘)}>
</td>
</tr>

入力する項目を変更したい場合はsizeやmaxlengthを修正する。

4.アカウント情報に項目を追加する

「管理メニュー⇒ALTSYS⇒テンプレート管理⇒ユーザーモジュール」にある「user_userinfo.html」を編集する。先ほどと同様に追加したい行を増やす。

<tr valign=”top”>
<td class=”head”><{$smarty.const._MD_USER_LANG_USER_WORK}></td>
<td class=”<{cycle values=’odd,even’}>”><{$thisUser->getShow(‘user_work‘)}></td>
</tr>

5.EditUserForm.class.phpを編集する

/ROOT/modules/user/forms/EditUserForm.class.phpを編集する。既存のコードを真似するようにコピーしていこう。

// set propertiesに下記コードを追加
$this->mFormProperties['user_work'] =& new XCube_StringProperty(‘user_work‘);

// set propertiesに下記コードを追加
$this->mFieldProperties['user_work'] =& new XCube_FieldProperty($this);
$this->mFieldProperties['user_work']->setDependsByArray(array(‘maxlength’));
$this->mFieldProperties['user_work']->addMessage(‘maxlength’, _MD_USER_ERROR_MAXLENGTH, _MD_USER_LANG_USER_WORK, ’150′);
$this->mFieldProperties['user_work']->addVar(‘maxlength’, 150);

function load(&$obj)に下記コードを追加
$this->set(‘user_work‘, $obj->get(‘user_work‘));

function update(&$obj)に下記コードを追加
$obj->set(‘user_work‘, $this->get(‘user_work‘));

以上のコードを追加したらアップロードしておこう。

6.日本語言語ファイルを編集する

xoops_trust_path/cache/lang_●●●_user_ja_utf8_main.phpを編集する。(注.xoopsの言語コードがjapaneseのままの人は/xxx.com/modules/user/language/japanese/main.phpを編集してアップロードすればOKかも)

define(‘_MD_USER_LANG_USER_WORK‘, “あなたの仕事はなに?“);

を追加する。

7.コアハックをする

/ROOT/karnel/user.phpを編集する。

function XoopsUser($id = null)に下記コードを追加
$this->initVar(‘user_work‘, XOBJ_DTYPE_TXTBOX, null, false, 150);

を追加する。

8.phpMyAdminのテーブルにフィードを追加する

サーバーのphpMyAdminにログイン後、xoopsのサイトのデータベースを選択する。するとテーブルがたくさん表示されると思うので、そこから「●●●_users」を選ぶ。そして1個のフィールドをテーブルの末尾に追加する。

  • フィールド user_work
  • 種別 VARCHAR
  • 長さ/値 150(適当な値)
  • 属性 空白のまま
  • ヌル(NULL) not null
  • デフォルト値 空白のまま
  • その他 空白のまま

以上で保存する。

参考URL

Xoopsのインストール手順メモ

インターネット上でコミュニティを作る為に、Xoopsを利用することにしたので勉強中。「5分で簡単インストール」がうたい文句らしいが、ずぶの素人にはwordpressよりも敷居が高かった。

  1. まずサーバー(僕はXserver)でMySQLを設定する(MySQLのバージョンは5.0にしておく)
  2. Xoops Cube Legacyのインストールファイルをゲットする。
  3. FFFTPでファイルをアップロードする(オプション⇒環境設定⇒転送3で「*.php」に属性755、「*.php」に属性705を設定しておく。後で個別にパーミッションを設定するのはクソ手間だから)
  4. フォルダuploads、cache、templates_cの属性を777に、ファイルmainfile.phpを属性666に設定する。
  5. 文字コードがデフォルトではUTF-8ではないので、別途作業が必要。「Package_Legacy⇒extras⇒ja_utf8」フォルダに入っている「install」「language」「modules」フォルダを上書きコピーする。
  6. URLにログインして、必要な項目を入力していく。言語は「Japanese」ではなく「ja_utf8」を選ぶ。Xserverの場合、データベースサーバのホスト名はlocalhostではない。MySQL切替⇒MySQL情報で確認できる)
  7. インストールが成功したら、サーバーから「install」フォルダを削除する。
  8. mainfile.phpの属性を644にする(エラー表示が消えなければ、気になる人だけ400にする)

参考URL