Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Всем привет!
Подскажите пожалуйста, у меня есть список отелей в БД и еще есть метод который принимает ID и возвращает мне цены. Я вызываю свой метод внутри цикла Foreach но выгрузка цен получается очень долгой, соответственно сама страничка долго грузится.
Хотел бы узнать у знатоков, как можно сначала загрузить страницу, а уже потом загрузить все цены через AJAX? Или каким то другим способом? Пока цены грузятся хотелось бы видеть какую то гифку)) загрузка))). Если это все возможно конечно.
Вот мой код:
@foreach($Hotels as $hotel)
<img src="{{ asset($hotel->img) }}" width="800" height="533" class="img-responsive" alt="{{ $hotel->HotelName }}">
<div id="score"><span>{{ $hotel->score }}</span>{{ $hotel->rating }}</div>
From/For Night
<span class="price">
<sup>$</sup>
<?php
$price = 'NA';
$price1 = XML::GetMinimumDBLPriceForTodayBB(APP-KEY, APP-NAME, $hotel->HotelID, 1);
$price2 = XML::GetMinimumDBLPriceForTodayBB(APP-KEY, APP-NAME, $hotel->HotelID, 2);
if(is_array($price1)){
$price = round($price1[0]->DailyPrice);
}elseif(is_array($price2)){
$price = round($price2[0]->DailyPrice);
}
?>
{{ $price }}
</span>
<div class="hotel_title">
<h3>{!! preg_replace("/ /", " </strong>", '<strong>'.$hotel->HotelName, 1 ) !!}</h3>
<div class="rating">{{ $hotel->HotelClass }}</div>
@endforeach
Вот этот момент когда приходят цены в переменную $price грузит очень страницу.
Не в сети
Не следует логику пихать во вьюху. Все данные должна предоставлять модель.
$(document).ready(function() {
$.ajax({
url: '/getdata', // путь до контролера, который выдает данные о цене
type: 'POST',
success: function(data){
$('.gifka_s_animaciey').remove(); //убираем гифку с анимацией загрузки
$('.price').html(data); //Вставляем значение цены.
}
});
Изменено Afatar (16.12.2015 05:52:26)
Не в сети
Не следует логику пихать во вьюху. Все данные должна предоставлять модель.
+1
Не в сети
Я бы лучше в кэш просто цены запихал, они же не при каждой загрузке страницы меняются, более того они даже не каждую минуту меняются.
(не для MySQL)
цены можно кешировать и в БД например на базе хранимых процедур sql (проще говоря на триггерах и на функциях), когда какие-либо переменные в цепочке формирования цены меняются...
и читать оттуда.
однако это грязное чтение, означающее, что пока вы читали-формировали-выводили, - данные могли измениться.
чистое чтение и формирование данных налету штука отличная но трудоёмкая.
для начала надо проектировать бд в нормализованном виде, не оптимизированном (читай гугл!)
из нормализованных таблиц создавать view'шки, уже в виде оптимизированных таблиц, откуда и читать...
пишешь в таблицу А, читаешь из вьюшки Z состоящей из таблиц A+B+C.
тем самым кода рнр меньше, масштабируемости больше.
и опять же проект не ясен.
это паблик? если паблик, то забудь про чистое чтение. потому что кирпич на F5 на той странице, где формируются данные ... ну ты понял, братан
Не в сети
Страницы 1