Struktura FrontModule a AdminModule

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

Snažím se rozjet tu novou modulovou strukturu.
Mám:

app/presenter/BasePresenter.php

app/presenter/AdminModule/DefaultPresenter.php

app/presenter/FrontModule/DefaultPresenter.php

templates/FrontModule/@layout.phtml

templates/FrontModule/Default.default.phtml

templates/AdminModule/@layout.phtml

templates/AdminModule/Default.default.phtml

Default presentery vypadaji takto:

<?php

class Front_DefaultPresenter extends BasePresenter
{
	public function renderDefault()
	{

	}

}
?>

bootstrap takto

<?php

require LIBS_DIR . '/Nette/loader.php';
require LIBS_DIR . '/Nette/Loaders/RobotLoader.php';
// Step 1: Load Nette Framework
// this allows load Nette Framework classes automatically so that
// you don't have to litter your code with 'require' statements
$loader = new RobotLoader();
$loader->addDirectory(APP_DIR);
$loader->addDirectory(LIBS_DIR);
$loader->register();

// Step 2: Configure environment
// enable Nette\Debug for better exception and error visualisation
Debug::enable(Debug::DEVELOPMENT);

Environment::getSession()->verificationKeyGenerator = FALSE;
// Step 3: Configure application
$application = Environment::getApplication();
$application->catchExceptions = FALSE;

$router = $application->getRouter();


if (function_exists('apache_get_modules') && in_array('mod_rewrite', apache_get_modules())) {
	$router[] = new Route('index.php', array(
		'module' => 'Front',
		'presenter' => 'Default',
	), Route::ONE_WAY);

	$router[] = new Route('<presenter>/<action>/<id>', array(
		'presenter' => 'Front:Default',
		'action' => 'default',
		'id' => NULL,
	));

} else {
	$router[] = new SimpleRouter('Front:Default:default');
}


// Step 4: Run the application!
$application = Environment::getApplication();
$application->run();
?>

Dostávám chybovou hlášku
Cannot load presenter ‚Front:Default‘, class ‚Front_DefaultPresenter‘ was not found in ‚D:\dev\www\top09\www/../app/FrontModule/presenters/DefaultPresenter.php‘.
nějak to hledá jinde než by mělo…

Pak bych se chtěl ještě zeptat jak nastavit routu aby kdyz zadam root/admin aby se mi zobrazil modul admin ?

Díky za jakoukoli pomoc hledal jsem na fóru ale všude je to po kouskách a nikde není kompletní řešení tak si myslím že by tohle mohlo pomoct více lidem..

Editoval pjoter (10. 1. 2010 15:49)

Aurielle
Člen | 1281
+
0
-

V routě bych zkusil změnit

'presenter' => 'Front:Default'

na

'presenter' => 'Default',
'module' => 'Front',

Editoval gmvasek (10. 1. 2010 15:54)

pjoter
Člen | 118
+
0
-

Ted to mam takhle: admin funguje ale front ne. Kdyz zadam do url front hodi to error: Cannot load presenter ‚Front:Default‘, class ‚Front_DefaultPresenter‘ was not found in ‚D:\dev\www\top09\www/../app/FrontModule/presenters/DefaultPresenter.php‘. – nechapu nekde musim mit nadefinovanou jinou cestu.

<?php
$router[] = new Route('admin/<presenter>/<action>/<id>', array(
'module' => 'Admin',
'presenter' => 'Default',
'action' => 'default',
'id' => NULL
));

$router[] = new Route('<presenter>/<action>/<id>', array(
'module' => 'Front',
'presenter' => 'Default',
'action' => 'default',
'id' => NULL
));

?>
Ondřej Mirtes
Člen | 1536
+
0
-

Máš ty Presentery a templaty ve špatných umístěních :) Přesuň si je do správných, podle těch chybových hlášek.

pjoter
Člen | 118
+
0
-

Tak jsem zmenil tu strukturu podle te chybove hlasky a ted dostavam warningy:
Warning: include(\app\presenters\AdminModule\DefaultPresenter.php) [function.include]: failed to open stream: No such file or directory in \libs\Nette\Loaders\LimitedScope.php on line 74

Warning: include() [function.include]: Failed opening ‚\app\presenters\AdminModule\DefaultPresenter.php‘ for inclusion (include_path=‚.;C:\php5\pear‘) in \libs\Nette\Loaders\LimitedScope.php on line 74

Editoval pjoter (10. 1. 2010 16:12)

Ondřej Mirtes
Člen | 1536
+
0
-

Smaž temp.

pjoter
Člen | 118
+
0
-

funguje díky

ibru
Člen | 9
+
0
-

Můžu si dovolit toto vlákno znovu oživit? Mám možná podobný problém. Také používám moduly.

Nette mi hlásí chybu Page not found. Missing template '…/FrontModule/templates/Recipe/default.phtml'.

Když šablonu přemístím do struktury, jak mi říká chyba, tak to funguje, jenže já chci mít šablony v /templates/FrontModule/... nikoliv v /FrontModule/templates/...

mám jednu routu

<?php
$router[] = new SimpleRouter(array(
    'module' => 'Front',
    'presenter' => 'Recipe',
    'action' => 'default',
    'id' => NULL,
));
?>

Jde to nějak pozměnit, kde nette vyhledává šablony nebo se holt musím přizpůsobit? Děkuji.

srigi
Nette Blogger | 558
+
0
-

chci mít šablony v /templates/FrontModule/... nikoliv v /FrontModule/templates/...

Skus do BasePresenter.php, z ktoreho dedis presenteri pridat riadok

<?php
public $oldModuleMode = true;
?>
ibru
Člen | 9
+
0
-

Skus do BasePresenter.php, z ktoreho dedis presenteri pridat riadok

dekuji za radu, bohuzel to ale nepomohlo.

Ondřej Brejla
Člen | 746
+
0
-

Hmmm…co překrýt formatTemplateFiles()?

ibru
Člen | 9
+
0
-

heh, diky za tip. Malem bych zapomel, ze v OOP existuje neco jako dedicnost a polymorfismus.
Skoda jen, ze z dokumentace neni jasne, co tato metoda dela, jake jsou jeji parametry, ani jaka by mela byt navratova hodnota.

Filip Procházka
Moderator | 4668
+
0
-

je to ovšem jasné ze zdrojového kódu do kterého není zakázané nahlížet :)

formatTemplateFiles()

ibru
Člen | 9
+
0
-

zakazane to neni, ale je to krajne nepohodlne a taky to uzira dost casu. Ale me to jen prospeje kouknout do zdrojaku chytrejsich, takze to beru pozitivne.
Problem solved.