Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][Smarty] Meta title - swith lub inne rozwiązanie
Forum PHP.pl > Forum > Przedszkole
ar4
Witam,
mam problem. Strona na wykonana w smarty.
W pliku _head.tpl mam tak określone meta title:
  1. <title>{$title|default:'Nazwa strony - coś tam jeszcze'}</title>

ten plik jest includowany: {include file=_head.tpl} w pliku index.tpl
Teraz na każdej podstronie mam taki sam tytuł jak na stronie głównej.
Jak rozwiązać ten problem, aby na każdej podstronie był inny tytuł.
Myślałem o tym, aby dodać jakiś swith ale jak go i gdzie go dodać to nie wiem.
Czy ktoś może pomóc rozwiązać ten problem.
Adres podstron jest przyjazny czyli np. domena.pl/kontakt itp.
Proszę o pomoc...
nospor
No to na kazdej podstronie ustawiaj inną wartosc dla zmiennej $title
$ObiektSmartiego->assign('title','Oddzielny tytul na kazdej podstronie');
Pyton_000
{include file=_head.tpl title="Kurczaczki na wybiegu"}
nospor
@Pyton w Twoim sposobie ten tytul nadal bedzie staly. Przeciez on to includuje w index.tpl
Pyton_000
Ale nie wiemy czy index jest stały wink.gif

Jeżeli index jest stały i tylko wkłada content do tego to wystarczy to co napisałeś smile.gif Ja pokazałem inny sposób. Oo.. wink.gif
ar4
Zgadza się, plik index ma swoją stałą konstrukcję, a z innych plików jest wrzucana tylko treść.
Mam rozumieć, że rozwiązaniem jest to:
  1. $ObiektSmartiego->assign('title','Oddzielny tytul na kazdej podstronie');

tylko jak wstawić tytuł np. dla podstrony kontakt?

Plik kontaktu to:
  1. {strip}
  2. <div class="dp">
  3. <div class="fk">
  4. <div class="fkl">
  5. <h1>KONTAKT</h1>
  6. {$opis}
  7. </div>
  8. <div class="fkr">
  9. <h1>Formularz kontaktowy</h1>
  10. {if isset($komunikat) && !empty($komunikat) }
  11. <p style="color: #007400">{$komunikat.tresc}</p>
  12. {/if}
  13. <form action="" method="post">
  14. <ul class="form">
  15. <li>
  16. <label>
  17. <em>imię *</em>
  18. <input type="text" value="{if isset($dane.imie)}{$dane.imie}{/if}" name="imie"/>
  19. </label>
  20. </li>
  21. <li>
  22. <label>
  23. <em>nazwisko *</em>
  24. <input type="text" value="{if isset($dane.nazwisko)}{$dane.nazwisko}{/if}" name="nazwisko"/>
  25. </label>
  26. </li>
  27. <li>
  28. <label>
  29. <em>telefon *</em>
  30. <input type="text" value="{if isset($dane.telefon)}{$dane.telefon}{/if}" name="telefon"/>
  31. </label>
  32. </li>
  33. <li>
  34. <label>
  35. <em>e-mail *</em>
  36. <input type="text" value="{if isset($dane.email)}{$dane.email}{/if}" name="email"/>
  37. </label>
  38. </li>
  39.  
  40. <li>
  41. <label>
  42. <em>treść *</em>
  43. <textarea name="pytanie" cols="10" rows="10">{if isset($dane.pytanie)}{$dane.pytanie}{/if}</textarea>
  44. </label>
  45. </li>
  46. <li>
  47. <button type="submit"></button>
  48. </li>
  49. </ul>
  50. </form>
  51. <p style="color: #C49D79; font-size:8px">tresc</p>
  52. </div>
  53. </div>
  54. <div class ="fkb"></div>
  55.  
  56. </div>
  57. {/strip}
nospor
Cytat
Zgadza się, plik index ma swoją stałą konstrukcję, a z innych plików jest wrzucana tylko treść.
Mam rozumieć, że rozwiązaniem jest to:
Tak.

