Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Доброго времени суток. Помогите пожалуйста разобраться с данной проблемой.
Значит есть :примерный код без деталей:
$articles = App\Article::find($id);
@foreach($articles as $article)
<ul>
<li>{{$article->title}}</li>
<li>{{...}}</li>
<li id="time"></li>
</ul>
@endforeach
И есть код на JS который считает сколько времени прошло с момента публикации :примерный, неполный код:
<script>
var created = "{{ date('M d Y H:i:s', strtotime($article->created_at)) }}";
var time = setInterval(function()
{
var passed = new Date().getTime() - new Date(created).getTime();
document.getElementById("time").innerHTML = passed;
}, 1000);
</script>
Вопрос в том как передать переменную passed для каждого экземпляра $article !?
Буду благодарен любым наводкам. Спасибо!
Не в сети
1. Find($id); вернет 1 (одну) статью, и не как нельзя ее по циклу пустить.
2. В ларе есть carbon, тоесть можно сделать так {{ $article->created_at->diffForHumans(); }}
Не в сети
Да я ошибся. Надо было App/Article::all();
А вариант с diffForHumans мне не подойдёт по тому что у меня есть и другие переменные которые просчитывается в javascript и выводятся пользователю. Принцип такой что дается 24 часа таймера , начальная и конечная цена. Пока часы тикают цена растет до финальной. То что я изобразил выше это мягко сказать , далеко от того где я буду это использовать.
По сути вопрос в том как любую нужную переменную вывести в @foreach.
Изменено MeKree (27.02.2017 10:56:52)
Не в сети
Так же как для created. Только присваиваешь не одно значение, а json-представление массива значений. Потом в js получаешь обратно массив
Не в сети
$articles = App\Article::find($id);
@foreach($articles as $article)
<ul>
<li>{{$article->title}}</li>
<li>{{...}}</li>
<li id="time"></li>
</ul>
@endforeach
1. Про foreach одной статьи вам уже написали.
2. В цикле id="time" ? - хммм ... видимо действительно :примерный код без деталей:
Теперь по делу.
Присваивать из ПХП в javascript или перегонять что-то в json не нужно.
Как вариант, вы можете тегам li присвоить атрибут data, в который можете записать время.
Судя по вашему скрипту, вам нужен timestamp. Вот его и присвойте.
@foreach($articles as $article)
<ul>
<li>{{$article->title}}</li>
<li>{{...}}</li>
<li data-time="{{ $article->created_at->timestamp }}">{{ $article->created_at->format('Нужный вам формат') //или оставьте пустым }}</li>
</ul>
@endforeach
Далее javascript
var li_time = document.querySelectorAll('[data-time]'),timers =[];
for (var key in li_time) {
if (li_time.hasOwnProperty(key)) {
setTimer(li_time, key);
}
}
function setTimer(lis, i) {
var li = lis[i];
timers[i] = setInterval(function() {
li.innerHTML = parseInt(new Date().getTime() / 1000) - parseInt(li.dataset.time); // Или любая ваша реализация
}, 1000);
}
Вот и всё. Скрипт пробежится по вашим li и запустит setInterval с вашей реализацией для каждого элемента.
Не в сети
Страницы 1