* [[XOOPS]]
日本でよく使われているCMSです。[[Geeklog]]や、[[Mambo]]、[[Drupal>http://drupal.jp]]とかあります。
#contents

** インストール
Apache 2.0.52~
MYSQL 4.1.7~
PHP 4.3.9~
http://jp.xoops.orgからXOOPS 2.0.9.2をダウンロードしました。
これをwebrootに解凍します。 解凍後権限を変えておきます。nobodyとかしてますが、apacheのhttpd.confで設定した権限とあわせておきます。
 chown -R nobody:nobody xoops/
ではインストールするためにMySQLにXOOPSのユーザを作成しておきます。updateはMySQL4.1を使っている場合です。
 create database xoops;
 grant all privileges on xoops.* to xoops@localhost identified by 'hogepass';
 UPDATE mysql.user SET Password = OLD_PASSWORD('hogepass') WHERE Host = 'localhost' AND User = 'xoops';
 FLUSH PRIVILEGES;
ではブラウザからhttp://hogehoge.hoge/xoops/html/index.phpを開きます。あれ?ログインの入力がないですね。ちょっとログを見てみると、
 main(): Failed opening required 'XOOPS_ROOT_PATH/class/template.php'
ってでています。どうもMySQL4.1系は対応していないみたいですね。困ったなー

では原因を探るためにMySQL4.0.23aをインストールしてみました。するとあっさり動きました。

** インストールXOOPS Cube
Apache 2.0.54~
MYSQL 5.0.13~
PHP 4.3.11~
XOOPS Cube Legacy 2.1.4,php5.2.5,MySQL5.1.23でも動きました。
http://jp.xoops.org/からXOOPS 2.0.12 JPをダウンロードしました。
 wget http://keihanna.dl.sourceforge.jp/xoops/16357/xoops-2.0.12-JP.tar.gz
これをwebrootに展開します。
 tar xzvf xoops-2.0.12-JP.tar.gz
 mv xoops-2.0.12-JP/ xoops
解凍後権限を変えておきます。
 chown -R nobody:nobody xoops/
ではmysqlより
 create database xoops;
 grant all privileges on xoops.* to xoops@localhost identified by 'hogepass';
 UPDATE mysql.user SET Password = OLD_PASSWORD('hogepass') WHERE Host = 'localhost' AND User = 'xoops';
 FLUSH PRIVILEGES;
ではブラウザからhttp://hogehoge.hoge/xoops/html/index.phpを開きます。あれ?あっさり動きましたね。ん?よくみるとところどころ文字化けしているなー おそらくmysqlの問題ぽい?いや、まずphpをmysql4.0でコンパイルしていたので、まずphpをコンパイルしなおしてみよう。んー違うな。やっぱりmysqlか?ちょっと調査してみます。文字コードを変更したら画面が真っ白になってしまいました。では原因を確かめます。
どうもheader.phpの$bresult =& $block_arr[$i]->buildBlock();で落ちていました。class/xoopsblock.phpを調査します。 $block = $show_func($options);でbidが5のとき、b_system_main_showを実行しようとして落ちています。ではmodules/system/blocks/system_blocks.phpを見てみます。function b_system_main_show()の$modules =& $module_handler->getObjects($criteria, true);で落ちています。ではkernel/module.phpを見て、getObjectsをみてみましょう。
function &getObjects($criteria = null, $id_as_key = false)でSQLを生成しているので、echo $sqlをするとなぜか画面が出てきた。なぜだ?ちなみに今の[[MySQL]]は5.0.13-rcで--with-charset=binary --with-extra-charsets=allでコンパイルし、my.cnfはdefault-character-set=ujisにしています。~|-①も入力表示されてました。
ちなみにこれです。http://hidekazu.dhs1.sst.ne.jp/xoops/html/
** XFセクション
-テンプレートのxfs_block_new.htmlは新着記事です。
** formmail
-modules\formmail\classのelements.phpでDB更新
-表題で改行(<BR>)したい。~
formmail\class\elementrenderer.php
 $ele_caption = $this->_ele->getVar('ele_caption', 'e');
を
 $ele_caption = $this->_ele->getVar('ele_caption', 'n');
-ラベルを出力したい。
とりあえずラベル用をつくるのがめんどくさかったので、elementrenderer.phpにtextでbox widthが999の時は、
 if ( $ele_value[0] == 999 ) {
    $form_ele = new XoopsFormLabel($ele_caption,"");
 }
としてやり、templatesのformmail_form.htmlで
 <{if $element.body == ""}>
   <td colspan="2"><{$element.caption}></td>
としています。ところがメールはこのキャプションをつかっているので、そのままやってきてしまいました。さてどうしよう..
-最後の項目だけしかでん~
index.phpの
 foreach( $elements as $i ){
 	$renderer =& new FormmailElementRenderer($i);
 	$form_ele =& $renderer->constructElement('ele_'.$i->getVar('ele_id'));
 	$req = intval($i->getVar('ele_req'));
 	$form->addElement($form_ele, $req);
 	$count++;
 	unset($form_ele);   //<-追加
 	unset($hidden);
 }

**multimenu
-8個までだがそれ以上増やしたい。~
blocks\multimenu.php
 function i_multimenu_show($options) {
	$block = getMultiMenu( $options, 'multimenu09' );
	return $block;
 }
 function i_multimenu_edit($options) {
	$form = _BM_MULTIMENU_CHARS."&nbsp;<input type='text'
 name='options[]' value='".$options[0]."' />&nbsp;"._BM_MULTIMENU_LENGTH."";
	return $form;
 }
を追加。増やすときはi,j,kと増やせばいい。けどテーブルxoops_newblocksにあわせればいいような気もする~
adminにindex09.phpを追加(index08.phpをコピー)。開いて$menu_num = "09";に変更~
admin\admin_function.phpのfunction mm_admin_menuを修正
 $tblColors
 echo "<li style=
に追加~
admin\menu.phpに$adminmenu[8]を追加~
templates\blocksにmultimenu_block08.htmlを追加~
sql\mysql.sqlにmultimenu09を追加して、テーブル作成~
language\japanese\admin.phpに_AD_MULTIMENU_ADMIN_09を追加~
language\japanese\blocks.phpに_BM_MULTIMENU_TITLE_8を追加~
xoops_version.phpにmodversionを追加~
dbのxoops_newblocksテーブルに追加~
dbのxoops_tplfileテーブルに追加~
dbのxoops_tplsourceテーブルに追加~
12個まで確認

参考 http://www.xugj.org/modules/manual2/content/index.php?id=4
** kernel
-object.php XoopsObject~
getVarやassignVars等
** class
-template.php XoopsTpl extends Smarty
Template engine
-[xoopsform]
--form.php XoopsForm
ここにあるassignでテンプレートからsmartyにassignしている。elementsは
 $elements[$n]['name']	  = $ele->getName();
 $elements[$n]['caption']  = $ele->getCaption();
 $elements[$n]['body']	  = $ele->render();
 $elements[$n]['hidden']	  = $ele->isHidden();
 $elements[$n]['description']  = $ele->getDescription();
XoopsFormElementを参照。renderはabstract methodである。
--themeform.php XoopsThemeForm extends XoopsForm~
Form that will output as a theme-enabled HTML table
--formelement.php XoopsFormElement~
Abstract base class for form elements

** PHP4.4
 Only variable references should be returned by reference
というエラーが出る場合は、メモリ破壊問題の修正されて、誤った使い方をしているとこのようなNoticeが大量に出力されます...

** モジュール作成
http://xoops.sourceforge.jp/wiki/xoops2/index?TECHのTECH/モジュールの作り方を参考にします。

** TIPS
***getVarとか
kernelのobject.phpにいます。いろいろオプションがあります。
***DBの中身を見る
 include_once XOOPS_ROOT_PATH."/class/module.errorhandler.php";
 $eh = new ErrorHandler;
 global $xoopsDB;
 $sql = "SELECT id,title FROM ".$xoopsDB->prefix("multimenu01");
 $result = $xoopsDB->query($sql) or $eh->show("0002");
 while ($myrow = $xoopsDB->fetchArray($result)) {
  echo sprintf("id=%s title=%s<br>",$myrow["id"],$myrow["title"]);
 }
query($sql)はquery($sql,5,0)と書くと0番目から5件取得する。~
$eh->show("0002")はmodule.errorhandler.phpを参照しエラーメッセージを表示~
取得行は、
 $num_form = $xoopsDB->getRowsNum($result);
で参照
***queryのinsertが動かない。
select以外は、post等で呼び出したら使える。ただしqueryF()はつかえる。
***mailの件名が化ける
=?iso-2022-jp?・・・・・・・・・・・・・・となる場合は、class/mail/phpmailer/class.phpmailer.phpのmail_sendの
 $rt = @mail($to, $this->encode_header($this->Subject), $body, $header, $params);
を
 $rt = @mail($to, '=?'.$this->CharSet.'?B?'.base64_encode($this->Subject).'?=', $body,
 $header, $params);
に変更する。その下も
 $rt = @mail($to, $this->encode_header($this->Subject), $body, $header);
を
 $rt = @mail($to, '=?'.$this->CharSet.'?B?'.base64_encode($this->Subject).'?=',
 $body, $header);
に変更してPHP 4.3の場合はうまくいきました。ただしPHP 4.4の場合はうまく行きません。試しているのはPHP 4.4.7なのです。そこで、~
http://xoopscube.jp/modules/xhnewbb/viewtopic.php?viewmode=thread&topic_id=758&forum=5&post_id=4306#4306
を参考にさせていただき、xoopsmailerlocal.phpをダウンロードして、language/japanese/xoopsmailerlocal.phpを置き換えるとうまくいきました。
http://ml.php.gr.jp/pipermail/php-dev/2005-July/001159.htmlやhttp://ml.php.gr.jp/pipermail/php-dev/2005-July/001161.htmlを参考に
PHPのソースを直してみたのですが、状況は変わらなかったです。~
参考:~
[[PHP 4.4.1 文字化け、mb_send_mail第5引数 備忘録>http://nucleus.mochy.com/item/182]]~
[[設定ファイル(php.ini)の編集>http://xoops.sourceforge.jp/wiki/free/index?HOWTO%2F%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB%2FLinux%2F3.PHP#k5c838b9]]~
[[最近の mbstring 関係のバグのまとめ>http://d.hatena.ne.jp/t_komura/20051105#1131202088]]~
[[セキュリティアップデート : PHP 4.4.1について(PHP4.4.xにおける問題)>http://xoopscube.jp/modules/cubeNews/index.php?action=detail&id=18]]~
[[メールのSubjectが文字化けする件>http://www.xugj.org/modules/d3forum/index.php?topic_id=13]]~

***メールアドレスに.(ドット)が2つ以上続けば、メールが送信されない。
class/xoopsmailer.phpのfunction setToEmailsなんですが、ここでif (preg_match(のところではじかれてしまいます。さてどうしようか?

***contact module でメール踏み台の危険性がある。
http://www.sakimura.org/modules/wordpress/index.php?p=285~
http://xoopscube.jp/modules/xhnewbb/viewtopic.php?topic_id=39&viewmode=flat&order=ASC&start=0~

***テンプレートのdb:ってなに?
べたに知りたければ、xoops_version.phpを見て、テーブルtplfile、tplsourceを参照。
また普通にやる場合は、管理者メニューの一般設定>テンプレートから編集。
templatesにあるファイルはインストール時にDBに登録される元ねた
[[5.1 テンプレートシステムの概要>http://www.xugj.org/modules/manual1/content/index.php?id=39]]~
[[2.16 テンプレートマネージャー詳細>http://www.xugj.org/modules/manual1/content/index.php?id=30]]

***メールを送ったら、ヘッダにいX-Mailerが2つ、MIME-Version2つ付いている。
class.phpmailer.phpを見ていると、function mail_sendのmailで付加されちゃっている。しょうがないので、
function create_header()で$header[] = sprintf("MIME-Version: 1.0%s", $this->LE);とかをコメントしてやりました。
すると、X-Spam-Statusのscoreが3つ減りました。
さらにX-Mailerで、PHPとかくっついていると、spamAssassinでカウントされるので、
 for($index = 0; $index < count($this->CustomHeader); $index++)
の部分もコメントしてやりました。

** リンク
-http://www.oceannet.jp~
テーマがいろいろあります。
-http://xoops.sourceforge.jp/wiki/xoops2/~
いろいろなモジュールがあります。
-http://xoops.sourceforge.jp/wiki/xoops2/index?cmd=read&page=TECH%2Fquery~
-http://www.wervival.net/modules/tinycontent/content/xoops/redesign.htm~
XOOPSのリデザイン
-http://xoops.sourceforge.jp/wiki/xoops2/index?ETC%2F%BB%B2%B9%CD%A4%CB%A4%CA%A4%EB%A5%C7%A5%B6%A5%A4%A5%F3%A4%CE%A5%B5%A5%A4%A5%C8~
ETC/参考になるデザインのサイト 
** 参考書籍
-[[XOOPS入門>http://www.amazon.co.jp/exec/obidos/ASIN/4798106186/worried-22]]
-[[XOOPSコミュニティサイト構築ガイド>http://www.amazon.co.jp/exec/obidos/ASIN/4774119253/worried-22]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS