Reputation: 136
I've recently tried out opencart, so I'm a newbie at it. I managed to get the data and display them in the html table, however i'm stuck at the sorting of the tables when i click on the columns. The url in the address bar does display the route correctly, indicating the ASC and DESC orders of the data, but the records in the data does not get sorted at all. Where did I do wrong with this? Could it be my model or perhaps the controller? THanks
controller:
<?php
class ControllerPingPing extends Controller {
private $error = array();
public function index() {
$this->load->language('ping/ping');
$this->document->setTitle($this->language->get('heading_title'));
$this->load->model('ping/ping');
if (isset($this->request->get['sort'])) {
$sort = $this->request->get['sort'];
} else {
$sort = 'e.event_id';
}
if (isset($this->request->get['order'])) {
$order = $this->request->get['order'];
} else {
$order = 'ASC';
}
$url = '';
if (isset($this->request->get['sort'])) {
$url .= '&sort=' . $this->request->get['sort'];
}
if (isset($this->request->get['order'])) {
$url .= '&order=' . $this->request->get['order'];
}
//getting all event records
$filter_data = array();
$results = $this->model_ping_ping->getEvents($filter_data);
$url = '';
foreach ($results as $result) {
//display event details
$data['events'][] = array(
'event_id' => $result['event_id'],
'code' => $result['code'],
'status' => $result['status']
);
}
// echo "<pre>";
// print_r($data['events']);
// echo "</pre>";
$data['breadcrumbs'] = array();
$data['breadcrumbs'][] = array(
'text' => $this->language->get('text_home'),
'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true)
);
$data['breadcrumbs'][] = array(
'text' => $this->language->get('heading_title'),
'href' => $this->url->link('ping/ping', 'user_token=' . $this->session->data['user_token'] . $url, true)
);
if ($order == 'ASC') {
$url .= '&order=DESC';
} else {
$url .= '&order=ASC';
}
$data['sort_id'] = $this->url->link('ping/ping', 'user_token=' . $this->session->data['user_token'] . '&sort=e.event_id' . $url, true);
$data['sort_code'] = $this->url->link('ping/ping', 'user_token=' . $this->session->data['user_token'] . '&sort=e.code' . $url, true);
$url = '';
if (isset($this->request->get['sort'])) {
$url .= '&sort=' . $this->request->get['sort'];
}
if (isset($this->request->get['order'])) {
$url .= '&order=' . $this->request->get['order'];
}
$data['header'] = $this->load->controller('common/header');
$data['column_left'] = $this->load->controller('common/column_left');
$data['footer'] = $this->load->controller('common/footer');
$data['sort'] = $sort;
$data['order'] = $order;
$this->response->setOutput($this->load->view('common/pingTest',$data));
}
}
model:
<?php
class ModelPingPing extends Model {
public function getEvents($data = array()) {
$sql = "SELECT * FROM " . DB_PREFIX . "event e";
$query = $this->db->query($sql);
return $query->rows;
// if (!empty($data['filter_name'])) {
// $sql .= " AND e.event_id LIKE '" . $this->db->escape($data['filter_name']) . "%'";
// }
$sort_data = array(
'e.event_id',
'e.code'
);
if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
$sql .= " ORDER BY " . $data['sort'];
} else {
$sql .= " ORDER BY e.event_id";
}
if (isset($data['order']) && ($data['order'] == 'DESC')) {
$sql .= " DESC";
} else {
$sql .= " ASC";
}
}
}
?>
Twig File:
{{ header }}{{ column_left }}
<div id="content">
<div class="page-header">
<div class="container-fluid">
<h1>{{ heading_title }}</h1>
<ul class="breadcrumb">
{% for breadcrumb in breadcrumbs %}
<li><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
{% endfor %}
</ul>
</div>
</div>
<div class="container-fluid">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-list"></i> {{ text_title }}</h3>
</div>
<div class="panel-body">
<form action="{{ delete }}" method="post" enctype="multipart/form-data" id="form-download">
<div class="table-responsive">
<table class="table table-bordered table-hover">
<thead>
<tr>
<td class="text-left">{% if sort == 'e.event_id' %}
<a href="{{ sort_id }}" class="{{ order|lower }}">Event ID</a>
{% else %}
<a href="{{ sort_id }}">Event ID</a>
{% endif %}</td>
<td class="text-right">{% if sort == 'e.code' %}
<a href="{{ sort_code }}" class="{{ order|lower }}">Event Code</a>
{% else %}
<a href="{{ sort_code }}">Event Code</a>
{% endif %}</td>
<td class="text-right">Event Status</td>
</tr>
</thead>
<tbody>
{% for event in events %}
{% if event.status == 0 or event.status == 1 %}
<tr>
<td class="text-left">{{ event.event_id }}</td>
<td class="text-right">{{ event.code }}</td>
<td class="text-right">
{% if event.status == 0 %}
<div class="aa-tag for-sale">Coomming Soon</div>
{% endif %}
{% if event.status == 1 %}
<div class="aa-tag sold-out">Ongoing</div>
{% endif %}
</td>
</tr>
</tbody>
{% endif %}
{% endfor %}
</table>
</div>
</form>
<div class="row">
<div class="col-sm-6 text-left">{{ pagination }}</div>
<div class="col-sm-6 text-right">{{ results }}</div>
</div>
</div>
</div>
</div>
</div>
Upvotes: 3
Views: 157
Reputation: 136
I've found out the answer for this, which i need to add this few lines of code in the controller:
$filter_data = array(
'sort' => $sort,
'order' => $order
);
Upvotes: 3