XOOPS

日本でよく使われているCMSです。Geeklogや、MamboDrupalとかあります。

インストール

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.htmlhttp://ml.php.gr.jp/pipermail/php-dev/2005-July/001161.htmlを参考に PHPのソースを直してみたのですが、状況は変わらなかったです。
参考:
PHP 4.4.1 文字化け、mb_send_mail第5引数 備忘録
設定ファイル(php.ini)の編集
最近の mbstring 関係のバグのまとめ
セキュリティアップデート : PHP 4.4.1について(PHP4.4.xにおける問題)
メールのSubjectが文字化けする件

メールアドレスに.(ドット)が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 テンプレートシステムの概要
2.16 テンプレートマネージャー詳細

メールを送ったら、ヘッダにい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++)

の部分もコメントしてやりました。

リンク

参考書籍


トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-08-07 (木) 05:16:00 (5761d)