![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 9.07.2014 Ostrzeżenie: (0%) ![]() ![]() |
Korzystając z chwili wolnego czasu robię sobię odwozorwanie różnych funkcjonalności frameworków - obiektowo i w php, np. routing, połączenia bazodanowe singleton vs proxy itp.
Wszystko głównie w celach edukacyjnych ale kto wie może z tego wyjdzie mi kiedyś jakaś namiastka frameworka lub microframework. Wśród wielu różnych modułów stanąłem jednak przed problemem odwzorowania systemu szablonów i tu pojawia się problem jak coś takiego napisać ? ogólnie wpadłem na pomysł że za pomocą wyrażeń regularnych zamienie sobię kod np.
domyślnie maszynka ma mi zamienić coś takiego na poniższy ciąg i przypisać to do zmiennej $widok;
i tu pojawia się mały problem a w zasadzie 2, czy na podobnej zasadzie działają silniki twig czy blade ? oraz jak mogę sparsować i wyświetlić treść strony trzymaną w zmiennej $widok ? Ten post edytował mgebala8 11.07.2014, 09:13:27 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Pseudokod jest zamieniany na zwykły kod php i wykonywany (dodatkowo w cache zapisana wersja PHP). Czyli tak jak pokazałeś.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 9.07.2014 Ostrzeżenie: (0%) ![]() ![]() |
Pyton_000 dzięki za odpowiedź, wcześniej nie myślałem o cache-owaniu danych a teraz poddałeś mi całkiem dobry pomysł na poszerzenie swojej wiedzy w ta stronę, w związku z tym 3 pytania:
- Gdzie powinno się zapisywać cache ? sesje, pliki czy baza danych ? Jest jeszcze pamięć ram ale ona odpada ze względu na dodatkową konfigurację a mi zależy na uniwersalności i prostocie. - Jak wygląda nadpisywanie takich danych ? korzystając z laravela wszelkie zmiany są wprowadzane na bieżąco więc skąd on wie kiedy ma je nadpisać a kiedy zostawić i pobrać ? - ponawiam pytanie dotyczące wyświetlenia zawartości strony w zmiennej $widok - trzymam tam for include itp. więc zwykłe polecenie echo odpada Pozdrawiam i dziękuję za wskazówki - są one bezcenne ! ![]() |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Wydaje mi się, że bez sensu jest pisać własny system szablonow. Kilka powodow:
1) Jest to bezsensu ![]() 2) Jak ktos kiedys bedzie chcial/musial pisac z tobą lub po tobie poprawiac, to zachlasta się na kolejnym systemie szablonow 3) Nie będzie to mialo pelnej porządnej funkcjonalnosci 4) Lepiej już zrobic system widoku, gdzie bedziesz mieszal kod php z html. Kazdy bez problemu bedzie mogl pisac w takim "szablonie" i bedzie mogl robic co bedzie chcial/potrzebowal i nie bedzie ograniczony to prostego systemu szablonow. Przyklad jak cos takiego napisac w 10 minut masz mojej stopce -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 9.07.2014 Ostrzeżenie: (0%) ![]() ![]() |
^^ nospor, rozumiem Cię ale bardziej mi zależy na nauce i pobawieniu się kodem niż wymyślaniu koła na nowo…
w swojej zmiennej pobierasz content za pomocą constukcji:
a jest jakaś opcja żeby to odwrócić ? coś w stylu ob_set_contents() ![]() |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Po co?
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Pisanie własnych narzędzi "dla nauki" ma jakiś tam sens, ale nie w Twoim przypadku. Po pytaniach jakie zadajesz widać, że masz niedużą wiedzę w wielu dziedzinach, których znajomość jest niezbędna do napisania czegoś co miałoby ręce i nogi (nawet w kontekście "dla nauki"). IMO powinieneś wykorzystać ten czas na zaznajomienie się z jakimś istniejącym rozwiązaniem (np. wspomniany Twig) i jego dogłębnym poznaniem. Nie dość, że nauczysz się "jak zrobić to dobrze", przy okazji poznasz narzędzie, które będziesz mógł wykorzystać w prawdzinym projekcie.
PS. Wyrażenia regularne nie nadają się do parsowania tego typu rzeczy. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 9.07.2014 Ostrzeżenie: (0%) ![]() ![]() |
Crozin - dzięki za opinie, właśnie dlatego ten temat i próba skoczenia na głęboką wodę
![]() Co do twiga myślę że znam go dobrze, blade z laravela z nam bardzo dobrze i często go wykorzystuje w komercyjnych projektach. Tu raczej chodzi o to żeby zobaczyć co jest pod maską i spróbować napisać coś swojego, nawet jeśli miałby to być maluch w porównaniu do mercedesa jakim jest blade to myślę że warto ![]() dlaczego wyrażenia regularne nie nadają się do parsowania tego typu rzeczy ? i co w takim razie to parsuje ? Ten post edytował mgebala8 11.07.2014, 11:25:46 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
@ w kodzie to chybiony pomysł, kojarzą się z czymś innym
![]() -------------------- Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta). |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 9.07.2014 Ostrzeżenie: (0%) ![]() ![]() |
po prostu wykorzystałbym funkcje:
a co do @ blade z laravela wykorzystuje ją z powodzeniem Ten post edytował mgebala8 11.07.2014, 11:07:56 |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
@mgebala8: @!*!: @mgebala8: HTML-a nie da się parsować przy pomocy wyrażeń regularnych, podobnie jest z szablonami (ten sam poziom złożoności języka). Taka niemal standardowa lektura: http://stackoverflow.com/a/1732454/252591
Ten post edytował Crozin 11.07.2014, 11:30:32 |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
@Crozin - w systemie szablonów nie chodzi o parsowanie HTML.
Ten post edytował !*! 11.07.2014, 11:33:51 -------------------- Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta). |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
@!*!: Napisałem, że podobnie jak przy próbie parsowania HTML-a, ponieważ "typowy system szablonów" (patrz wspomniany Twig) operuje na równie złożonym co HTML poziomie języka.
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
@!*!: Napisałem, że podobnie jak przy próbie parsowania HTML-a, ponieważ "typowy system szablonów" (patrz wspomniany Twig) operuje na równie złożonym co HTML poziomie języka. Bez przesady, to tylko zamiana X na Y. Jakkolwiek by tego nie napisać, zawsze znajdzie się w tym jakiś brak i nic nie zastąpi czystego PHP. -------------------- Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta). |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Nie, to nie tylko zamiana X -> Y, bo przykładowo taki zapis jest niepoprawny:
Kod <abc> Nie może wystąpić tag @endfor bez uprzedniego wywołania @for.@if (...) dsadas @endfor Ponownie polecam lekturę pytania i kilku pierwszych odpowiedzi, które zawierają już dużo więcej merytorycznych argumentów: http://stackoverflow.com/questions/1732348...-contained-tags - szczególnie, fragment dot. hierarchii Chomsky'ego. Ten post edytował Crozin 11.07.2014, 11:42:34 |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli ktoś czepia się takich "błędów" to równie dobrze możemy mieć pretensje dlaczego to nie działa w czystym PHP. Strata czasu na taki parser.
-------------------- Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta). |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 9.07.2014 Ostrzeżenie: (0%) ![]() ![]() |
Crozin - wybacz ale za bardzo Cię nie rozumiem ? Jest gościu który chce się porwać z motyką na słońce i spróbować napisać coś swojego nawet niech będzie to gorsze i okrojone ale przecież nie oto chodzi by tworzyć następcę laravela, po prostu nauczę się czegoś nowego a ty za wszelką cenę chcesz mi uświadomić że nic nie wiem i nie powinienem się za to zabierać ehh już samo przygotowanie do napisania takiego systemu szablonów nauczyło mnie kilku nowych rzeczy a co dopiero pisanie go
![]() jeśli chodzi o : Nie może wystąpić tag @endfor bez uprzedniego wywołania @for. to kto powiedział że nie może ? powiem więcej może i wystąpi wtedy w kodzie będziemy mieli:
i parser php zwróci błąd ale przecież nie ma to związku z systemem szablonów ogólnie zarys jest taki: - zmiana zmiennych {zmienna} na <?php echo $zmienna; ?> - możliwość odwzorowania kilku pętli ifów (if,for,foreach) - dodanie opcji layout i wprowadzenie sekcji (w jednym pliku mamy kilka sekcji które parser zapisuje do tablicy i podmienia w drugim pliku template) - odwzorowanie @include - i tu pojawia się mały problem bo inkludować pliki można by w nieskończoność a przecież każdy inkludowany plik musi być najpierw parsowany przez mój system szablonów - wygenerowane szablony będziemy zapisywali do pamięci cache żeby odciążyć serwer php Ten post edytował mgebala8 11.07.2014, 12:07:49 |
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Pisz i nie patrz co Oni piszą
![]() ![]() |
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Moim zdaniem w php nie powinno się używać żadnych szablonów typu twig, blade, smarty etc bo to jest głupie. Uczysz się kolejnej składni, kolejnego szablonu, w tylko jednym języku tych składni jest kilka.. No a potem wyjdzie symfony 3, symfony 4 i znów będzie jakaś nowa "super duper" lepsza wersja, i wszyscy się tym będą jarać, bo to jest takie fajne.. PHP powstał jako język do szablonów i niech tym pozostanie, dorabianie do tego na siłę jakiejś dodatkowej logiki, bo tak jest "ładniej", jest bezsensu. A o syntaksie w edytorach nie wspomnę. Zaś musisz mieć edytor który ci to sensownie podświetla, ewentualnie monituje cię o literówkach, to trzeba jakieś wtyczki do edytorów ściągać.. To już przestaje być zabawne, a powody do używania jakiś systemów szablonów są kuriozalne. Np twig for designers (fuck yeah, bo w zwykłym php wygląda to brzydko). Albo jeszcze lepsze ze strony twiga:
No tak, bo przecież twig jest napisany w innym języku, dlatego ma więcej możliwości.. Kiedyś też myślałem że tak się powinno robić, bo wszyscy tak robili, aż uświadomiłem sobie że to jest bezsensu. "Jedzmy gówno, milion much nie może się mylić". |
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 9.07.2014 Ostrzeżenie: (0%) ![]() ![]() |
Pyton_000 - dzięki za wsparcie, traktuję to jako zabawę więc nie tak łatwo mnie zniechęcić
![]() Po co? załóżmy że mam zmienną $widok = 'echo "test<hr>"; for($i=1;$i<10;$i++){echo "test<br>"}'; i teraz chciałbym ją wypisać i sparsować na ekranie a do tego potrzebuje czegoś w stylu ob_set_contents() bo echo mi tutaj nie zadziała... |
|
|
![]()
Post
#21
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
by_ikar systemy Template powstały po to aby kod szablonu był czytelniejszy.
Ja wiem że PHP to najlepszy system szablonów bo nie trzeba parsować ale czasami wolę mieć niż albo jeszcze gorzej (masakra) |
|
|
![]()
Post
#22
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Pyton do tego naprawde idzie sie przyzwyczaic. Tez kiedys sobie nie wyobrazal tak pisac, a teraz nie wyobrazam sobie ze musialbym znowu przebijac sie przez jakis durny, ograniczony i wkurzający system szablonow
Cytat załóżmy że mam zmienną $widok = 'echo "test<hr>"; for($i=1;$i<10;$i++){echo "test<br>"}'; i teraz chciałbym ją wypisać i sparsować na ekranie a do tego potrzebuje czegoś w stylu ob_set_contents() bo echo mi tutaj nie zadziała... Cos nie tak z logiką twojego systemu. Czemu masz miec taką zmienną? Szablony bedą w plikach i masz robic zwykle include() i po sprawie. Ty nie masz miec szablonow w zmiennych. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#23
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 9.07.2014 Ostrzeżenie: (0%) ![]() ![]() |
Ty nie masz miec szablonow w zmiennych. tylko że najpierw muszę przeparsować te pliki moim systemem szablonów żeby powstawiały tam gdzie chce kod php (pozamieniał @zmienna -> <?php echo $zmienna ?> itp.) więc efekt będzie taki że otrzymam zmienną z ostatecznym kodem php który będę musiał jakoś wyświetlić i tu pojawia się problem jak to zrobić ? ![]() |
|
|
![]()
Post
#24
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Poraz kolejny raz ci powtarzam: sparsowany kod szablonu masz trzymac w pliku php. Dzieki temu bedziesz robil INCLUDE i po sprawie
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#25
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
@nospor - jemu chyba chodzi o tworzenie tych plików w locie, nie każdy od razu cały szablon zapisuje w cache jako PHP, dlatego jest np. {include:file.html} które działa jak rekurencja.
-------------------- Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta). |
|
|
![]()
Post
#26
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
include:file.htm powinno normalnie includowac plik jak w czystym php, wiec za bardzo nie widze czzemu ten przyklad mial sluzyc
![]() Poza tym nie odnioslem wrazenia takiego jak ty -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#27
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
include:file.htm powinno normalnie includowac plik jak w czystym php I to robi z tą różnicą, że jeszcze raz jest odpalany parser, inaczej byś nie zamienił kolejnych zmiennych. -------------------- Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta). |
|
|
![]()
Post
#28
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
No ale dobrze, parser niech sie odpala teraz dla tego include, nikt mu nie broni. Ale to include znowu ma byc zapisane w pliku php, a pliku wyzej ma byc zamienione na zwykle include phpowe. Odpalanie tego ze zmiennej nie ma sensu. Owszem, na jakims tam etapie parsowania bedzie to zapisane w zmiennej ale tylko na chwile by za chwilke zapisac to docelowo w pliku php
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#29
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat Jeśli ktoś czepia się takich "błędów" to równie dobrze możemy mieć pretensje dlaczego to nie działa w czystym PHP. Strata czasu na taki parser. Jeżeli błąd składni to "błąd" to co nie jest błędem w Twoim rozumowaniu? Ale masz rację, szkoda czasu na narzędzie, które nawet tak trywialnych błędów nie wyłapie na etapie "kompilacji". Dlatego albo stosuje się czyste PHP, albo stosuje gotowe, solidne rozwiązania, albo jeżeli ma się jakiś powód pisze własne - ale takie, które rozwiązuje jakiekolwiek problemy, a nie tylko stwarza nowe.Cytat Crozin - wybacz ale za bardzo Cię nie rozumiem ? Jest gościu który chce się porwać z motyką na słońce i spróbować napisać coś swojego nawet niech będzie to gorsze i okrojone ale przecież nie oto chodzi by tworzyć następcę laravela, po prostu nauczę się czegoś nowego a ty za wszelką cenę chcesz mi uświadomić że nic nie wiem i nie powinienem się za to zabierać ehh już samo przygotowanie do napisania takiego systemu szablonów nauczyło mnie kilku nowych rzeczy a co dopiero pisanie go wink.gif Masz rację - częściowo próbuję Cię zniechęcić. Masz też rację w tym, że nauczysz się czegoś nowego pisząc takie coś, ale...1. Nauczysz się zdecydowanie mniej, niż gdybyś czas ten poświęcił na rozwój w innym kierunku, tj. nauczenie się wykorzystywania istniejącego narzędzia, zbadanie i przeanalizowanie jak działa "pod maską", napisanie jakiś rozszerzeń do niego. Co więcej zamiast od razu uczyć się dobrych i przydatnych rzeczy siłą możesz wyrobić sobie wiele złych wawyków. 2. Niemal na pewno nie uda Ci się stworzyć czegoś wartego (dla Ciebie samego) wykorzystania w przyszłości, ponieważ po Twoich pytaniach widać, że brak Ci jeszcze nieco doświadczenia/wiedzy by napisać dosyć mocno rozbudowane narzędzie. Nie wiesz jakich problemów się spodziewać, domyślam się, że zapewne nawet nie wiesz jakich problemów chcesz się pozbyć przy pomocy tego narzędzia. 3. Będziesz miał sporo satysfakcji ze stworzenia czegoś własnego, ale nie będziesz miał znajomości/doświadczenia z wykorzystaniem czegoś faktycznie przydatnego. Innymi słowy poświęcisz sporo czasu dla nauczenia się kilku rzeczy, zamiast poświęcenia sporej ilości czasu na nauczenie się sporej ilości rzeczy - możesz mi wierzyć, sam przerabiałem dokładnie to samo dobrych kilka lat temu (mam chyba nawet gdzieś zapisany projekt własnego systemu szablonów). |
|
|
![]()
Post
#30
|
|
![]() Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
by_ikar systemy Template powstały po to aby kod szablonu był czytelniejszy. Ja wiem że PHP to najlepszy system szablonów bo nie trzeba parsować ale czasami wolę mieć niż albo jeszcze gorzej (masakra) Też tak kiedyś myślałem, kiedy tworzyłem swój ambitny system szablonów, wydawało mi się że jest mi to potrzebne, że tak jest czytelniej! A prawda jest taka, że jest to zbędna logika do czegoś co mamy out of box. Rozumiem system szablonów w stylu tego co jest w symfony2 - tzn możliwość dziedziczenia, sloty etc. To akurat jest fajny pomysł. Ale same templatki powinny być IMO zawsze jako html + php. Też kiedyś stworzyłem swojego "potworka":
Gdzie uważałem że { something } jest czytelniejsze niż <?php something ?>. No ale wyrosłem z tego i jestem zdecydowanie za tym żeby nie używać szablonów. |
|
|
![]()
Post
#31
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli błąd składni to "błąd" to co nie jest błędem w Twoim rozumowaniu? Ale masz rację, szkoda czasu na narzędzie, które nawet tak trywialnych błędów nie wyłapie na etapie "kompilacji". Dlatego albo stosuje się czyste PHP, albo stosuje gotowe, solidne rozwiązania, albo jeżeli ma się jakiś powód pisze własne - ale takie, które rozwiązuje jakiekolwiek problemy, a nie tylko stwarza nowe. A jaki jest sens, aby system szablonów robił dodatkowy narzut na sprawdzanie czy składnia się zgadza, to zbędny bajer, ponieważ tym zajmuje się samo PHP. Max czym to się powinno zajmować to zamiana {foo} na <?php echo $foo;?> ... czy inne takie, aby skrócić czas pisania o całe 8 znaków ![]() -------------------- Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta). |
|
|
![]()
Post
#32
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Hmmm... chociażby po to by dać mi znać w którym pliku i linii jest błąd składni szablonu, która nie musi być równoznaczna ze składnią PHP, a wygenerowany kod PHP wcale nie musi przekładać się linia-w-linię z szablonem? Już nawet nie komentuję reszty dotyczącej "maksymalnych zadań szablonu ograniczających się do zamiany <?php echo na {"...
Szablony nie służą zamianie składni, a wprowadzeniu nowych elementów bądź udoskonaleniu istniejących. |
|
|
![]()
Post
#33
|
|
![]() Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Max czym to się powinno zajmować to zamiana {foo} na <?php echo $foo;?> ... czy inne takie, aby skrócić czas pisania o całe 8 znaków ;) Po prostu jeszcze bardziej skrócona, alternatywna składnia jaką samo PHP również posiada. No właśnie to nie do końca tak zadziała. Bo parser będzie miał problemy ze wszystkim co jest pomiędzy klamrami. Wiem bo tworzyłem takiego potworka (kilka postów wyżej kod) i musiałem dodać blok ignore inaczej przy mieszaniu css/js poprostu potrafiły się trafić miejsca gdzie parser nie wyrabiał (nie pomyślałem wtedy o podwójnych klamrach..). Do tego echo nie może być wszędzie, np w takim przypadku:
Dostaniesz parse error. Więc albo dodawać ręcznie echo: Kod {echo $zmienna} Albo dodać jakiś "szybszy" sposób na dodanie tego echo. No i w moim przypadku była to małpa. No a jak wtedy użyć małpy? A no trzeba dodać kolejne wyrażenie dla podwójnej małpy @@. No i ten bezsens się ciągnie.. |
|
|
![]()
Post
#34
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Wy to potraficie utrudniać sobie życie...
Cytat Hmmm... chociażby po to by dać mi znać w którym pliku i linii jest błąd składni szablonu, która nie musi być równoznaczna ze składnią PHP, a wygenerowany kod PHP wcale nie musi przekładać się linia-w-linię z szablonem? Nie wiem jak byś to napisał, ale linia w szablonie zawsze będzie równa linii w PHP i błąd składni będzie identyczny z tego pliku w jakim wystąpił. Patrz niżej. @by_ikar - kwestia odpowiednich komend Cytat {$foo} {if:isset($foo)} {else} {/if} {foreach:$foo as $key} {/foreach} Chyba nie muszę tłumaczyć na co zostanie to zamienione, akceptowalne są tylko takie tagi, więc: Cytat { if:isset( $foo ) } Nie przejdzie, a skoro robimy include tego samego pliku PHP, to nie ma prawa wyskoczyć błąd w innym miejscu, tylko tam gdzie występuje. Poważnie sprawdzacie błędy w plikach HTML/TPL? Ludzie... -------------------- Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta). |
|
|
![]()
Post
#35
|
|
![]() Grupa: Zarejestrowani Postów: 281 Pomógł: 3 Dołączył: 8.06.2009 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Dzięki panowie !
![]() rozumiem że nie ma innego sposobu wywołania kodu jak przez include ? nospor zakłada że będę miał plik już przeparsowany który będę mógł zainncludować tylko że jeśli na początku nie będę chciał korzystać z cache nie będę miał takiego pliku i tu pojawia się problem jak taki kod wywołać ? druga sprawa co jeśli cache będę robił za pomocą bazy danych mysql albo sesji ? również takiego pliku miał nie będę Jeśli chodzi o składnie języka założyłem sobie coś takiego:
dodatkowo chciałbym aby mój szablon składał się z 2 plików 1 plik to będzie kontretny kontent na zasadzie:
a w pliku layout_main będę miał główny layout strony gdzie tylko zaznaczę w kodzie
i w te miejsca ma się wstawić kod z zaznaczonych sekcji, dzięki temu mogę mieć jeden szablon dla kilku widoków i jedynie zmieniać content na chwilę obecną mam problem z: - jak wyświetlić zawartość strony (ze znacznikami php) znajdującą się w zmiennej czy jest to wykonalne ? - kiedy tworzyć nowy cache widoku a usuwać stary ? do tego chciałbym mieć jeszcze możliwość includowania innych plików np. w szablonie móc sobie wstawić @include('menu') i wszystko świetnie mój parser zamieni mi to na <?php include('menu.php') ?> ale już nie przeparsuje samego pliku menu.php zastanawiam się jak to robią inne silniki np. blade ? czy jeśli tam będę includował coś z pliku który includuje inny plik to czy ten ostatni też zostanie sparsowany ? Tutaj rozwiązaniem byłoby najpierw przeparsowanie całego kodu przez php (includujemy wszystkie pliki) potem przeparsowanie moim parserem i następnie znowu parsowanie standardowym phpem i zapisanie wszystkiego do cache ale wydajność takiego rozwiązania pewnie będzie marna... Ten post edytował marcus753 11.07.2014, 20:37:04 -------------------- Cokolwiek zostanie upuszczone na uklad elektroniczny, spadnie zawsze tam gdzie wyrzadzi najwiecej szkody.
|
|
|
![]()
Post
#36
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Nie, nie zawsze linia z szablonu odpowiada linii z wynikowego pliku. Wystarczy chociażby komentarz w szablonie (a'la Twig):
Kod <p>Hello World!</p> I już masz wygenerowany kod w formie:{# blah blah blah #} {# blah blah blah blah blah blah blah blah blah #} <p>Witaj świecie</p> Nie mówiąc już o tym, że szablon może być skompilowany przykładowo do klasy, nie "surowego" pliku. |
|
|
![]()
Post
#37
|
|
![]() Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Wy to potraficie utrudniać sobie życie... Nie wiem jak byś to napisał, ale linia w szablonie zawsze będzie równa linii w PHP i błąd składni będzie identyczny z tego pliku w jakim wystąpił. Patrz niżej. @by_ikar - kwestia odpowiednich komend Chyba nie muszę tłumaczyć na co zostanie to zamienione, akceptowalne są tylko takie tagi, więc: Nie przejdzie, a skoro robimy include tego samego pliku PHP, to nie ma prawa wyskoczyć błąd w innym miejscu, tylko tam gdzie występuje. Poważnie sprawdzacie błędy w plikach HTML/TPL? Ludzie... Tak ale wtedy jest już zupełnie nowy syntax, kolejny do nauczenia się, poznania jego wszystkich słabości.. IMO systemy szablonów w php to trochę na wyrost. Taki twig to nic innego jak jinja z django, a tam systemy szablonów mają o tyle sens, że nie użyjesz sobie pythona razem z html, tak jak to ma miejsce w przypadku php+html. Ale w przypadku php ? Pamiętam kiedyś prelekcje z php, i tam koleś mówił że programiści php to "złodzieje". Większość rzeczy próbujemy na siłę implementować z innych języków kompensując sobie pewne braki. Tyle że to nie ma sensu, kiedy php jest dobry sam w sobie jako system szablonów out of box. Tzn nie zrozum mnie źle, bo ja już trochę się pogubiłem i nie wiem już sam kto jest za a kto jest przeciw. Jedynie chcę podkreślić że jakiekolwiek systemy szablonów w php to proteza, która zupełnie niepotrzebny generuje narzut oraz dodatkową składnie - głównie w imię "nie bądźmy gorsi od innych języków" .. @marcus753 - popatrz na klasę którą wkleiłem, jest ona dość prosta (w tym zawiera wrednego evala) i powinna ci co nieco powiedzieć jak mniej więcej powinno to wyglądać (a właściwie nie wyglądać, bo szablony są zbędne). |
|
|
![]()
Post
#38
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat Pamiętam kiedyś prelekcje z php, i tam koleś mówił że programiści php to "złodzieje". Zapożyczenia z innych języków/platform to bardzo, bardzo dobra rzecz, a nie żadne "złodziejstwo".Cytat Tyle że to nie ma sensu, kiedy php jest dobry sam w sobie jako system szablonów out of box. PHP w porównaniu do takiego chociażby Twiga wypada słabo, chociaż tak... można go używać bezpośrednio.Cytat [...] która zupełnie niepotrzebny generuje narzut oraz dodatkową składnie - głównie w imię "nie bądźmy gorsi od innych języków" .. Nie, szablony w PHP to głównie idea: PHP bezpośrednio w szablonach jest niewygodne i nieefektywe, więc stworzono narzędzie, które rozwiązuje pewne problemy jakie czyste PHP powoduje.Cytat @marcus753 - popatrz na klasę którą wkleiłem, jest ona dość prosta (w tym zawiera wrednego evala) i powinna ci co nieco powiedzieć jak mniej więcej powinno to wyglądać (a właściwie nie wyglądać, bo szablony są zbędne). To co tam zaprezentowałeś faktycznie pokazuje jak tego nie robić - ale nie ze względu na bezsensowność szablonów jako takich tylko prymitywną i pełną ograniczeń realizację.
|
|
|
![]()
Post
#39
|
|
![]() Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Zapożyczenia z innych języków/platform to bardzo, bardzo dobra rzecz, a nie żadne "złodziejstwo". PHP w porównaniu do takiego chociażby Twiga wypada słabo, chociaż tak... można go używać bezpośrednio. Nie, szablony w PHP to głównie idea: PHP bezpośrednio w szablonach jest niewygodne i nieefektywe, więc stworzono narzędzie, które rozwiązuje pewne problemy jakie czyste PHP powoduje. To co tam zaprezentowałeś faktycznie pokazuje jak tego nie robić - ale nie ze względu na bezsensowność szablonów jako takich tylko prymitywną i pełną ograniczeń realizację. Nie twierdze że zapożyczenia są złe, mi chodziło (i temu gościowi również) o tworzenie odpowiedników czegoś, co się sprawdza w innych językach, a nie koniecznie w php. A co takiego ma twig, czego nie ma php, albo w php nie można zrobić? Jest to jakiś moduł php? No nie bardzo. Aha, czyli do kilku pomocniczych funkcji dla widoku, dorobimy sobie zupełnie nową składnie - bądźmy innowacyjni. Niewygodne to mogą być za małe buty. To jest kwestia przyzwyczajenia, tak samo jak się przyzwyczajasz do nowej składni, pierdyliardowej wersji super nowego, ulepszonego systemu szablonów. Tak, ta realizacja "mojej" wersji szablonów jest prymitywna i ograniczona, bo już na etapie początkowym, zdałem sobie sprawę, że jest to bezsensu. Lepiej napisać jakąś klasę lub funkcję pomocniczą, niż dorabiać do tego nową składnie. No i robiłem to bardziej jak autor tematu - w celach naukowych, tyle że miałem ciut inną wiedzę. |
|
|
![]()
Post
#40
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat nospor zakłada że będę miał plik już przeparsowany który będę mógł zainncludować tylko że jeśli na początku nie będę chciał korzystać z cache nie będę miał takiego pliku i tu pojawia się problem jak taki kod wywołać ? druga sprawa co jeśli cache będę robił za pomocą bazy danych mysql albo sesji ? również takiego pliku miał nie będę Powinienies sparsowany szablon trzymac w pliku php. W przeciwnym wypadku ten twoj system szablonow, ktory juz teraz nie ma racji bytu, nie bedzie mial juz w ogole racji bytu. Jesli bedzie lecial jakis blad, to w zyciu nie dowiesz sie skad on leci. Gdy kod bedzie w pliku php, to bedziesz wiedzial gdzie ten blad jest i bedzie mozna go poprawic.Poza tym ciagle i ciagle parsowanie jest bez sensu. Predzej czy później musisz to zapisywac w plikach, wiec zacznij od razu a nie bedziesz dwukrotnie robil roboty "glupiego" -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#41
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat A co takiego ma twig, czego nie ma php, albo w php nie można zrobić? Twig jest napisany w PHP więc z definicji nie ma w nim niczego czego nie dałoby się zrobić z poziomu PHP. Jednak oferuje on inne środowisko pracy:- budowanie szablonu z dołu-do-góry, a nie od góry-do-dołu jak ma to miejsce przy "zwykłym, czystym" PHP, - wbudowane automatyczne filtrowanie wyświetlanych danych, również dla kontekstów innych niż tekst w HTML-u, - sandbox, - expression language, - prostszy i mniej podatny na błędy ekosystem dla osób nie znających PHP zbyt dobrze. A szablony to nie tylko twory pokroju Twiga, możesz w końcu mieć chociażby XML-a z PHPTalem. |
|
|
![]()
Post
#42
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
@Crozin - obaj mamy inne podejście do szablonów, dla mnie to nie jest nowy język z funkcjami np. tak jak wspomniałeś komentarze {# xxx#} ... Zupełnie zbędna rzecz, tak samo jak zamiana X na Y, ale niektórzy to lubią i czasami jest to czytelniejsze, bo nie każdy używa alternatywnej składni PHP, a jedzie na klamrach...
@by_ikar - Twój kawałek kodu byłby dobry gdybyś ograniczył tagi do określonych a nie brał wszytko z marszu... i ten eval... -------------------- Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta). |
|
|
![]()
Post
#43
|
|
![]() Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
@by_ikar - Twój kawałek kodu byłby dobry gdybyś ograniczył tagi do określonych a nie brał wszytko z marszu... i ten eval... Zdaje sobie z tego sprawę, to jest mój dość stary potworek który, którego pomysł został zarzucony niemal na starcie, poprostu idea szablonowania mi przeszła.. Twig jest napisany w PHP więc z definicji nie ma w nim niczego czego nie dałoby się zrobić z poziomu PHP. Skoro tak, to może warto użyć samych helperów zamiast tworzyć kolejną abstrakcje? IMO całe szczęście symfony daje wybór co do szablonów i nie trzeba być przymuszanym do czegoś, czego się nie popiera ;) PS. jak dobrze pamiętam @crozin to jest już n'ty temat w którym się o te szablony spieramy ![]() Ten post edytował by_ikar 12.07.2014, 12:56:20 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 07:57 |