Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony][twig]Użycie filtra capitalize
Forum PHP.pl > Forum > PHP > Frameworki
athabus
Hej mam takie banalne pytanie.

Mam zmienną:

  1. $s="<strong>witaj</strong> świecie"


Próbuję w Symfony (a dokładniej w widoku Twig wyświetlić to jako

Witaj świecie

Tak więc zrobiłem coś takiego
  1. {{s|capitalize|raw}}


Oczywiście nie działa - pierwsza litera nie jest zmieniana na wielką, gdy string zaczyna się od znacznika html - można to jakoś obejść w Twig, czy muszę się bawić w obrobienie stringa już na poziomie kontrolera?
johny_s
css, będzie prościej
athabus
Wolę nie, bo Google pewnie kontroluje także poprawność gramatyczną/ortograficzną zdań (albo będzie w przyszłości). Na potrzebę projektu obejście znalazłem, bo akurat ten fragment mogłem zmienić na poziomie bazy danych - bardziej pytanie z ciekawości, bo aż mi się nie chcę wierzyć, że w Twig takiego czegoś nie da się zrobić.
Crozin
OOTB nie ma czegoś takiego co raczej nie jest niczym dziwnym. Przecież by zrobić coś takiego porządnie potrzebny byłby jakiś przynajmniej parser HTML/XML.

PS. Google interpretuje też CSS.
athabus
Oj nie jest to specjalnie trudne - przecież w Twigu są funkcje usuwające html ze stringa, więc nie ma problemu wykorzystać je do zignorowania znaczników przy działaniu danej funkcji.
Jako ciekawostka to już np. z takim stringiem "{cos"|capitalize sobie Twig radzi i zamienia na "{Cos" - przypuszczam, że funkcja jest tak napisana, że szuka pierwszej litery w stringu - skoro potrafi pomijać "nielitery" to i znaczniki html powinna móc pomijać. Było nie było jest to w końcu język ułatwiający pracę z szablonami, a pewnie często się zdarza jakiś znacznik na początku zdania.

Oczywiście google rozpoznaje css ale pytanie czy w kontekście gramatyki/ortografii. Raczej nie jest naturalne pisanie długiego tekstu małymi literami i zamiana na zdania za pomocą css. Oczywiście może przesadzam/przeceniam google, ale jednak w tym projekcie zależy mi na seo i nie chcę, żeby google stwierdził że moja strona to jakiś spam. A budowane zdania akurat tworzą długie bloki tekstu.
Crozin
Jesteś pewien, że
Kod
{{ "{cos" | capitalize }}
fektycznie zwróciło "{Cos", a nie "{cos"? Bo nie powinno: https://github.com/twigphp/Twig/blob/ca76ad.../Core.php#L1298
Określenie co jest pierwszym "widzialnym" znakiem jest trudne, zważywszy na to na jak popieprzoną składnię zezwala HTML5 i chcąc to zrobić solidnie wymagany będzie de facto parser, a robiąc byle jak przynajmniej jakaś jego namiastka. Bo przecież skądś musisz, które litery są częścią nazwy elementu, atrybutu, jego wartością albo komentarzem a co jest częścią tekstu (TextNode).

1. Przede wszystkim zadbaj o to by wprowadzane dane były w miarę możliwości poprawne.
2. Twig jakiś specjalnych cudów poza poprawną obsługą kodowania znaków czy kilku pomocniczych funkcji nie zawiera w podstawowym wydaniu i są to głównie nakładki na PHP-owe funkcje.
athabus
Sprawdziłem ponownie i faktycznie nie zwrocilo "{Cos" . W projekcie, żeby ładnie wszytko wyglądało mam parser, który używam chyba z 5 razy replace i po drodze "kapitalizuje" kilka stringów i skleja wszystko w zdania. Musiało się coś nałożyć po drodze.

Niemniej skoro potrafi skutecznie wyciąć znaczniki html ze stringa, to z kapitalizowaniem z pominięciem znaczników też powinno pójść. Sam już nie wiem, może masz rację, że z rozbudowanymi strukturami byłby problem, ale proste stringi z podstawowymi znacznikami na poziomie szablonu powinno się dać obejść. Inaczej sporo logiki trzeba przenosić do kontrolera w niektórych sytuacjach.

No nic - jak się nie da to się nie da - moja ciekawość została zaspokojona.
Crozin
1. Ani PHP, ani Twig nie mają jakiś wielce wyrafinowanych narzędzi do manipulowania HTML-em w formie tekstowej. Pomijam tutaj oczywiście takie narzędzia jak DOMDocument, który właściwie załatwia sprawę.
2. Nie ma prostego albo złożonego HTML-a. Jest po prostu HTML i narzędzia typu Twig powinny go w pełni wspierać albo w ogóle.
3. Nie powinieneś w żadnym wypadku czegoś takiego przenosić do kontrolera. Utwórz własny modyfikator w Twigu, który wykona to zadanie - w swoim wnętrzu może on wykorzystać przecież wszystko.
prz3kus
Tak nie działa {{s|raw|capitalize}} ?
edit:
Fakt dziwnie to działa, nie było pytania smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.