[Tep-j-general] Re: 「ショップの住所と電話番号」が登録できない

Back to archive index

Margy Mutoh margy****@roseb*****
2006年 1月 29日 (日) 14:09:50 JST


益子さん、こんにちは。Margyです。(長文です)

ついいましがた、問題解決との投稿がありましたが、今後同じ
ような問題にぶつかられることもあるかと思いますので、
ご参考までに私のやってる原始的な問題探し手順をご紹介します。

今回の場合を例にとると、

1) admin/configuration.php の「あたり」はついてるわけなので、
「更新」「取り消し」ボタンに関連する部分を見つけるために、
同ファイル内でこのボタンを探しましょう。
「更新」ボタンは button_update.gif なので、configuration.php
でこれを検索すば、1箇所しかないのですぐわかります。
(ファイル名は右クリックの「画像を保存」とかで見れば容易に
わかりますね)

2) 問題の箇所は、このボタンの直前のテキストエリアなので、
さかのぼって、ここの組み立てを見てみましょう。
1行上のコードを見ると、

>      $contents[] = array('text' => '<br><b>' .
$cInfo->configuration_title . '</b><br>' .
$cInfo->configuration_description . '<br>' . $value_field);

…となります。
$cInfo->configuration_title が 「ショップの住所と電話番号」
という見出しで、
$cInfo->configuration_description が 「印刷とディスプレイ
表示に使用されるショップ名,住所,電話番号を設定します.」という
説明文、そのあとの $value_field がテキストエリアを描画してる
部分かな、ということは想像がつくでしょう。
でも $value_field では、肝心のテキストエリアの中身がわかりま
せんね。

3) そこで、問題の箇所のhtmlソースと見比べてみます。

>     <td class="infoBoxContent"><br><b>ショップの住所と電話番号</b><br>
> 印刷とディスプレイ表示に使用されるショップ名,住所,電話番号を設定します.<br>
> <textarea name="configuration_value" wrap="" cols="35" rows="5">
> ショップほげほげ
> 東京都○○区○○町xx-xx-xx
> 03-xxxx-xxxx
> </textarea></td>

のようなソースになっていると思います。
ここで<textarea></textarea>のタグが出てきますが、admin/configuration.php
のソースを検索しても<textarea>は出てきません。だったら他の
ファイルから出力されているはず、ということで、grepで<textarea>
探しです。
益子さんお使いのTeraPadには標準ではgrep機能がないそうですが、もう
装備されましたか?
http://harpy.org/delfy/tpadhelp/tips34.html

4) grepでosCのルートディレクトリを指定して<textarea>を検索します。
実際には、開始タグには固有のオプションが入っているので、終タグ
「</textarea>」で検索しました。(「<textarea」でもいいかもしれません)
するとosC全体で3つしか</textarea>は出てきません。

extras\update.php(74行目)
catalog\includes\functions\html_output.php(522行目)
admin\includes\functions\html_output.php(364行目)

おっ、admin\includes\functions\html_output.php、これが怪しいじゃ
ないか、ということで、当該ファイルを見に行きます。
しかし admin\includes\functions\html_output.php の364行目付近には

>     $field = '<textarea name="' . $name . '" wrap="' . $wrap . '"cols="' . $width . '" rows="' . $height . '"';

という形で「ひな形」があるだけで、
> <textarea name="configuration_value" wrap="" cols="35" rows="5">
の具体的な name、cols、rowsの値は出てきません。

5) そこで今度は値のありかを探します。検索のキーになりそうなのは
name="configuration_value" なので、今度は「configuration_value」で
grepします。
すると山のような検索結果が出てきました。そこで、検索結果から
cols="35"の「35」を検索してみます。すると結果は1箇所のみ、

> admin\includes\functions\general.php(696):     return tep_draw_textarea_field('configuration_value', false, 35, 5, $text);
                                                     ^^^^
ここだけです。これで、

> また、「ショップの住所と電話番号」の入力欄は複数行とってありますが、この行数に
>
> ボタンが隠れてしまっていると言うことはないですよね・・・。(^^;;;
> 行数も変更してみようかと思いましたが、どの部分もソースが分かりません。
>
> 特に指定はされていないのでしょうか・・・。

↑これの検証をしてみることができますね。
admin/includes/functions/general.phpの696目の「35, 5」がテキスト
エリアの「桁, 行」の値ですから、まあ「35」は変える必要がないとして、
「5」のほうを3とか2とかにしてみれば、益子さんのおっしゃる「隠れて
しまっている」かどうかの検証はできるでしょう。

# ちなみに、htmlソースで桁/行に数値が入ってることが確認できるわけで
# すから、その時点で「特に指定されていない」という推論は消えますね。
# 値が明示的に入っている箇所は、必ずどこかで指定されています。

…以上、問題探しの初級編でした。(^_^;
初級編、原始的といっても、一つひとつファイルを開いて検索するよりは
はるかに速いですし、かくいう私も毎日のようにやってる作業です。
検索のしかたは何通りもありますし、osCに慣れてくればもっと効率的な
探し方(問題点の見当をつけて探す)もできるようになると思いますが、
ほんの一例ということで。


ところで肝心の「ボタンが消えた問題」ですが、「ショップの住所と電話
番号」だけに特化した不具合ということから考えて、また「タグ壊し」の
恐れはなかったでしょうか?(先日の<td>の例のような)
テキストエリア内にhtmlコードとか書かれてませんでした? もしくは
「.」とか「"」とか「'」とかでプログラムを壊し(中断させ)てるとか。
(念のため、htmlタグやこれらの文字を入れてみましたが、私のとこでは
ボタン等のレイアウトは壊れませんでした)

コードもいじってない、定型決め打ちの出力部分だから特定の項目だけ
壊れるのはヘン、となると、モノがテキストエリアだけに、たまたま
そこに記入した文字が、偶然にプログラムやタグを分断してしまってる
可能性もなきにしもあらずかなあ、と。

Margy Mutoh




Tep-j-general メーリングリストの案内
Back to archive index