smarty, ogólna istota

1

Mógłby mi ktoś wytłumaczyć ogólną istotę zastosowania szablonów (SMARTY)?
Czy mam wczytywać MENU i podstrony przez GETa i treść z MySQL? To jest ogólne założenia smartów?
Jak mam prostą stronę (index.php), a na niej, menu:
HOME | LOGOWANIE | REJESTRACJA | POMOC | FAQ | POMOC etc
To czy lepiej porobić dla każdego z tych odnośników katalog? czy wszystko wczytywać przez $_GET, tzn pliczki*.tpl i bazować tylko na jednym pliku z index.php ?? Serwis będzie dosyć mocno rozbudowany, sporo kont z różnymi rangami. Spora baza danych i ewolucji na niej wykonywanych. Czy może ktoś mi polecić jak rozwiązać ten problem, z założenia banalny, ale przy dużych ilościach plików i kodu php może być to falatle w skutkach. Jak to zrobić, żeby poźniej samemu się nie zgubić?

Np potworzyć katalogi do menu, katalog home, logowanie, rejestracja,pomoc...itd a poźniej w każdym katalogu już pliczki z kodem php, które będą używane wyłącznie w tym katalogu i już podawane przez GET'a? Tak mi wydaje się rozsądnie. Niż żeby był jeden pliczek index.php, a poźniej cała masa reszty podstron podawana będzie przez GETa, np
index.php?strona=1, index.php?strona=2,index.php?strona=3... itd do 100 :D

Więc moje pytanie jak ominąć chaos i co za tym idzie jak zapanować nad wszystkimi pliczkami z kodem php, jak: logowanie, rejestracja, dodawanie, edycja w bazie itd...

Proszę o wszelkie rady. Proszę o pisanie metod na jakich opieracie swoje projekty (drzewo katalogowe) itd :) pozdrawiam

0

Smarty to technologia szablonów - frontendu. Nie musisz cisnąć nie wiadomo ilu dziwnych podstron, dla menu możesz zrobić sobie na przykład:

{foreach from=$menu item=row}
<a href="{$row.link}">{$row.name}</a> | 
{/foreach}

W ten sposób zawrzesz menu w jednym pliku i bezpośrednio jego zawartość nie będzie powiązana z szablonem. Po prostu z poziomu PHP callujesz:

$smarty->assign('menu', $jakas_tablica_z_elementami_link_i_name);

Ja jak coś kleję mam wszystko rozbite w ten sposób:

//overall_header.tpl
<html>
<head>
</head>
<body>
<!-- jakieś menu -->
{include file=menu.tpl}

<!-- tutaj główna treść -->
//overall_footer.tpl
<!-- Koniec głównej treści -->
{include file=footer.tpl} <!-- stopka -->
</body>
</html>

I potem budując podstronę robisz sobie tylko np.:

//view_article.tpl

{include file=overall_header.tpl}
treść podstrony
{include file=overall_footer.tpl}

I tyle. Ewentualnie można potem optymalizować podobne szablony łącząc je w jeden.

Stron nie trzeba kategoryzować po ID, ja mam w postaci stringów i w indexie przekierowuje do odpowiedniego modułu i calluje w nim funkcję init odpowiadającą wybranej funkcji, np.:
http://example.com/artykul-obejrzyj/24-nielegalna-ubojnia-krow.html
Cały link jest przepisywany do tej postaci:
http://example.com/index.php?module=artykul&action=obejrzyj&param=24
I system odpowiednio chodzi po modułach i funkcjach...

0

Chyba już rozumiem :)
Czy pisząc taki kod będzie dobrze:
index.tpl

 
{include file="header.tpl" title=foo}

{include file="./home/home.tpl"} //tutaj zmieniam tylko środek strony, który jest podawany przez GETa

{include file="footer.tpl"}

Mam taki link np:
www.example.po/index?strona=login
Kod w php:

if (empty($_GET['strona'])){
$strona == 'home';
$smarty->assign('strona',$strona);
}else if($_GET['strona'] == 'login'){
$strona == 'login';
$smarty->assign('strona',$strona);

I do tego kod w pliczku *.tpl

{if $strona == 'home'}
{include file="./home/home.php"}
{else if $strona == 'login'}
{include file="./logiowanie/login.php"}

Czy taki kod może być? czy jest trochę za amatorski? Jeśli chodzi o przekazywanie stron przez $_GETa?
Później tylko przerobiłbym URLe na przyjazne linki, żeby jakoś ładniej wyglądały i chyba powinno być już lepiej :)

0

:)

0

NIE! Absolutnie nie powinno być takich warunków w szablonie. Do każdej podstrony zrób sobie po prostu szablon:

kontakt.tpl

{include file="header.tpl" title=foo}

Kontakt - cośtam cośtam

{include file="footer.tpl"}

glowna.tpl

{include file="header.tpl" title=foo}

Strona główna - bla bla

{include file="footer.tpl"}
0

To rozumiem, ale nie wiem jak później odwoływać się do np <a href="kontakt"... ??
Przez GETa? Jeśli tak to jak? Jeśli moja metoda jest zła :( ? Proszę o podpowiedz...
zamiast zmieniać tylko środek, mam zmieniać całą stronę?? Przecież takie rzeczy, które się
nie zmieniają jak header, footer, menu itd to po co ładować je od nowa? Nie lepiej tylko raz to wczytać,
a poźniej tylko pliczki includować przez geta z odpowiednim kodem do środka?

0

Ale szablony nie powinny być zależne od kodu w systemie. Nie powinno być takich konstrukcji w warstwie widoku. Do podstron możesz się odwoływać przez geta, tak jak pokazywałem.

0

rozumiem, dlatego podałem kod, czy mógłbyś mi podać swój kod tak po krótce jak przekazujesz przez GETa te podstrony? Czy jak masz powtarzające się elemety jak pisałem, stopka,nagłowek to tez tylko środek zmieniasz? jak tak to jak ? opisz chociaż ogólną zasadę...

0

do kazdego pliczka *.tpl masz osobny pliczek z kodem *.php? Czy wszystko obsługujesz w index.php, tylko dołączasz odpowiednią funkcje?

0

Nie, optymalizuje to stopniowo. Na przykład jak mam moduł newsów i edytor do niego, to dodawanie i edytowanie newsa jest zawarte w jednym. Sam moduł news zajmuje tylko jeden plik (jeśli jest mały) który jest podzielony na konkretne akcje (edycja/dodawanie/usuwanie). Oczywiście każdy może mieć swoją własną filozofię. Ja nic nie narzucam, tylko sposób wrzucania warunków do modułów w index.tpl jest zły. Następuje pomieszanie warstw, a po to się wydziela widok żeby tam były sprawy czysto graficzne. Zero obsługi modułów/akcji/wtf, wszystko co tam idzie ma być już zmielone.

0

a jakby zrobił to w ten sposób ze w pliku .php pobierasz zmienną Get, przekazujesz ją do tpl

$klucz = $_GET['id'];
$smarty->assign("klucz", $klucz);
a pozniej w tpl
{include file="$klucz.tpl"}
i nie pisac juz zadnych warunków if cos tam w .tpl ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1