Laravel по-русски

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

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

#1 27.10.2017 08:42:00

Пагинация + аякс

роут "/news" или аяксовый вариант "/news?type={type} вызывает следующий экшн:

   public function getNewsPage(Request $request)
    {
        if(isset($request->type)){
            switch($request->type){
                case 'news': $type = 'Новости'; 
                    break;
                case 'blog': $type = 'Блог'; 
                    break;
                case 'case': $type = 'Кейсы'; 
                    break;
            }
            $newsf = News::where('type', $type)->paginate(5);
            $header = News::where('type', $type)->take(1)->get();
            foreach($header as $header)
                $head = $header->id;
            return view('tags', ['newsf' => $newsf, 'header' => $head]);
        }else{

        $newsf = News::paginate(5);
        $header = News::take(1)->get();
        foreach($header as $header)
            $head = $header->id;
        return view('news', ['newsf' => $newsf, 'header' => $head]);
        }
    }

данные получаются в обоих случаях, после чего передаются во вьюху 'news' (или 'tags' - тоже самое, только без "лишнего"), внизу которых есть $news->links() , для выводя кнопок пагинации ("далее", "назад" и номера страниц).
теперь вопрос.
когда я попадаю на страницу /news через меню на сайте, то всё как надо.
но если я клацаю НА странице /news на выбор тэга для вывода, то выполняется ajax-запрос /news?type , который заменяет контент роута /news на контент роута /news?type= . окей, всё тоже работает отлично. а вот кнопки пагинации всё так же водят по ВСЕМ новостям, без учета поля type.

Не в сети

#2 27.10.2017 08:47:56

Re: Пагинация + аякс

вот сюда вьюха news.blade.php:

@include('layouts.header')

<div class="scr-bot-ov"></div>
<div class="container animate-content news_open">
    <div class="row news wow fadeIn" data-wow-duration="2.0s">
        <div class="col-sm-12">
            <div class="zag">Новости / Блоги / Кейсы</div>
            <div class="title">Полезные статьи по юриспруденции - <br />Блог юристов компании</div>
            <div class="category">
               <ul>
                  <li id='news' class="active">Все новости</li>
                  <li id='blog' >Блоги</li>
                  <li id='case' >Кейсы</li>
               </ul>
            </div>
        </div>
    </div>

    
    
    <div id='anque'>    
@foreach ($newsf as $news)
@if ($news->id == $header)
<a href="/news-{{$news->id}}" class="col-sm-12 an-block-link">
    <div class="row news_main_pre_text">
      <div class="col-sm-10 centered wow fadeIn" data-wow-duration="2.0s">
        <span class="date">
            @if ($news->type == 'Блог')
                 Блог юристов компании - {{ date('d.m.Y', strtotime($news->created_at)) }}
                 @elseif($news->type == 'Кейсы')
                 Кейсы юристов компании - {{ date('d.m.Y', strtotime($news->created_at)) }}
                 @else Новости юристов компании - {{ date('d.m.Y', strtotime($news->created_at)) }}
             @endif
        </span>
        <span class="article_title">{{$news->title}}</span>
      </div>
    </div>


    <div class="row news_main_image">
      <div class="col-sm-10 centered wow fadeIn" data-wow-duration="2.0s">
           <div class="wow img-slide animate-start">
             <div class="bg"></div>
             <img src="{{asset('/attachmentFiles/'.$news->header)}}">
           </div>
      </div>
    </div>

    <div class="row news_main_txt">
      <div class="col-sm-10 centered wow fadeIn" data-wow-duration="2.0s">
           <p>{{$news->smallcontent}}</p>
           <span class="button" >Читать дальше</span>
      </div>
    </div>
</a>
@elseif ($news->id%2 !=0)
    <a href="/news-{{$news->id}}" class="col-sm-12 blog vertical-align an-block-link">

      <div class="col-sm-5 img wow fadeIn" data-wow-duration="2.0s">
           <div class="wow img-slide animate-start">
             <div class="bg"></div>
             <img src="{{asset('/attachmentFiles/'.$news->img)}}">
           </div>
      </div>

      <div class="col-sm-5 col-sm-offset-2 text wow fadeIn" data-wow-duration="2.0s">
        <div class="an-line-zag">
             <div class="animate-line"></div>
             <div class="zag">@if ($news->type == 'Блог')
                 Блог юристов компании - {{ date('d.m.Y', strtotime($news->created_at)) }}
                 @elseif($news->type == 'Кейсы')
                 Кейсы юристов компании - {{ date('d.m.Y', strtotime($news->created_at)) }}
                 @else Новости юристов компании - {{ date('d.m.Y', strtotime($news->created_at)) }}
                 @endif
             </div>
        </div>
        <div class="title">{{$news->title}}</div>
      </div>

    </a>
@else
    <a href="/news-{{$news->id}}" class="col-sm-12 blog vertical-align an-block-link">

      <div class="col-sm-5 col-md-5 col-sm-push-7  img wow fadeIn" data-wow-duration="2.0s">
           <div class="wow img-slide animate-start">
             <div class="bg"></div>
             <img src="{{asset('/attachmentFiles/'.$news->img)}}">
           </div>
      </div>

      <div class="col-sm-5 col-md-5 col-sm-pull-5 col-sm-offset-0 text wow fadeIn" data-wow-duration="2.0s">
        <div class="an-line-zag">
             <div class="animate-line"></div>
             <div class="zag">@if ($news->type == 'Блог')
                 Блог юристов компании - {{ date('d.m.Y', strtotime($news->created_at)) }}
                 @elseif($news->type == 'Кейсы')
                 Кейсы юристов компании - {{ date('d.m.Y', strtotime($news->created_at)) }}
                 @else Новости юристов компании - {{ date('d.m.Y', strtotime($news->created_at)) }}
                 @endif</div>
        </div>
        <div class="title">{{$news->title}}</div>
      </div>



    </a>
    
