Nie przekazują się, ponieważ nie utworzyłeś jeszcze obiektu parsera. Zobacz: masz linijkę:
Kod
include "admin_mod/admin_$name.php";
A teraz popatrz, w którym miejscu wywołujesz to:
Kod
$smarty = new Smarty_Setup;
Jest to parę linijek niżej, zatem najpierw dołączasz i wykonujesz szablon, który próbuje dodać dane do nieistniejącego parsera, który tworzysz dopiero po fakcie. Zasada jest prosta: wszelkie inicjacje, setupy itd., które ustawiają rzeczy niezbędne modułowi do pracy, muszą wykonać się przed jego uruchomieniem, a nie po nim

.
Jeszcze ad. zarządzania ścieżkami w skrypcie. Kodując je na sztywno, bardzo szybko się w nich pogubisz. Ja stosuję bardzo proste i skuteczne rozwiązanie. Obieram sobie zawsze pewien katalog i podaję wszystkie ścieżki względem niego. Katalogiem tym jest najczęściej katalog główny projektu. W Twoim przypadku wyglądałoby to następująco: Twoim katalogiem głównym jest
Smarty. Jeżeli masz skrypt w katalogu
smarty/alko/modules/index.php i chcesz z jego poziomu dołączyć
smart/alko/setup.php, nie piszesz
../setup.php, tylko
../../../alko/setup.php (najpierw wyskakujemy do wnętrza głównego katalogu i dopiero z niego schodzimy z powrotem w głą

. Na początku to wygląda na mocno kombinowane, ale to głównie dlatego, że strasznie głęboko zagrzebałeś pliki, które internauci będą uruchamiali z przeglądarki

.
Ścieżek nigdy nie koduję w skrypcie bezpośrednio. Zawsze tworzę jeden plik zwany
common.php albo
bootstrap.php, który na początku tworzy stałe ze wszystkimi ścieżkami względem głównego katalogu, ładuje wszystkie potrzebne pliki i tworzy obiekty. Dopiero po jego wykonaniu sterowanie wraca do modułu czy czego tam chcesz.
Przykładzik. Mamy główny katalog w
/projekt, zaś z przeglądarki jest dostęp do katalogu
/projekt/www. Bezpośrednio w katalogu głównym mamy bootstrap.php:
Kod
<?php
define('DIR_WWW', DIR_MAIN.'www/');
define('DIR_LIBS', DIR_MAIN.'libs/');
define('DIR_SMARTY', DIR_LIBS.'smarty/');
define('DIR_TEMPLATES', DIR_MAIN.'templates/');
// i tak jeszcze trochę
require(DIR_LIBS.'biblioteka1.php');
require(DIR_LIBS.'biblioteka2.php');
require(DIR_SMARTY.'smarty.class.php');
// tworzymy obiekty
$tpl = new Smarty_Setup;
$costaminnego = new CosTamInnego;
?>
Teraz w
projekt/www/ mamy
index.php:
Kod
<?php
// Pokazujemy, jak z pliku index.php trafić do katalogu głównego
define('DIR_MAIN', '../');
require(DIR_MAIN.'bootstrap.php');
// W tym momencie mamy zainicjowane wszystkie biblioteki
// Oraz mamy stałe dające nam łatwy dostęp do wszystkich katalogów.
// mozemy wiec przystapic do generowania zawartosci strony
require(DIR_MODULES.'jakis_modul.php');
$tpl -> display('o_matko_to_dziala.tpl');
?>
Tak więc podsumowując:
1. Plik index.php oraz każdy inny uruchamiany z przeglądarki musi wiedzieć dwie rzeczy: gdzie jest bootstrap.php oraz jak trafić do katalogu głównego.
2. Bootstrap.php musi wiedzieć, gdzie leżą wszystkie pliki, patrząc z głównego katalogu.
3. Index.php uruchamia bootstrapa i mówi mu, gdzie się znajduje.
3. Bootstrap.php w odpowiedzi przekazuje mu informacje o położeniu wszystkich innych plików uwzględniające lokalizację index.php, a także tworzy środowisko do pracy.
Są też inne techniki, np. z wykorzystaniem include_path.