if if循环放入

时间:2018-06-04 03:28:33

标签: php laravel laravel-5

2个问题:

1)我的视图文件中的Recent Posts功能(针对单个帖子页面)不再显示帖子 2)在显示所有帖子的文章页面上,没有slug的帖子不起作用。当我点击帖子时,它会重定向到/ articles。只有带有slug的帖子才有效。

我的帖子有两种网址:slug和url。区别?网址较长。 Slug较短,用于搜索引擎优化目的。为什么不使用slug?因为对于某些帖子,我不想浪费时间创造一个slu ..这些帖子的slug列中的数据为空/空。生成的网址很好。对于其他帖子,我想制作一个slu ..

这是我的帖子控制器代码。

旧版本:

public function viewpost($url,$slug){
if ( empty($slug) ) {
$url ='articles/'.$url;
}  else {
$url = 'articles/'.$slug;

}

$posts = posts::where('post_status', '')->get();
if ( empty($slug) ) {
$post = $posts->where('url', $url)->first();
}  else {
$post = $posts->where('slug', $slug)->first();
}

if ( empty($post) )
return redirect()->back();


return view('viewpost')->with('post', $post)->with('posts', $posts);
}

新版本(已修改):

public function viewpost($url){


  $posts = posts::where('post_status', '');
  $post = $posts->where('url', $url)->orWhere('slug' , $url)->first();


  if ( empty($post) )
return redirect()->back();


return view('viewpost')->with('post', $post)->with('posts', $posts);
}

新修改的控制器文件在没有slug的情况下打破了帖子。

以下是最近发布的帖子的视图文件:

<h3>Recent Posts</h3>
 @foreach($posts as $post)
 <p><a href="{{ URL::to($post->url) }}"><img style="width:100px;" src="{{asset('thumbnails/'.$post->thumbnail)}}" class="responsive"></a><br>
     <a href="{{ URL::to($post->url) }}">{{substr(($post->title),0,88)}}.. 
 </a></p>               
  @endforeach

我的路线代码:

Route::get('articles/{url}', 'postsController@viewpost');

我的帖子页面的视图文件代码显示了所有帖子:

                    @foreach($post as $post)

                    <div class="col-md-4">

                        <div class="content">
                        @if(!empty($post->slug))
                            dd(11);
                        <a href="{{'articles/'.$post->slug}}" class="latest-heading">{{substr(($post->title),0,88)}}..</a>

                        @else
                        dd(22);
                        <a href="{{($post->url)}}" class="latest-heading">{{substr(($post->title),0,88)}}..</a>
                        @endif
                            <img style="padding: 5px; width:100%; height:218px;" src="{{asset('thumbnails/'.$post->thumbnail)}}" class="img-responsive">

                        </div>

                    </div>

                   @endforeach

2 个答案:

答案 0 :(得分:2)

  

1)我的视图文件中的Recent Posts功能(针对单个帖子页面)不再显示帖子。

那是因为与您的旧代码不同,您不会检索数据:

$posts = posts::where('post_status', '');

这只会返回您的查询Builder对象,因此要获取这些帖子,您需要添加 - &gt; get();获取集合,代码变为:

$posts = posts::where('post_status', '')->get();

之后你可以通过filtring收集过滤你所寻找的一个帖子( - &gt; first()),因为它不支持orWhere方法(或者只使用两个where()作为你在旧代码中做了):

$post = $posts->filter(function($object, $key) use ($url) {
     return !strcmp($object->url, 'articles/'.$url) or !strcmp($object->slug, $url);
})->first();

同样正确:

@foreach($post as $post)
  

2)在显示所有帖子的文章页面上,没有slug的帖子不起作用。当我点击帖子时,它会重定向到/ articles。只有带有slug的帖子才有效。

我不确定,但我在您的代码中看到了什么,并且基于您在上面显示的旧方法,我认为您在这里遇到了问题:

<a href="{{'articles/'.$post->slug}}" ...
<a href="{{($post->url)}}" ...

第二个人也不需要(?):

<a href="{{'articles/'.$post->url}}" ...

答案 1 :(得分:0)

这可能是导致因素:

return view('viewpost')->with('post', $post)->with('posts', $posts);

你的循环在做:

@foreach($posts as $post)

而你的另一个循环正在做:

@foreach($post as $post)

如果你看with post,那么postswith都会传递,因此可能会将循环变量与with变量混合。

尝试将_中变量的键更改为更加明显的键。您可以在单个$post变量之前添加/blog