0

ゾーン(地域)と同じように、登録アカウントのステップでドロップダウンメニューとしてジオゾーンを表示したいと思います。ただし、ジオゾーンの価値は、顧客がゾーン(地域)で何を選択するかによって異なります。

その過程で、私はすでにコントローラー、ビュー、コントローラーを含むいくつかの変更を行いました。下の写真のように: コタマディア/カブパテンはジオゾーンフィールドです

ジオゾーンフィールドはKotamadya/Kabupatenです。しかし、リージョンAcehを選択すると、geozoneフィールドは更新されません。

エラーメッセージ

以下のようなエラーメッセージが表示されました:

SyntaxError: Unexpected token <

OK

<br />
<b>Fatal error</b>: Call to a member function
getGeozonesByZoneId() on a non-object in <b>
/home/........../catalog/controller/account/register.php
</b> on line <b>513</b><br />

コード

../controller/account/register.phpで、以下のようにいくつかの変更を追加しました。

public function zone() {
    $json = array();

    $this->load->model('localisation/zone');

    $geozone_info = $this->model_localisation_zone->getZone($this->request->get['zone_id']);

    if($geozone_info)
    {
        $this->load->model('localisation/geo_zone');

        $json = array(
            'country_id'        => $geozone_info['country_id'],
            'name'              => $geozone_info['name'],
            'code'              => $geozone_info['code'],
            'zone'          => $geozone_info['zone_id'],
            'geozone'           => $this->model_localisation_geozone->getGeozonesByZoneId($this->request->get['zone_id']),
            'status'            => $geozone_info['status']      
        );
    }
$this->response->setOutput(json_encode($json));
}

513行目は:

'geozone'           => $this->model_localisation_geozone->getGeozonesByZoneId($this->request->get['zone_id'])

getGeozonesByZoneId関数の何が問題になっているのかわかりません。これは、以下のように../model/localisation/geo_zone.phpに関数を既に正しく記述していると思うためです。

    <?php
class ModelLocalisationGeozone extends Model {
    public function getGeozone($zone_id) {
        $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "geo_zone WHERE geo_zone_id = '" . (int)$geo_zone_id . "'");

        return $query->row;
    }       

    public function getGeozonesByZoneId($zone_id) {
        $geozone_data = $this->cache->get('geozone.' . (int)$zone_id);

        if (!$geozone_data) {
            $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "zone_to_geo_zone WHERE zone_id = '" . (int)$zone_id . "'");

            $geozone_data = $query->rows;

            $this->cache->set('geozone.' . (int)$zone_id, $geozone_data);
        }

        return $geozone_data;
    }
}
?>

そして私はすでに以下のようにビューでregister.tplにjavascriptを追加しました:

$('select[name=\'zone_id\']').bind('change', function(event, first_time) {
          $.ajax({
              url: 'index.php?route=account/register/zone&zone_id=' + this.value,
              dataType: 'json',
              beforeSend: function() {
                  $('select[name=\'zone_id\']').after('<span class="wait">&nbsp;<img src="catalog/view/theme/default/image/loading.gif" alt="" /></span>');
              },
              complete: function() {
                  $('.wait').remove();
              },
              success: function(json) {

                  var html = '<option value=""><?php echo $text_select; ?></option>';
                  var selected = false;
                  if (json['geozone'] && json['geozone'] != '') {
                      for (i = 0; i < json['geozone'].length; i++) {
                          html += '<option value="' + json['geozone'][i]['geo_zone_id'] + '"';

                          if (json['geozone'][i]['geo_zone_id'] == '<?php echo $geo_zone_id; ?>') {
                              html += ' selected="selected"';
                              selected = true;
                          }

                          html += '>' + json['geozone'][i]['name'] + '</option>';
                      }
                  } else {
                      html += '<option value="0" selected="selected"><?php echo $text_none; ?></option>';
                  }

                  $('select[name=\'geo_zone_id\']').html(html);
                  if(typeof first_time === "undefined" && selected) {
                    $("#register_details_form").validate().element('#register_details_form select[name="geo_zone_id"]');
                  }
              },
              error: function(xhr, ajaxOptions, thrownError) {
                  alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
              }
          });
      });

      $('select[name=\'zone_id\']').trigger('change', ['first_time']);

誰かが私がこの問題を解決するのを手伝ってくれる?または多分私と同じ経験をしていて、あなたの解決策を私に共有したいと思っていますか?

よろしくお願いします。

4

2 に答える 2

0

model_localisation_zone(未定義)の代わりに(定義済み変数)を使用model_localisation_geozoneするか、後者が定義されていることを確認してください。

于 2013-02-17T16:25:28.870 に答える
0

私が間違っていない場合はGeozoneregister.phpコントローラーファイルにモデルをロードするのを忘れていますこの行を追加してください

$this->load->model('localisation/geozone');

register.php

関数を呼び出す前に

$this->model_localisation_geozone->getGeozonesByZoneId($this->request->get['zone_id'])
于 2013-02-17T19:14:03.003 に答える