@endif
@endforeach
    <div class="col-sm-12 pag">
      <ul>
{{$newsf->links()}}
      </ul>
    </div>


</div>
</div>



<div class="row foot">
      <a href="/life" class="col-sm-12 menu">
         <div class="vcentre">
           <div class="more">далее</div>
           <div class="title">Жизнь</div>
           <div class="arrow_down"></div>
         </div>
      </a>
</div>

@include('layouts.footer')
    <script src="js/jquery.min.js"></script>
    <script src="js/bootstrap.min.js"></script>
    <script src="js/scripts.js"></script>
    <script src="js/wow.js"></script>



</body></html>

вот js:

 $('.category ul li').on('click', function(e){
    var type = e.target.id;
    $.ajax({
        data: type,
        method: 'GET',
        url: '/news?type=' + type,
        success: function(txt){
            console.log(txt);
            alert('success!');
            $('#anque').html(txt);
        }
    });
 });

то есть при выполнении аякса, мы получаем нужную инфу с базы, пихаем её во вьюху tags (ниже) и рез-ат возвращаем скрипту, который заменяет содержимое блока div#anque (в котором весь контент + ссылки пагинации, как можно будет увидеть ниже) на рез-ат.
tags.blade.php:

@foreach ($newsf as $news)
@if ($news->id == $header)
<a href="/news-{{$news->id}}" class="col-sm-12 an-block-link">
    <div class="row news_main_pre_text">
      <div class="col-sm-10 centered wow fadeIn" data-wow-duration="2.0s">
        <span class="date">
            @if ($news->type == 'Блог')
                 Блог юристов компании - {{ date('d.m.Y', strtotime($news->created_at)) }}
                 @elseif($news->type == 'Кейсы')
                 Кейсы юристов компании - {{ date('d.m.Y', strtotime($news->created_at)) }}
                 @else Новости юристов компании - {{ date('d.m.Y', strtotime($news->created_at)) }}
             @endif
        </span>
        <span class="article_title">{{$news->title}}</span>
      </div>
    </div>


    <div class="row news_main_image">
      <div class="col-sm-10 centered wow fadeIn" data-wow-duration="2.0s">
           <div class="wow img-slide animate-start">
             <div class="bg"></div>
             <img src="{{asset('/attachmentFiles/'.$news->header)}}">
           </div>
      </div>
    </div>

    <div class="row news_main_txt">
      <div class="col-sm-10 centered wow fadeIn" data-wow-duration="2.0s">
           <p>{{$news->smallcontent}}</p>
           <span class="button" >Читать дальше</span>
      </div>
    </div>
</a>
@elseif ($news->id%2 !=0)
    <a href="/news-{{$news->id}}" class="col-sm-12 blog vertical-align an-block-link">

      <div class="col-sm-5 img wow fadeIn" data-wow-duration="2.0s">
           <div class="wow img-slide animate-start">
             <div class="bg"></div>
             <img src="{{asset('/attachmentFiles/'.$news->img)}}">
           </div>
      </div>

      <div class="col-sm-5 col-sm-offset-2 text wow fadeIn" data-wow-duration="2.0s">
        <div class="an-line-zag">
             <div class="animate-line"></div>
             <div class="zag">@if ($news->type == 'Блог')
                 Блог юристов компании - {{ date('d.m.Y', strtotime($news->created_at)) }}
                 @elseif($news->type == 'Кейсы')
                 Кейсы юристов компании - {{ date('d.m.Y', strtotime($news->created_at)) }}
                 @else Новости юристов компании - {{ date('d.m.Y', strtotime($news->created_at)) }}
                 @endif
             </div>
        </div>
        <div class="title">{{$news->title}}</div>
      </div>

    </a>
@else
    <a href="/news-{{$news->id}}" class="col-sm-12 blog vertical-align an-block-link">

      <div class="col-sm-5 col-md-5 col-sm-push-7  img wow fadeIn" data-wow-duration="2.0s">
           <div class="wow img-slide animate-start">
             <div class="bg"></div>
             <img src="{{asset('/attachmentFiles/'.$news->img)}}">
           </div>
      </div>

      <div class="col-sm-5 col-md-5 col-sm-pull-5 col-sm-offset-0 text wow fadeIn" data-wow-duration="2.0s">
        <div class="an-line-zag">
             <div class="animate-line"></div>
             <div class="zag">@if ($news->type == 'Блог')
                 Блог юристов компании - {{ date('d.m.Y', strtotime($news->created_at)) }}
                 @elseif($news->type == 'Кейсы')
                 Кейсы юристов компании - {{ date('d.m.Y', strtotime($news->created_at)) }}
                 @else Новости юристов компании - {{ date('d.m.Y', strtotime($news->created_at)) }}
                 @endif</div>
        </div>
        <div class="title">{{$news->title}}</div>
      </div>



    </a>
@endif
@endforeach
    <div class="col-sm-12 pag">
      <ul>
{{$newsf->links()}}
      </ul>
    </div>

Изменено Anque (27.10.2017 08:49:38)

Не в сети

#3 27.10.2017 11:52:47

Re: Пагинация + аякс

Всё нормально, крыша потекла :]

Не в сети

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