Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 27.02.2017 03:51:48

Присвоение значения из JavaScript в @foreach

Доброго времени суток. Помогите пожалуйста разобраться с данной проблемой.

Значит есть :примерный код без деталей:

$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 !?

Буду благодарен любым наводкам. Спасибо!

Не в сети

#2 27.02.2017 07:45:09

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Re: Присвоение значения из JavaScript в @foreach

1. Find($id); вернет 1 (одну) статью, и не как нельзя ее по циклу пустить.
2. В ларе есть carbon, тоесть можно сделать так {{ $article->created_at->diffForHumans();  }}

Не в сети

#3 27.02.2017 10:51:44

Re: Присвоение значения из JavaScript в @foreach

Да я ошибся. Надо было App/Article::all();

А вариант с diffForHumans мне не подойдёт по тому что у меня есть и другие переменные которые просчитывается в javascript и выводятся пользователю. Принцип такой что дается 24 часа таймера , начальная и конечная цена. Пока часы тикают цена растет до финальной. То что я изобразил выше это мягко сказать , далеко от того где я буду это использовать.
По сути вопрос в том как любую нужную переменную вывести в @foreach.

Изменено MeKree (27.02.2017 10:56:52)

Не в сети

#4 27.02.2017 20:04:54

Re: Присвоение значения из JavaScript в @foreach

Так же как для created. Только присваиваешь не одно значение, а json-представление массива значений. Потом в js получаешь обратно массив

Не в сети

#5 28.02.2017 01:21:54

skiphog
Откуда: Киров, Россия
Сообщений: 26

Re: Присвоение значения из JavaScript в @foreach

$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 с вашей реализацией для каждого элемента.

Не в сети

Подвал раздела