jak načíst jinou šablonu do @layout.phtml

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
muflix
Člen | 92
+
0
-

Dobrý den, vytvořil jsem si pomocí netbeans nette pluginu nový projekt ze zipu
Nette Framework 2.0-alpha2 pro PHP 5.3
a v něm jsem si vytvořil do složky presenters

HomepagePresenter.php

<?php
class HomepagePresenter extends BasePresenter
{
	public function renderDefault()
	{
		$this->template->message = 'Homepage';
	}
}

a

ContactPresenter.php

<?php
class ContactPresenter extends BasePresenter
{
	public function renderDefault()
	{
		$this->template->message = 'Contact';
	}
}

potom k těmto presenterům mám ve složce templates šablony

Homepage/default.phtml

{block content}
Vítejte na stránkách.

Contact/default.phtml

{block content}
Kontakty..

celý projekt je ve složce test.dev ke kterému má přístup apache, takže po zadání url do browseru
http://test.dev/document_root/
se mi zobrazí moje hlavní stránka (@layout.latte jsem přejmenoval na @layout.phtml, kvůli zvýraznovači syntaxe) ve které je includnut #content, takže se vypíše
‚Vítejte na stránkách.‘

to je v pořádku, ale rád bych si teď vypsal Kontakty.. tak jsem do hlavní stránky (@layout.phtml)vložil

<div id="navigace">
    <ul>
       {foreach $menuItems as $id => $item}
         <li><a href="{plink $id}">{$item}</a></li>
       {/foreach}
    </ul>
</div><!-- navigace -->

a upravil presenters/BasePresenter.php

<?php
abstract class BasePresenter extends Nette\Application\Presenter
{
    public $oldLayoutMode = FALSE;
    public function beforeRender()
    {
        $this->template->menuItems = array(
            'Homepage:' => 'Domů',
            'Contact:' => 'Kontakty',
        );
    }
}

změny uložím a znovu načtu stránku, odkaz domů odkazuje na /document_root/ a funguje
a odkaz Kontakty odkazuje na /document_root/contact ale nefunguje. Browser hodí 404 error.

Moje otázka tedy je, jakým způsobem mohu zprovoznit proklikávání mezi šablonamy.
V návaznosti na to by mě také zajímalo jestli mohu smazat z url /document_root/ abych zadal pouze http://test.dev a přesměrovalo mě to na @layout.phtml, nyní se mi pouze vypíše obsah adresáře, de mi jen o to, jestli jsem si to nějak špatně nenakopíroval nebo se to potom řeší routováním.

část dokumentace i tutoriály ‚quick start‘ nebo ‚tvorba statického webu‘ jsem si přečetl, ale není mi to z toho úplně jasné. Děkuji

h4kuna
Backer | 740
+
0
-

Ahoj,

když ti to píše 404 tak nemáš zaplou laděnku

  1. zapni si laděnku v bootstrap.php Debug::enable(Environment::DEVELOPMENT); a $application->catchExceptions = FALSE; měl by jsi vidět blueScreen bude mít jinou červenou
  2. napiš požadovanou url do prohlížeče a řekne ti jaký presenter a kde má být umýstěný
  3. zmačkní F5 a řekne ti kde máš vytvořit šablonu
  4. routy zatím nehrajou roli

pár divných věcí:

  • píšeš že máš document_root ale Nette 2.0 má toto změněno na www tzn jsis dělal podle návodu?
    • v balíčku je sandbox a funkčních i pár stránek
  • public $oldLayoutMode = FALSE; to je pro tvoje potřeby?
  • myslím že *.phtml je podporované ale je deprecated tzn používej *.latte, IDE má možnost zapnutí zvýraznění syntaxe i pro jiné koncovky souborů

V návaznosti na to by mě také zajímalo jestli mohu smazat z url /document_root/ abych zadal pouze http://test.dev a přesměrovalo mě to na @layout.phtml, nyní se mi pouze vypíše obsah adresáře, de mi jen o to, jestli jsem si to nějak špatně nenakopíroval nebo se to potom řeší routováním.

toto neřeší nette

  1. nasměruj DocumentRoot serveru přímo do document_root
  2. vytvoř si virtual host + a)
  3. ja používám že mi všechno jede na localhost/{názav projektu}/www není tam opruz s a) a b). Na produkčních serverech www je DocumentRoot
muflix
Člen | 92
+
0
-

Aha, to znamená, že mám špatný skeleton(nově sandbox). s .latte si to přenastavím v IDE a $oldLayoutMode = FALSE; neni pro moje účely, to jsem tam měl z návodu.. tak děkuji :)

muflix
Člen | 92
+
0
-

Tak jsem stáhl sandbox z https://github.com/nette/sandbox zprovoznil ho (získal jsem uvítací stránku).
před tím jsem také upravil vhost document root do /www
ale mám opět totožnou chybu.
když kliknu na odkaz kontakty tak mě to přesměruje na
test.dev/contact (mám ContactPresenter.php a templates/Contact/default.latte) kódy stejné viz výše.
a Browser odpoví

Not Found
The requested URL /contact/ was not found on this server.

laděnka je nastavená na false což je myslím i default.. a snad mi tam i skočila už nevím kvůli čemu.

nicméně mám presenter ErrorPresenter.php a 404.latte a to se neaplikuje nějak :o
tak nevím, trochu jsem prohlížel i ty demo příklady, ale menu jsem tam nenašel.

edit: nemám tedy v presenterech metody actionShow() apod, ale je tam pouze render default což by asi mělo práve vykreslit tu šablonu?

Editoval muflix (30. 1. 2011 20:20)

Bertram
Člen | 75
+
0
-

zkus tuto routu v bootstrap.php

$router[] = new SimpleRouter('Homepage:default');

a pokud ti to bude fungovat chyba bude asi v nastavení souboru httpd.conf

muflix
Člen | 92
+
0
-

Vložil jsem

$router[] = new SimpleRouter('Homepage:default');

pod

$router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');

a pak jsem zkusil puvodni routy zakomentovat, ale v obou případech mi to hlásí

Class 'SimpleRouter' not found

ale odkaz na default mi normálně funguje, nefunguje mi odkaz na contact

Bertram
Člen | 75
+
0
-

Tuto třídu to nenajde zřejmě proto,že používáš verzi s jmennými prostory.

V bootstrap.php doplň pod

use Nette\Application\Route;

toto

use Nette\Application\SimpleRouter;
muflix
Člen | 92
+
0
-

chybu to už nepíše, ale jinak žádná změna
nepomůže ani
$router[] = new SimpleRouter('Contact:default');

muflix
Člen | 92
+
0
-

Tak už se na to přišlo, chyba byla v tom, že jsem neměl v apachi povolený mod_rewrite modul. Diky všem.