nauka - własny system szablonów |
nauka - własny system szablonów |
11.07.2014, 09:12:54
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 |
|
|
11.07.2014, 09:21:55
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ś.
|
|
|
11.07.2014, 10:10:26
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 ! |
|
|
11.07.2014, 10:14:08
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 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 |
|
|
11.07.2014, 10:32:53
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() |
|
|
11.07.2014, 10:42:16
Post
#6
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 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 |
|
|
11.07.2014, 10:51:37
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. |
|
|
11.07.2014, 10:57:38
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 |
|
|
11.07.2014, 11:00:25
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 Jeśli chcesz odpalać zmienne tylko w widoku, zainteresuj się extract, zakładając że używasz tego w klasach, inaczej nadpiszesz zmienne globalnie. Do zmiany pseudo kodu, możesz użyć preg_repalce i stworzyć coś na wzór tokenizacji.
-------------------- 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). |
|
|
11.07.2014, 11:06:06
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 |
|
|
11.07.2014, 11:29:52
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 |
|
|
11.07.2014, 11:33:00
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). |
|
|
11.07.2014, 11:34:20
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.
|
|
|
11.07.2014, 11:38:12
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). |
|
|
11.07.2014, 11:41:54
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 |
|
|
11.07.2014, 11:47:30
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). |
|
|
11.07.2014, 11:57:16
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 |
|
|
11.07.2014, 12:09:06
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ą Celowo chcą Cię zniechęcić, a jak się Im uda to wygrają, a jak nie to pokażesz że jesteś zdeterminowanych w celu
|
|
|
11.07.2014, 12:53:11
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ć". |
|
|
11.07.2014, 12:53:30
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... |
|
|
Wersja Lo-Fi | Aktualny czas: 25.04.2024 - 05:57 |