Linki na stronie

0

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

0

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).

0

Tak to wygląda, w załącznku jest zdjęcie.

0

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)
0

Dlaczego tak sie dzieje?

1

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.

1

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.

0

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.

1

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1