モジュールはmxdirectoryです。何かいい方法、簡単に実現できる方法がありましたらご教授願います。
自分で試したのは以下の方法です。
1・DBのxoopscommentsテーブルに[com_image]というファイル名格納用のフィールドを追加。
2・class/xoopsformloader.php に下記の一行を入れ
include_once XOOPS_ROOT_PATH."/class/xoopsform/formfile.php";
3・include/comment_form.php に下記の一行を入れ
cform->addElement(new XoopsFormFile("画像の投稿", 'com_image', 50000));
コメント投稿画面には画像の投稿という行及び、参照ボタンが出現。
4・inculude/comment_post.php に
画像ファイルを任意のディレクトリに置く処理をし、下記の一文を入れる
$comment->setVar('com_image', 画像ファイル名);
5・DBのxoopscommentsに追加したcom_imageに画像ファイル名が追加されず。という状況です。
xoops 2.0.16a JP を利用してます。
コメント(2件)
kinmojさん、そうなんです。コメントにグルメ投稿サイトを作ろうと思ってるのですが、ユーザが自由に食べたメニューを投稿できるようにしたかったのですが・・・。
また自分で調べてみます。ありがとうございました。
ただし、コアな部分をいじくりまわしたのでお勧めできないと思います。
自分自身、何が起こるかビクビクしてます。
すでにうろ覚えですが、修正した内容を覚えているだけ書きます。
1・まずDBのフィールド修正。
xoopscommentsのフィールドで適当な場所に、com_imageフィールドを追加。ここに画像ファイル名が入るので、テキトーな文字列型に。
2・include/comment_form.php
ここでコメントフォームを吐き出している模様。入れたいところに
$cform->addElement(new XoopsFormFile("画像の投稿", 'com_image', 500000));
こんな感じで画像投稿のボックスを生成する。数字は画像最大サイズなので適当に入れる。
更に
$cform = new XoopsThemeForm(_CM_POSTCOMMENT, "commentform", 'comment_post.php')
と言う部分でフォームタグ及び属性を生成しているのだけどを下記に変更。
$cform = new XoopsThemeForm(_CM_POSTCOMMENT, "commentform", 'comment_post.php' , 'POST' ,false," enctype='multipart/form-data'");
というのも画像を投稿するためには enctype='multipart/form-data' という部分が必要なので、それをformタグ内に入れるようにする。
3・kernel/comment.php
受け取る先のクラス(?)がそれに対応してないので対応させるようにする。そのためにはfunction XoopsComment内をいじる。
$this->initVar('dobr', XOBJ_DTYPE_INT, 0, false);
の下に、
$this->initVar('com_image', XOBJ_DTYPE_TXTBOX, null, true, 255, true);
を入れる。
更に、DBに投稿するためのインサート文も変更
$sql = sprintf("INSERT INTO %s ・・・・長いので省略。
ここを前述のcom_imageを考慮したつくりに変更する。
4・class/xoopsform/form.php
function XoopsForm($title, $name, $action, $method="post", $addtoken = false){
を下記に修正。
function XoopsForm($title, $name, $action, $method="post", $addtoken = false , $extra){
そのすぐしたの
$this->_method = $method;
の下に
$this->_extra = $extra;
を入れます。
あとは
include/comment_post.php
ここで、投稿された画像($_FILES[])を
image_magicやらupload_file_moveだかなんだかをつかって
然るべき場所に格納してあげる。
って感じだったと思います。