2020/09/24 17:40 JST

Geeklog Japan Forums

custom_users.phpの導入について


状態: オフライン

とき

Forum User
Newbie
登録日: 28
投稿数: 14
sad
はじめまして こんにちは。 さくらインターネットにGeeklog1.6.1拡張版をインストールしました。 custom_users.phpを導入したいと思っています。 wikiの 管理方法 > 管理者が導入後すぐ試せる簡単カスタマイズ > カスタム関数を自由に記述する > custom_users.php を見て作業を進めています。 このページに「ダウンロード:日本語版標準パッケージ(20061121版)に組み込み済み 」とありましたが「custom_users.php」で検索してもファイルが見あたらないようなので、同じページ下部のソースをコピーして秀丸で編集し、UTF-8で保存して使用しています。 できあがったものをアップして開こうとしたところ、
Fatal error: Cannot redeclare custom_usercreate() (previously declared in ○○○/private/geeklog/system/lib-custom.php:200) in ○○○/private/geeklog/system/custom/custom_users.php on line 74
というエラーが出ます。 lib_custom.phpの200行目に
PHP Formatted Code

function CUSTOM_userCreate ($uid,$bulkimport=false)
 
custom_users.phpの74行目のまとまりがある先頭に
PHP Formatted Code

function custom_usercreate($uid)
 
Cannot redeclareで検索したら、関数の名前が重複していると出ると書かれているのですがこの場合も同様でしょうか? (同じような質問が出ていないのでエラーの原因は私のミスだと思いますが)もし同様の場合、どのように対処したらよいでしょうか。 また、当方の現在の設定内容は以下のとおりです。 一連の作業で行ったことは (1)テーマ/customディレクトリに memberdetail.thtml を準備する。   ★済み★   (2)必要があれば {customfields} を 以下のテンプレートに追加する   ★とりあえず保留★ (3)追加テーブルが必要な場合は、create して すでに、USERSに登録されているレコードと同じuidのデータは登録しておく   ★phpMyadminでgl_users_optテーブルを作成。データが6つあったのでここにも6件の   データを作成 (4)custom_users.phpをカスタマイズする (文字コードに注意!)   ★いろいろ書き換えています。   ユーザー編集画面表示
PHP Formatted Code

    //*追加項目01
    $retval .= '<tr>';
    $retval .= '<td align="right"><b>追加項目1:</b></td>';
    $retval .= '<td><input type="text" name="fld01" size="50" value="';
    $retval .= $A['fld01']  .'"></td>';
    $retval .= ' </tr>';
   
  これを7項目追加して、「name="fld01"」と「$A['fld01']」のfld01にあたる部分をgl_users_optで作ったフィールド名に書き換え。   ユーザ保存
PHP Formatted Code

    // 追加テーブルを使用している場合
    // 追加テーブルへのユーザデータ登録
    $△△=addslashes($_POST['△△']);
    $◇◇=addslashes($_POST['◇◇']);
  (中略)
    $sql .= " ,△△='".$△△."'";
    $sql .= " ,◇◇='".$◇◇."'";
   
  (以下略)   と、それぞれ7項目ずつ追加してgl_users_optで作ったフィールド名に書き換え。   ユーザが新規登録する時のフォームの表示
