Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework]System szablonów, Menu (base url)
Forum PHP.pl > Forum > PHP > Frameworki
ShadowD
Walczę z Zend'em na wiele sposobów już od dłuższego czasu to świetny fw, ale dróg do jednego celu jest wiele, a sama dokumentacja jest dziurawa jak ser szwajcarski - niestety.

Więc tak, moja aplikacja dąży do tego by zostać pełnoprawnym cms'em i mam problem z ogarnięciem systemu szablonów, opiszę co mam:
Plugin pobiera nazwę szablonu, dodaje ścieżki do wszystkich katalogów które posiadają jakieś ważne informacje o wyglądzie strony - http://screenup.pl/?l=OIXH53G takie rozwiązanie wydaje mi się właściwe - jak się mylę może ktoś mnie wyprowadzi z błędu, ofc wszystkie pliki poza katalogiem "files" są zablokowane dla http. Można powiedzieć że to pytanie to takie utwierdzenie się czy czegoś nie przekombinowałem.

Głównym problemem są ścieżki, style i obrazki muszą mieć dokładną ścieżkę template/kajakisternik/file/style/top.css, więc automatycznie sobie pomyślałem by dodać do baseUrl() przedrostek - super fajnie wszyetko działa tak jak powinno, w szablonie wystarczy użyć baseUrl(style/top.css). Teraz przyszedł czas na zabawę z menu - Zend_Navigation jednak linki są generowane z przedrostkiem linku do stylów - jak temu zapobiec bądź jaką drogę obrać by pozbyć się tych problemów?

Ponadto mam router (jedne przykładowy):
  1. $router->addRoute('news', new Zend_Controller_Router_Route_Regex(
  2. 'news/?([a-zA-Z0-9\-_]*)/?([a-zA-Z0-9\-_]*)',
  3. 'controller' => 'news',
  4. 'action' => 'list'
  5. ),
  6. 1 => 'category',
  7. 2 => 'name'
  8. ),
  9. 'news/%s/%s'
  10. ));


Jak chodzi o przepisywanie adresów na kontrolery/akcje działa super, ale w drugą stronę zawsze wymaga wszystkich argumentów, a założenie jest takie by to nie było konieczne, samo news lub news/nazwaKat powinno być poprawne - znów mamy same problemy typu jak tego użyć. ;]

Może ktoś znajdzie chwilę czasu by mnie naprowadzić na rozwiązanie, być może idę wogóle złą drogą i na siłę pcham się w kłopoty.
Fluke
Patrząc na twoją strukturę katalogową mam podobnie ale "template" włożyłem oddzielnie w każdy moduł.
Czyli np: mam stronę podpiętą do cms "default" oraz panel "admin" i tam mam katalog templates. Wydaje mi się to jak na razie dobre rozwiązanie ponieważ jak robię moduł dla admina to wrzucam tylko katalog admin i wszystko mam poukładane w kupę.

A co do tematu to stwórz sobie helper np: cssPath albo jsPath który dziedziczy Zend_View_Helper_BaseUrl i tam wygeneruj sobie odpowiednie podstawowe adresy. Albo zawsze w bootstrapie możesz sobie pobrać obiekt view i przypiać do zmiennej ($view->assign("cssPath", $cssPath))

Pozdrawiam smile.gif
ShadowD
Admin nie będzie mieć takiego systemu templatek bo i niby po co, a moduły wykorzystuję w obrębie 1 aplikacji np. blog + sklep, oba mają tą samą szatę więc idzie mi tak na rękę - dzięki za utwierdzenie, że to rozsądne wyjście bo już zaczynam się gubić w tym co jest prawidłowe, nie lubię dokumentacji zend'a jest tragiczna. ;]

Rozumiem, że bez jakiegoś dodatkowego kodu się nie obejdzie, może stworzyć helper widoku urlTemplate('image/obrazek.jpg') i w nim pobierać ścieżkę do katalogu i doklejać, a baseUrl zostawić w spokoju? Myślałem że to koromysło właśnie do tego służy, ale jak widać wielkie głowy nie wpadły na pomysł chęci podziału linków do obrazków/stylów/skryptów, a hiperłączy - po prostu męczą mnie już rozwiązania które obchodzą problem chciał bym by funkcje ~url() olewały parametr baseUrl()...

Rozwiązanie, nie wiem czy ostateczne i najlepsze, ale pomaga:
  1. <?php
  2.  
  3. class Ss_View_Helper_FileUrl extends Zend_View_Helper_Abstract
  4. {
  5. public function FileUrl($urlToFile)
  6. {
  7. $config = Zend_Registry::get('config');
  8.  
  9. return 'template/'.$config->templateName.'/file/'.$urlToFile;
  10. }
  11. }


W .ini:
resources.view.helperPath.Ss_View_Helper = APPLICATION_PATH "/library/Ss/Helpers"
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.