athabus
19.05.2015, 17:24:41
Hej mam takie banalne pytanie.
Mam zmienną:
$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
{{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
19.05.2015, 17:55:30
css, będzie prościej
athabus
19.05.2015, 18:32:50
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
19.05.2015, 18:54:10
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
19.05.2015, 19:06:15
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
19.05.2015, 19:18:08
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#L1298Okreś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
19.05.2015, 19:33:10
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
19.05.2015, 19:48:09
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
21.05.2015, 06:56:07
Tak nie działa {{s|raw|capitalize}} ?
edit:
Fakt dziwnie to działa, nie było pytania
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.