PHP Formatted Code

    $user_templates->set_var('FULLNAME', $LANG04[3]);
    $user_templates->set_var('FULLNAME_HELP', "");
    $user_templates->set_var('fullname', '');
  にならって、
   $user_templates->set_var('△△の項目名, $LANG04[3]);
   $user_templates->set_var('
FULLNAME_HELP', ""); ←ここはとりあえずそのまま
   $user_templates->set_var('
△△', '');
   
  と7つ追加してgl_users_optで作ったフィールド名に書き換え。   あわせてmemberdetail.thtmlに{△△}項目を作成。 (5)lib_custom.php require_once( 'custom/custom_users.php' ); 追加   ★済み★ (6)config.php にて $_CONF['custom_registration'] を true に設定する。   ★済み★ 設置に難儀しておりますが、ぜひ使いたい機能なので何か助言いただけると幸いです。 よろしくお願いします。

状態: オフライン

Ivy

Site Admin
管理者
登録日: 01
投稿数: 5942
場所:Tokyo
lib-custom.phpには、すでにカスタムユーザ関係の関数が定義されているので、 それを無効にせず、さらに追加すると重複しますのでエラーになりますので、 注意が必要です。 それ以上のことは、詳しく知っている開発者のコメントをお待ちください。

状態: オフライン

とき

Forum User
Newbie
登録日: 28
投稿数: 14
confused
Ivy様 こんばんは。返信ありがとうございます。 その後、重複しているなら片方コメントアウトしてみたらどうだろう? と思ってcustom_users.phpの該当しているひとまとまりをコメントアウトしたところ、今度は
Fatal error: Cannot redeclare custom_userdelete()…
というエラーが出ました。 やはり「ダウンロード:日本語版標準パッケージ(20061121版)に組み込み済み 」とあったようにcustom_users.phpじゃないところに設定するようになっているのかな? と思っているところです。 とりあえずlib_custom.phpを見ているのですがいまひとつわからず…。 自分でももう少し調べてみますが、おわかりになる方いらっしゃいましたら教えていただけると幸いです。 よろしくお願いします。

とき

ゲストユーザ
こんにちは。 (1)その後あれこれ試して、カスタム登録画面が出せるようになりました。 (2)新規登録のテストをすると「ユーザー名を入力して下さい」というエラーが頻発するようになりました。 (3)登録できたりできなかったりで原因がわからなかったので  https://www.geeklog.jp/forum/viewtopic.php?forum=16&showtopic=6837&highlight=custom  を参考にして公開領域にある「config.php」でコメントアウトされていた  
PHP Formatted Code
$_CONF['rootdebug'] = true;
 のコメントを外してアップしてみました。 (4)「An error has occurred」という表示でいろいろ表示されたのでそのページを印刷 (5)「config.php」で修正した箇所をまたコメントアウトしてUTF-8/BOMなし/改行LFで保存して同じ場所にアップし直したところ、
Unfortunately, an error has occurred rendering this page. Please try again later.
のエラーが出てその先に進めない状態です。 新しく解凍したバージョン1.6.1拡張版からconfig.phpをアップしてみても変わりませんでした。 エラーログには今日の日付のエラーは載っていませんでした。 なんとか(2)の状態まで戻せないだろうかと思っています。 良い方法がありましたらご教授ください。よろしくお願いします。

状態: オフライン

とき

Forum User
Newbie
登録日: 28
投稿数: 14
さきほどゲストユーザとして書き込みしてしまいましたが、上の投稿も私のものです。 その後、自分が変更したファイル(custom_users.php、memberdeteil.thtmlなど)をデフォルトのもので上書きしてみましたがエラーが解消されなかったため、すべて削除して再インストールしました。 とりあえず初期状態に戻ったのでまた改めてやり直してみたいと思います。 今後、Unfortunately, an error has occurred rendering this page. Please try again later. のエラーが出たときにすべきこと、考えられることなどがあったら教えていただけると幸いです。

状態: オフライン

Ivy

Site Admin
管理者
登録日: 01
投稿数: 5942
場所:Tokyo
エラーが発生したらどのようなエラーなのか、error.logを必ず見てください。 それと、開発中のサイトであれば、ゲストユーザにもエラーを見せるモード をsiteconfig.phpにセットしてください。 $_CONF['site_enabled'] = true; の下あたりに、 $_CONF['rootdebug'] = true; を指定しておくだけです。 そうすると、ログインしなくてもだれでもエラーを確認できるようになります。

状態: オフライン

とき

Forum User
Newbie
登録日: 28
投稿数: 14
Ivy様 こんにちは。 返信ありがとうございます。
PHP Formatted Code
$_CONF['rootdebug'] = true;
にしてみたら、エラーのリストのようなものが出て確認できるのですが、その後$_CONF['rootdebug'] = true;の行をコメントアウトしたファイルを上書きしても元に戻らなくなってしまうようです。
Unfortunately, an error has occurred rendering this page. Please try again later.
のエラーが出ますが、エラーログには何も載っていない状態です。 何か設定を間違えているのだろうとは思うのですが、今回はこれとは別に質問があります。 ------------ 最初の質問に戻ります。 新規登録でカスタム登録画面は出せるようになったのですが、データを入力してもuser_optテーブルにデータが入りません。 以前の書き込みで「できるようになりました」というのは、出せずにいたカスタム登録画面が出せるようになったという意味合いでした。 今はlib_custom.phpのユーザー登録関連の関数をコメントアウトして、wikiの解説ページをもとにcustom_users.phpを作成・改造しています。 このように進めているのですが、「ダウンロード:日本語版標準パッケージ(20061121版)に組み込み済み 」とあるのが気になっています。wikiのcustom_users.php解説ページのソースは使わず、lib_custom.phpに載っているソースを使って改造するのが正しいでしょうか。しかしlib_custom.phpのサンプルコードにはusers_optが含まれる記述が見あたらないのでwikiのソースが正解なのか? わからずにいます。 wikiのcustom_users.phpのソース
PHP Formatted Code
function custom_usercreate($uid)
{
    global $_CONF, $_TABLES;
    global $_DB_table_prefix;
    // 更新項目は、事前に addslashes() を通すなどして準備しておくこと
    // 追加テーブルを使用している場合
    // 追加テーブルへのユーザデータ登録
    $sql = "INSERT INTO ";
    $sql .= $_DB_table_prefix ."users_opt" ;
    $sql .= " (uid) ";
    $sql .= " VALUES (";
    $sql .= uid;
    $sql .= ")";
    DB_query ($sql);

    // 既存項目の更新を追加している場合
    // パッケージテーブルへの更新の追加
    $sql = "UPDATE ";
    $sql .= "{$_TABLES['users']} SET ";
    $sql .= " email='{$_POST['email']}'";
    $sql .= ",homepage='{$_POST['homepage']}'";
    $sql .= ", fullname='{$_POST['fullname']}' ";
    $sql .= "WHERE uid=$uid";
    DB_query($sql);
    return true;
}
を、
PHP Formatted Code
function custom_usercreate($uid,$追加1,$追加2)
{
    global $_CONF, $_TABLES;
    global $_DB_table_prefix;
    // 更新項目は、事前に addslashes() を通すなどして準備しておくこと
    // 追加テーブルを使用している場合
    // 追加テーブルへのユーザデータ登録
    $sql = "INSERT INTO ";
    $sql .= $_DB_table_prefix ."users_opt" ;
    $sql .= " (uid,追加1,追加2) ";
    $sql .= " VALUES (";
    $sql .= uid,追加1,追加2;
    $sql .= ")";
    DB_query ($sql);
(以下は変更していないので略)
 
としてみたところ画面が真っ白になります。 トライアンドエラーでいろいろ試していますがうまくいきません。 何度も細々長々と申し訳ありません。 PHPの解説書など見ながら試しているもののかなり行き詰まっておりますので、おわかりになる方いらっしゃいましたら返信いただけると幸いです。よろしくお願いします。

状態: オフライン

Ivy

Site Admin
管理者
登録日: 01
投稿数: 5942
場所:Tokyo
Wikiの情報が古くてすみません。 現在はそのソースは同梱していません。 ユーザー関連の関数が本体で変わったので そのまま使えなくなっています。 本体に同梱されたカスタム関数を 元に ウィキのソースは参考程度に 参照してください。

状態: オフライン

とき

Forum User
Newbie
登録日: 28
投稿数: 14
Ivy様 こんばんは。 返信ありがとうございます。 そうだったんですか Geek Geeklog導入にあたってwikiでいろいろ調べていますが、「この情報は自分が使っているバージョンに合った内容だろうか?」と思うことがままあります。 見分ける方法を知りたいのですが、「ダウンロード:日本語版標準パッケージ(20061121版)に組み込み済み 」とある場合は1.6.1拡張版には古い内容なので参考程度にする、というのが正解でしょうか。 いつもGoogleで「Geeklog custom_users.php」などと検索してヒットしたページを見る、という方法で調べていたのでwikiのトップに「以下のドキュメントは,Geeklog1.4用の説明が残っています。」とあるのもしばらく気づいていませんでした。 wikiの各ページに、その内容に対応しているバージョンを表示していただけるととても助かりますが、手間がかかるので難しいでしょうね…。 ----- 追記 雑談コーナーに同じ内容の投稿がありましたね。 https://www.geeklog.jp/forum/viewtopic.php?showtopic=14163 編集日付を参考にしたいと思います。

時刻はすべて JST , 現在の時刻は 05:40 PM

  • 通常
  • 注目トピック
  • ロック済
  • 新着
  • 注目トピック 新着
  • ロック済トピック 新着
  •  ゲストユーザの投稿を見る
  •  投稿可能
  •  一部のHTMLを許可
  •  バッドワードをチェック