Доброе время суток.
Есть вопрос: как с контролера создать переменную не, привязную к шаблону. То есть, у нас есть, скажем, 3 таблицы из базы:
public function index(Request $request)
{
$country = new Country();
$city = new City;
$items = Clients::orderby('id', 'ASC')->paginate(50);
return response()->json($items);
}
Одна из них выводиться через json. Как вывести все остальные в шаблон ?
Для большего понимания выложил часть кода вывода:
Контроллер:
public function manageItemAjax()
{
return view('manage-item-ajax');
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
$items = Clients::orderby('id', 'ASC')->paginate(50);
return response()->json($items);
}
index.blade.php:
<table data-role="table" id="movie-table-custom" data-mode="reflow" class="movie-list table-stroke table table-bordered table-hover tblSearch" cellspacing="0">
<thead>
<tr>
<th>ID</th>
<th>First Name</th>
<th>Last Name</th>
<th>Email</th>
<th>Address</th>
<th>City</th>
<th>Country</th>
<th>Edit/Delete</th>
</tr>
</thead>
<tbody>
{{--Body of all clients--}}
</tbody>
</table>
и наш js:
var page = 1;
var current_page = 1;
var total_page = 0;
var is_ajax_fire = 0;
manageData();
/* Manage data list */
function manageData() {
jQuery.ajax({
dataType: 'json',
url: url,
data: {page: page}
}).done(function (data) {
total_page = data.last_page;
current_page = data.current_page;
jQuery('#pagination').twbsPagination({
totalPages: total_page,
visiblePages: current_page,
onPageClick: function (event, pageL) {
page = pageL;
if (is_ajax_fire != 0) {
getPageData();
}
}
});
manageRow(data.data);
is_ajax_fire = 1;
});
}
jQuery.ajaxSetup({
headers: {
'X-CSRF-TOKEN': jQuery('meta[name="csrf-token"]').attr('content')
}
});
/* Get Page Data*/
function getPageData() {
jQuery.ajax({
dataType: 'json',
url: url,
data: {page: page}
}).done(function (data) {
manageRow(data.data);
});
}
/* Add new Item table row */
function manageRow(data) {
var rows = '';
jQuery.each(data, function (key, value) {
rows += '<tr class="clients' + value.id + '">' +
'<td><b>ID: </b><span>' + value.id + '</span></td>' +
'<td class="firstnameAdd"><b>First Name: </b><span>' + value.firstname + '</span></td>' +
'<td class="lastnameAdd"><b>Last Name: </b><span>' + value.lastname + '</span></td>' +
'<td class="emailAdd"><b>Email: </b><span>' + value.email + '</span></td>' +
'<td class="addressAdd"><b>Address: </b><span>' + value.address + '</span></td>' +
'<td class="cityAdd"><b>City: </b><span>' + value.city + '</span></td>' +
'<td class="countryAdd"><b>Country: </b><span>' + value.country + '</span></td>' +
'<td data-id="' + value.id + '">' +
'<button data-toggle="modal" data-target="#edit-item" class="btn btn-primary edit-item" title="edit"><i class="fa fa-pencil" aria-hidden="true"></i></button>' +
'<button data-toggle="modal" data-target="#delete-item" class="btn btn-danger delete-item" title="delete"><i class="fa fa-trash" aria-hidden="true"></i></button>' +
'</td>' +
'</tr>';
});
jQuery("tbody").html(rows);
}
Просто передай значения вторым аргументом
public function index(Request $request)
{
$country = new Country();
$city = new City;
$items = response()->json(Clients::orderby('id', 'ASC')->paginate(50));
return view('путь.к.шаблону', [
'country' => $country,
'city' => $city,
'items' => $items
]);
}
http://laravel.su/docs/5.3/blade
Создавай готовый html на сервере и отдавай на клиент:
Контроллер:
public function index(Request $request)
{
$country = new Country();
$city = new City;
$items = response()->json(Clients::orderby('id', 'ASC')->paginate(50));
return response([
'country' => $country,
'city' => $city,
'html' => view('parts._part', compact('items'))->render(),
]);
}
Клиент получит 3 переменные: country, city и html - здесь уже готовый html который нужно впихнуть в таблицу.
Создай views/parts/_part.blade.php:
@foreach($items as $item)
<tr>
<tr>{{ $item->id }}</tr>
...
</tr>
@endforeach
В js файле, в фунции manageRow() вместо этого кошмара просто:
/* Add new Item table row */
function manageRow(data) {
jQuery("tbody").html(data);
}
Здесь:
/* Get Page Data*/
function getPageData() {
jQuery.ajax({
dataType: 'json',
url: url,
data: {page: page}
}).done(function (data) {
// Здесь data.country, data.city, data.html
manageRow(data.html);
});
}
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Кодом не вставляет, не могу понятьКак убрать это форматирование html на текст
Есть массив строк, необходимо: