* [[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." <input type='text' name='options[]' value='".$options[0]."' /> "._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]]