Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony][twig]Użycie filtra capitalize
athabus
post
Post #1





Grupa: Zarejestrowani
Postów: 898
Pomógł: 48
Dołączył: 2.11.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
johny_s
post
Post #2





Grupa: Zarejestrowani
Postów: 594
Pomógł: 122
Dołączył: 17.07.2005
Skąd: P-na

Ostrzeżenie: (0%)
-----


css, będzie prościej
Go to the top of the page
+Quote Post
athabus
post
Post #3





Grupa: Zarejestrowani
Postów: 898
Pomógł: 48
Dołączył: 2.11.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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ć.
Go to the top of the page
+Quote Post
Crozin
post
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
athabus
post
Post #5





Grupa: Zarejestrowani
Postów: 898
Pomógł: 48
Dołączył: 2.11.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Crozin
post
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
athabus
post
Post #7





Grupa: Zarejestrowani
Postów: 898
Pomógł: 48
Dołączył: 2.11.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Crozin
post
Post #8





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
prz3kus
post
Post #9





Grupa: Zarejestrowani
Postów: 260
Pomógł: 30
Dołączył: 22.01.2007

Ostrzeżenie: (0%)
-----


Tak nie działa {{s|raw|capitalize}} ?
edit:
Fakt dziwnie to działa, nie było pytania (IMG:style_emoticons/default/smile.gif)

Ten post edytował prz3kus 21.05.2015, 07:02:59
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 13:47