Сообщения не отображаются должным образом после того, как цикл if else вставлен в - PullRequest
0 голосов
/ 04 июня 2018

2 проблемы:

1) функция «Последние сообщения» в моем файле просмотра (для страницы одного сообщения) больше не отображает сообщения.
2) На странице статей, которая показывает все сообщения,посты без слагов не работают.когда я нажимаю на сообщение, оно перенаправляет на / статьи.Только сообщения с работой слагов.

У меня есть 2 вида URL для моих сообщений: слаг и URL.Различия?URL длиннее.Slug короче и используется для целей SEO.Почему бы не использовать только слизень?Потому что для некоторых постов я не хочу тратить время на создание пули.Данные в столбце слагов для этих постов пустые / пустые.Сгенерированный URL-адрес в порядке.Для других сообщений я хочу сделать слаг.

Вот мой код контроллера для сообщений.

Старая версия:

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);
}

Новый измененный файл контроллера сломал сообщения без слагов.

Вот файл представления для последних сообщений, которые сломались:

<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 голосов
/ 04 июня 2018

1) функция «Последние сообщения» в моем файле просмотра (для страницы с одним сообщением) больше не отображает сообщения.

Это потому, что в отличие от вашего старого кода, вы не получаетеdata:

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

Это вернет только ваш объект Builder запроса, поэтому для получения этих сообщений вам нужно добавить -> get ();чтобы получить коллекцию, код становится следующим:

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

После этого вы можете отфильтровать сообщение, которое вы ищете через (-> first ()), отфильтровав коллекцию, так как она не поддерживаетметод orWhere (или просто используйте два, где (), как вы делали в старом коде):

$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) По статьямстраница, на которой показаны все сообщения, сообщения без слагов не работают.когда я нажимаю на сообщение, оно перенаправляет на / статьи.Только сообщения с работой слизня.

Я не уверен, но то, что я увидел в вашем коде, и, основываясь на старом методе, который вы показали выше, я думаю, у вас есть проблема здесь:

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

второй тоже не должен быть (?):

<a href="{{'articles/'.$post->url}}" ...
0 голосов
/ 04 июня 2018

Это, вероятно, причина:

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

, и ваш цикл выполняет:

@foreach($posts as $post)

, а ваш другой цикл выполняет:

@foreach($post as $post)

Если вы посмотрите на with, то передадите и post, и posts, в результате он, вероятно, смешивает зацикленную переменную с переменной with.

Попробуйте изменить ключипеременные в with к чему-то более четкому.Вы можете добавить _ перед одиночной переменной $post.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...