リンクの URI セグメントがデータベースから対応するデータをロードするデータベース駆動型サイトで作業しています。このサイトは CodeIgniter 2.1.4 で実行されており、JQuery Mobile は AJAX 経由でページを読み込みます。これが私の URL の例です。
site.com/browse (インデックス機能を実行し、アーティストのリストを読み込みます)
site.com/browse/artist/album (アーティスト関数を実行し、3 番目の URI セグメント アルバムをパラメーターとしてデータ モデルに渡し、そのアーティストのアルバムのリストを読み込みます)
URL からモデルに ID を渡してデータをロードし、そのデータをビューに処理する方法を理解しています。Browse クラスの index 関数を呼び出すと、すべてが正常に機能します。アーティストのリストを作成できます。Artist 関数を呼び出すと、URI セグメントがモデルに渡されてデータが読み込まれますが、$data がビューに渡されていないように見えるため、データを表示しようとすると未定義の変数エラーが発生し続けます。
get_data.php:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Get_data extends CI_Model {
function getAllArtists() {
$query = $this->db->query('SELECT DISTINCT ARTIST FROM data ORDER BY ARTIST');
if($query->num_rows() > 0) {
foreach($query->result_array() as $row){
$data[] = $row;
}
return $data;
}
}
function getAllAlbums($artist) {
//Get artist from URI segment
$artist = urldecode($this->uri->segment(3));
$query = $this->db->query('SELECT DISTINCT ALBUM, ARTIST FROM data WHERE ARTIST = "'.$artist.'" ORDER BY ALBUM');
if($query->num_rows() > 0) {
foreach($query->result_array() as $row){
$data[] = $row;
}
return $data;
}
}
}
ブラウズ コントローラー:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Browse extends CI_Controller {
public function index(){
//Page Data
$data['title'] = 'Site: Browse';
$this->load->model('get_data');
$data['rows'] = $this->get_data->getAllArtists();
$rows = $this->data['rows'];
//Page Views
$this->load->view('t/header', $data);
$this->load->view('p/browse', $data);
$this->load->view('t/footer');
}
public function artist($artist){
//URL Decode
$artist = urldecode($artist);
//Page Data
$data['title'] = 'Site: '.$artist;
//Load model and retrieve data from database
$this->load->model('get_data');
$this->data['rows'] = $this->get_data->getAllAlbums($artist);
$rows = $this->data['rows'];
//Page Views
$this->load->view('t/header', $data);
$this->load->view('p/artist', $data);
$this->load->view('t/footer');
}
public function album($album){
//Page Data
$data['title'] = 'site: '.urldecode($album);
//Load model and retrieve data from database
$this->load->model('get_data');
$this->data['rows'] = $this->get_data->getAllSongs($album);
$rows = $this->data['rows'];
//Page Views
$this->load->view('t/header', $data);
$this->load->view('p/artist', $data);
$this->load->view('t/footer');
}
}
ビューを参照します(これは正常に機能します):
<!-- Start content.php -->
<div data-role="page">
<div data-role="header" data-id="header" data-position="fixed">
<div data-role="navbar">
<ul>
<li><a href="http://www.site.com/home" class="" data-transition="fade">Home</a></li>
<li><a href="http://www.site.com/browse" class="" data-transition="fade">Browse</a></li>
<li><a href="http://www.site.com/about" class="" data-transition="fade">About</a></li>
<li><a href="javascript:void(0)"id ="toggle">▶</a></li>
</ul>
</div>
</div><!-- /jqm-header -->
<div data-role="content">
<ul id="song_list" data-role="listview" data-filter="true">
<?php foreach ($rows as $r) {?><li data-icon="false"><a data-transition="slide" href="http://www.site.com/browse/artist/<?php echo urlencode($r['ARTIST']); ?>"><?php echo $r['ARTIST']; ?></a></li><?php };?>
</ul>
</div>
<div data-role="footer">
<h4>site.com</h4>
<h5><?php echo $this->benchmark->elapsed_time();?></h5>
</div><!-- /jqm-footer -->
アーティストビュー(これによりエラーが発生します:未定義の変数「行」):
<!-- Start content.php -->
<div data-role="page">
<div data-role="header" data-id="header" data-position="fixed">
<div data-role="navbar">
<ul>
<li><a href="http://www.site.com/home" class="" data-transition="fade">Home</a></li>
<li><a href="http://www.site.com/browse" class="" data-transition="fade">Browse</a></li>
<li><a href="http://www.site.com/about" class="" data-transition="fade">About</a></li>
<li><a href="javascript:void(0)"id ="toggle">▶</a></li>
</ul>
</div>
</div><!-- /jqm-header -->
<div data-role="content">
<ul id="song_list" data-role="listview" data-filter="true">
<li data-icon="false"><a data-rel="back">Back</a></li>
<?php foreach ($rows as $r) {?><li data-icon="false"><a data-transition="slide" href="http://www.site.com/browse/album/<?php echo urlencode($r['ALBUM']); ?>"><?php echo $r['ALBUM']; ?></a></li><?php };?>
</ul>
</div>
<div data-role="footer">
<h4>site.com</h4>
<h5><?php echo $this->benchmark->elapsed_time();?></h5>
</div><!-- /jqm-footer -->
これは私を狂気に駆り立てています。以前は動作していましたが、今は何が問題なのかわかりません。jQuery Mobile AJAX の読み込みを無効にしましたが、それでもこのエラーが発生します。どんな助けでも大歓迎です。ありがとう。