ďťż
chomiki
H.Game - gra na znajomość xHTML/JS/PHP
[PHP]Dynamic Script Forum v1.0 Alpha 4
[PHP]Funkcja pobierająca źródło zewnętrznej strony
[PHP] Testy szybkości funkcji i instrukcji
[PHP] Zapis konfiguracji - jak to zrobić?
[php + mysql] co robię źle?
[x-php/application]DSF 1.0
[php]Skrypt poszukiwany
[PHP] Parsowanie dokumentów
[php + mysql] rekordy
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • raju.pev.pl

  • chomiki

    Niektórzy polecają MVC, lecz nie nadaje się on dla każdego projektu, więc go (w pełni) nie wykorzystam. Trzeba rozwiązać sposób wyświetlania szablonów. Nie wiem, co wybrać.

    Wziąłem się za zmianę budowy skryptu, lecz tu też są schody. Mam nadzieję, że mi doradzicie szybkie, wydajne i optymalne rozwiązanie. Aktualnie stosuję:


    Index.php
    - dołącz kernel.php (podstawowe pliki)
    - dołącz plik modułu - mod/(moduł).php
    ---- zazwyczaj: pobierz dane z bazy, zdefiniuj stałe TITLE i FILE
    - pisz "<html>...<title>(stała TITLE)</head><body>"
    - dołącz plik szablonu (wnętrze <body>)
    ---- dołącz plik stałej FILE (zdefiniowanej przez plik modułu)
    - pisz </body></html>

    Rozwiązanie już pozwala na zmianę tytułu, używanie nagłówków i dodanie treści do <head>, lecz jest o tyle niewygodne, że trzeba używać 2 plików dla modułu - chyba, że o to chodzi. Np. aby wyświetlić listę użytkowników, trzeba najpierw dołączyć plik, który pobierze dane, a potem inny, który wyświetli listę - czyli plików będzie zdecydowanie więcej, chyba że część się złączy.

    Co jednak myślicie o startowaniu z art.php, file.php, users.php zamiast z index.php? Wtedy bardziej pasowałby tu prosty system szablonów (np. ze zmienną {content}, od której rozwaliłoby się szablon funkcją explode() na 2 części) lub dołączanie 2 plików - np. header.php i footer.php. Ewentualnie jeszcze można w pliku modułu definiować funkcję BODY() i wywoływać ją w pliku skórki - już o 1 mniej, ale za to większe zużycie pamięci w przypadku większych modułów i konieczność definiowania globalnych zmiennych, np. CFG, LANG...

    Tak właściwie jądro (wybór użytkownika, języka, itp.) jest w pliku kernel.php, więc nadaje się i jedno i drugie rozwiązanie. Tylko pytanie - które jest bardziej praktyczne?

    Wcześniej było tak:
    Index.php
    - dołącz kernel.php
    - pisz "<html><head>..."
    - jeśli plugins/(co)/head.php istnieje, dołącz go
    - pisz "</head><body>"
    - dołącz plik szablonu
    --- dołącz d.php
    ------ dołącz plik modułu lub odpowiedzialny za wyświetlenie kategorii
    - pisz "</body></html>"
    Kilka plików (np. admin, login) jest niezależnych od index.php.
    Rozwiązanie jest o tyle dobre, że nie wymaga umieszczania dodatkowego kodu, wyświetlającego szablon lub definiującego zmienną FILE - wystarczył sam parametr CO w adresie, by skrypt dołączył odpowiedni moduł. Może lepiej do niego powrócić? Uniemożliwia on jednak dostęp do nagłówków i zmianę tytułu z poziomu index.php (w razie potrzeby można używać innych - np. posting.php - podobnie jak istniejące już login.php czy adm.php).

    Doradźcie coś, bo spędzam nad tym cały dzień. :O


    :zly: sorry, że taka minka, ale kurcze, mnie torchę denerwują systemy szablonów. Ja wykonałem szablon, tak jak ty. Mam tablice $skin, w której są zmienne i je echuje w likach *.tpl, które includuje Niby prosty pomysł, a pozwala budować szablony. Oczywiście, że z deka zamula skrypt, ale jak mam patrzeć na Smarty(300KB), to mi się, aż odechciewa
    MVC jest jedynie jednym z wzorców, przeznaczonym dla skryptów opartych głównie na klasach. F3Site jest pisany strukturalnie. Nie jest prawdą, że w tym przypadku tworzenie dodatków lub praca grupowa są niemożliwe lub trudne. To zależy głównie od struktury i przejrzystości kodu. Dobrym przykładem oddzielenia wyglądu od struktury jest system szablonów PhpBB (nie chodzi tu o widok i model). Pomimo swej obszerności strony nie składają się długo. PunBB również coś podobnego stosuje - tyle że kod jest lekki (duży +).

    Ewentualną zmianę budowy zostawiłem na później, choć może zrobię to wcześniej, o ile będę miał przekonanie do jednej z metod. Jeśli potrzebny jest dostęp do nagłówków, aktualnie można skorzystać z request.php, przeznaczonego m. in. do AJAX-a. Jest pewne, że pojęcie "wtyczki" musi istnieć ze względu na potrzebę ich instalacji i usunięcia. Są 2 metody z kilkoma możliwościami.

    Załóżmy, że skórki zawierają {content}, {date}, itp.

    Zaczynając od index.php:
    - treść modułów jest buforowana na dysku jak w PunBB - moduły być może nie martwią się o wyświetlenie szablonu
    - LUB: skórka dzielona na 2 części
    (explode('{content}',file_get_contents('body.php')), najpierw
    wywoływana pierwsza, a potem druga
    - LUB: moduły posiadają funkcję, która jest wywoływana przez skórkę lub plik przetwarzający szablon

    Zaczynając od art.php, file.php, itp.
    - moduł wywołuje funkcje Template_header() i Template_footer() - czyli podział skórki
    - bądź jakieś inne rozwiązanie (buforowanie raczej odpada)
    - gorzej z wtyczkami, które albo muszą dołożyć swój plik do głównego katalogu, albo być dołączane z index.php

    Nie będę się więcej rozpisywał. Co możecie doradzić w tym przypadku? Nie będę stosował MVC - stawiam na szybkość. Jednak o szablonach muszę rzeczywiście pomyśleć - dobry kod nie spowolni skryptu.

    - - - - -

    Skrypt przeznaczony jest głównie dla wolniejszych serwerów. Stawiam an szybkość. Co tu mam więcej do wyboru niż:

    Pozostać tak, jak jest
    Bazowy: index.php (skórka dołącza plik, który dopiero wybiera moduł)
    Niezależne od index.php są: login, request (AJAX i inny kod bez szablonu), admin. Zaletą jest, że moduły i wtyczki nie muszą się martwić o wyświetlenie szablonu.
    Zmiana tytułu niemożliwa.

    Buforowanie treści
    Albo podobne kombinacje. Zwiększy się zużycie RAM-u (znacznie przy dużym artykule + kod HTML z wieloma komentarzami).
    Bazowy plik: index.php (oprócz admina, logowania...)
    Zmiana tytułu i dodanie kodu do HEAD możliwe.

    Rozdrobnienie się na 2 pliki
    Czyli - 1 dołączany przed <html>, a drugi - przez skórkę. Na początku można pomyśleć - dla różnych baz inne zapytania - ale nie... Będzie dużo powtarzania kodu (bo tam nieraz byłaby większość mechanizmu modułu). Rozwiązanie powinno się najmniej różnić szybkością od pierwotnego, lecz jest też wada - rozdrobnienie nawet przy mniejszych modułach.

    Buforowanie początku
    Od <html> aż do momentu, gdzie ma się wyświetlić treść modułu. Buforowane byłoby lewe menu (lub 2, jak ktoś sobie zażyczy mieć je po lewej stronie). Wtedy tytuł można zmienić.

    Początek funkcją
    Powiedzmy - funkcja setTitle() ustawia tytuł i wyświetla górę szablonu (z lewym menu lub dwoma - podobnie jak wyżej). Treść nie jest już buforowana.

    Rozpoczynanie od pliku modułu
    Czyli od art.php, file.php, itp. - to byłyby pliki bazowe w głównym katalogu (jak w PHP-Fusion, jPortal, PunBB). Wywołują one najpierw górną część szablonu, a potem dolną.

    W teorii można wymyślić różne metody, a w praktyce może być inaczej. Którą z powyższych (lub inną) uważacie za najlepszą? Ważne, by skrypt był szybki, zużywał mało RAM-u i CPU (I/O również zminimalizowane), a twórcy wtyczek nie pogubili się.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • mandragora32.opx.pl
  • ďťż
    Wszelkie Prawa ZastrzeĹźone! chomiki Design by SZABLONY.maniak.pl.