Jak wstawic? No chyba kazda podstrona ma rownież swoj kod php czyż nie? Wiec w tym kodzie wstawiasz to co ci podalem
ar4
No właśnie chodzi o to, że każda podstrona ma tylko html
Z tego co mi się wydaje to powinno to być jakoś umieszczone w pliku _head.tpl
czyli jak mamy adres strony /kontakt to wstawiamy taki tytuł, itd.

nospor
Gdzies tam w kodzie php masz, ktory includuje daną stronę. I linijke wczesniej masz wstawic kod co podalem

od biedy w head dac warunki i w zależnosci od strony wstawiac wlasciwy tekst zamiast $title
ar4
Czy to chodzi o plik index.tpl ?
Jego zawartość wygląda tak:
  1. {strip}
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xml:lang="pl" xmlns="http://www.w3.org/1999/xhtml">
  4.  
  5. {include file=_head.tpl}
  6.  
  7. <body {if $controller eq 'Index'}class="bg1"{elseif $controller eq 'NaszeRealizacje'}class="bg2"{elseif $controller eq 'BudowaDomowZBali'}class="bg3"{elseif $controller eq 'Kontakt' or $controller eq 'PosrednictwoInwestycyjne'}class="bg4"{/if}>
  8.  
  9. {if isset($konfig.db.sqlDebug) && $konfig.db.sqlDebug == true}
  10. <div id="sqlDebug">
  11. Wykonywane zapytania na stronie:<br/>
  12. {if isset($sqlDebug)}{$sqlDebug}{/if}
  13. </div>
  14. {/if}
  15.  
  16. {include file=_menu.tpl}
  17.  
  18. {include file=$subpage}
  19.  
  20. {include file=_stopka.tpl}
  21.  
  22. {if !isset($smarty.cookies.cookie_read)}
  23. {include file='_cookie.tpl'}
  24. {/if}
  25.  
  26. </body>
  27. </html>
  28.  
  29. {/strip}
nospor
{include file=$subpage}
Gdzies tam, w kodzie PHP a nie szablonie smarty, ustalasz zmienną $subpage. Tam masz dojść.
ar4
Znalazłem...
Zmienna znajduje się w pliku Action.php jego funkcja wygląda tak:
  1. public function display( $layout = '_index.tpl' ){
  2.  
  3. $this->smarty->assign( 'modul', $this->modul);
  4. $this->smarty->assign( 'controller', $this->controller);
  5. $this->smarty->assign( 'action', $this->action);
  6. $this->smarty->assign( 'params', $this->params);
  7. $this->smarty->assign( 'konfig', $this->konfig);
  8.  
  9. if( empty( $this->subpage ) ){
  10. $this->smarty->assign( 'subpage', strtolower( $this->controller ) . DS . $this->action . '.tpl' );
  11. }
  12. else{
  13. $this->smarty->assign( 'subpage', $this->subpage . '.tpl' );
  14. }


Jak zatem dodać kod podany przez Ciebie, aby to zadziałało?
nospor
  1. if( empty( $this->subpage ) ){
  2.  
  3. $this->smarty->assign( 'subpage', strtolower( $this->controller ) . DS . $this->action . '.tpl' );
  4.  
  5. }
  6.  
  7. else{
  8. $title = null;
  9. switch ($this->subpage){
  10. case 'kontakt':
  11. $title='blabla';
  12. break;
  13. case 'cosinnego':
  14. $title='cos innego';
  15. break;
  16. }
  17. if ($title)
  18. $this->smarty->assign('title',$title);
  19. $this->smarty->assign( 'subpage', $this->subpage . '.tpl' );
  20.  
  21. }
ar4
Nie wywala błędów, ale i nie zmienia się tytuł...
nospor
ps: oczywiscie zalozylem, ze $title to ogolne jest przypisane gdzies wczesniej. Jesli jest później, to kod co podalem masz wstawic za tamto przypisanie
ar4
Obawiam się, że trochę się zamieszałem...
Czy teraz mam znaleźć, gdzie jest tworzona zmienna $title i tam wrzucić? Dobrze zrozumiałem?
nospor
Najwyraźniej tak smile.gif Widac ona jest tworzona później niż kod co tu pokazales i nadpisuje tytul. Ewentualnie znajdz kod gdzie ona jest tworzona i ją wykomentuj i nic wiecej juz nie rob
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.