Witam. Piszę bloga w laravelu i mam problem, gdyż nie pojawiają się linki na stronach, lecz napis cos. Co mogę zmienić, aby pojawiał się w tym miejscu link? Całośc posta wygląda tak:
Treść bloga cos Treść bloga
Rekord zostaje dodany do bazy jako link, ale po pobraniu z bazy, pojawia się jako zwykły tekst(zamiast linku jest <a,href="url">link text</a>), a gdy zastosuję strip_tags, to pojawia się sam anchor. czyli link text(nie jako odnośnik).
Tak to wygląda, w załącznku jest zdjęcie.
Dziwne.
<h2>{{$items->opis}}</h2> - NIE DZIAŁA (pokazuje cały tekst, oraz anchor jako tekst html)
<h2><? echo $items->opis;?></h2> - DZIAŁA POPRAWNIE(pokazuje cały tekst oraz brand poprawnie jako link)
Dlaczego tak sie dzieje?
Domyślam się, że twój silnik szablonów automatycznie 'escapuje' html. Innymi słowy konstrukcja {{ }} wyświetla te znaczniki jako tekst, nie jako html.
Znalazłem coś takiego:
Change your syntax from {{ }} to {!! !!}.
As The Alpha said in a comment above (not an answer so I thought I'd post), in Laravel 5, the {{ }} (previously non-escaped output syntax) has changed to {!! !!}. Replace {{ }} with {!! !!} and it should work.
Spróbuj to zrobić powinno działać ale jest to pewna luka w bezpieczeństwie jeżeli użytkownik może sam wstawiać ten html do bazy.
Szkoda, ze od razu nie napisałeś, że korzystasz z Blade :P Tak jak napisał @gaUa69 w Blade, kiedy chcesz wyrzucić czysty HTML musisz dać {!! !!} zamiast normalnych {{ }}. Źródło.
By default, Blade {{ }} statements are automatically sent through PHP's htmlentities function to prevent XSS attacks. If you do not want your data to be escaped, you may use the following syntax:
Hello, {!! $name !!}.
To jedno, a drugie to to, że po co trzymasz w bazie danych cały anchor? Rozumiem, że są to odwołania do zewnętrznych serwisów, ponieważ jeżeli jest to opis produktu z Twojej strony to w ogóle nie ma sensu statycznych adresów trzymać w bazie tylko dynamicznie wszystko wyświetlać za pomocą routsów i id/slugów/bindów.
Jeżeli jednak są to opisy z zewnątrz to powinieneś to rozbić na osobne pola z tekstem do wyświetlania, oraz linkiem, a wyrzucać to np. w następujący sposób:
<a href="{{ $item->link }}">{{ $item->description }}</a>
Dodatkowo staraj się używać liczby mnogiej przy całych kolekcjach, a nie pojedynczych elementach.
Dziękuje za odpowiedzi. Doggye, możesz rozwinąć ostatnie zdanie "Dodatkowo staraj się używać liczby mnogiej przy całych kolekcjach, a nie pojedynczych elementach."
Linki odchodzą do stron zewnętrznych, tworzenie osobnych tabel, w których przechowywał bym linki, byłoby wygodne i można to wykonać, lecz chciałbym także umieszczać linki w tekście, tak aby anchor był spójną częścią całego opisu.
Jeżeli chcesz umieszczać całe linki w tekście to najzwyczajniej zrób to w analogiczny sposób do tego co podałem :
<a href="{{ $item->link }}">{{ $item->link}}</a>
Co do rozwinięcia tego co napisałem, to miałem na myśli sytuację kiedy próbujesz wyświetlić coś ze zmiennej $items
, co jest liczbą mnoga od $item
. Większość ludzi używa jako nazwy liczby mnogiej dla całych kolekcji, natomiast liczby pojedynczej do pojedynczego elementu (chodzi gramatykę języka angielskiego) i np. wtedy logiczny jest zapis:
@foreach($items as $item)
<a href="{{ $item->link }}">{{ $item->link}}</a>
@endforeach
Ty w swoim przykładzie napisałeś $items->opis
co sugeruje próbę wyciągnięcia pojedynczego atrybutu odowłując się do kolekcji, a wtedy wywali nam błąd bo program nie będzie wiedział, którego spośród elementów chcemy uzyskac opis. Przy pojedynczych przykładach to nic wielkiego i łatwo się domyślić o co chodzi, natomiast później kiedy będziesz miał naście widoków i modeli to tego typu szczegóły pozwolą Tobie oraz innym szybciej odnajdywać się w kodzie więc warto zacząć wyrabiać pewne nawyki już na starcie.
Tutaj możesz więcej poczytać o kolekcjach w Laravel.
Ewentualnie możesz dopisać metodę do modelu Item
:
public function getLink()
{
return '<a href="' . $this->link . '">' . $this->link . '</a>';
}
a później w tekście robisz:
<b>Lorem ipsum dolor sit amet, consectetur adipisicing elit {{ $item->getLink() }} ipsum dolor sit amet, consectetur adipisicing elit. Doloremque, nesciunt.</b>
Co przy renderowaniu zwróci Ci:
Lorem ipsum dolor sit amet, consectetur adipisicing elit https://4programmers.net ipsum dolor sit amet, consectetur adipisicing elit. Doloremque, nesciunt.