úprava – chybné routování v nette

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

Zdravím, chci mít adresy ve tvaru www.web.cz/neco. Routování mám

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

ale do adresy se mi dostává homepage a pak mám /homepage/o-nas. Mohl by mi někdo poradit jak rout upravit. Děkuji

pepakriz
Člen | 246
+
0
-

Jestli chceš mít adresy ve tvaru www.web.cz/<action>, pak:

$container->router[] = new Route('<action>[/<id>]', 'Homepage:default');

což tě ale omezí pouze na jeden presenter.

JuniorJR
Člen | 181
+
0
-

Další možnost je udělat pro každou stránku vlastní presenter. Záleží na logické struktuře tvého webíku.

Taps
Člen | 169
+
0
-

Přesně o to mi jde, chtěl bych mít pro každou stránku vlastní presenter. Pak mi mělo stačit v presenteru jen níže uvedené že ? Akorát ještě přemýšlím nad tím jak optimálně vyřešit strukturu když budu mít jen presentery a viewy. Texty nebudu tahat z databáze. Na webu bude jeden kontaktní formulář, který bude informace odesílat na mail

class MujPresenter extends BasePresenter
{


public function renderDefault()
{



}


}\--
Zdeno1981
Člen | 116
+
0
-

Jesti tvoříš statiský web, tak si vystačíš s jedním presenterem i routovaním co uvedl pepakriz

jednoduchý přiklad takového presenteru:

class MujPresenter extends BasePresenter {

    // navigace
    public function beforeRender() {
        $this->template->menuItems = array(
            'Domů' => 'Homepage:',
            'Kontakt' => 'Homepage:kontakt',
        );
    }

    // defaultní zobarení www.web.cz
    public function renderDefault() {

    }

    // kontaktní formulář
    protected function createComponentKontakt() {

        $form = new Form;
        $form->addText('jmeno', 'Vaše jméno:')
                ->setRequired('Prosím zadejte jméno.');

        $form->addText('email', 'Váš email:')
                ->setRequired('Prosím zadejte váš email.');

        $form->addTextArea('obsah', 'Obsah zprávy:')
                ->setRequired('Prosím zadejte obsah zprávy.');

        $form->addSubmit('odeslat', 'Odeslat zprávu');

        $form->onSuccess[] = callback($this, 'processKontakt');
        return $form;
    }

    // zpracování formuláře
    public function processKontakt(Form $form) {

        // hodnoty z formuláře
        $values = $form->values;

        // odeslání hodnot na email
        $mail = new Message;
        $mail->setFrom($values->jmeno . '<'.$values->email.'>')
                ->addTo('muj@email.cz')
                ->setSubject('Zpráva z kontaktního formuláře')
                ->setBody($values->obsah)
                ->send();
    }

    // wwww.web/kontakt
    public function renderKontakt() {

    }

}
Andy
Člen | 1
+
0
-

No ak chces mat na kazdu stranku vlastny presenter tak to potom asi mozes zapisat routy takto:

$container->router[] = new Route('o-nas', 'AboutUs:default');

Ale to si potom musis takto rucne zadefinovat vsetky routy.

kashpi
Člen | 48
+
0
-

Taps napsal(a):

Zdravím, chci mít adresy ve tvaru www.web.cz/neco. Routování mám

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

ale do adresy se mi dostává homepage a pak mám /homepage/o-nas. Mohl by mi někdo poradit jak rout upravit. Děkuji

Podle mě ta chyba co tu popisuješ je nejspíš v tom, že špatně zapisuješ odkaz v šabloně.
To že ti to bere presenter HomepagePresenter a jako action „o-nas“ tak vypadá, že tvůj odkaz je

<a n:href="aboutus">O nás</a>

místo

<a n:href="Aboutus:">O nás</a>

důležitý je to velký písmenko na začátku slova a pak ta dvojtečka na konci