n:href, href pravdepodobne chyba v .htaccess

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

Mám stránku www.imcopower.sk

Po kliknutí na Power supply sa mi vygeneruje link http://www.imcopower.sk/…wer-supply-1, presnejšie /…wer-supply-1, pri ostatných kategoriach to nerobí … Nerozumiem tomu,pretože predm pár dňami mi to robilo pri inej kategorií.

Linky som vytváral cez n:href a ked som to zmenil na href tak to fungovalo a za 2 dni prestalo, tak tomu naozaj nerozumiem .

<?php
	<ul>
			    <li><a n:href="Domov:">Home</a></li>
			   {foreach $menu as $m}
			    <li><a n:href="Produkty:kategoria $m->id_kat">{$m->nazov}</a></li>
			    {/foreach}
			    <li><a n:href="Sluzby:">Services</a></li>
			    <li><a n:href="ONas:">About us</a></li>
			    <li><a n:href="Kontakt:">Contact</a></li>
		    </ul>
?>

.htacces

<?php
# disable directory listing
<IfModule mod_autoindex.c>
       # Options -Indexes
</IfModule>

# enable cool URL
<IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /www

        # prevents files starting with dot to be viewed by browser
        RewriteRule /\.|^\. - [F]

        # front controller
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$ index.php [L]
</IfModule>

# enable gzip compression
<IfModule mod_deflate.c>
        AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript text/javascript application/javascript application/json
</IfModule>

?>
romiix.org
Člen | 343
+
0
-

Skôr by som hľadal chybu v routeri.

iNviNho
Člen | 352
+
0
-

Zakomentoval som router

<?php
$kat =  dibi::query("SELECT id_kat, url FROM kategorie")->fetchPairs("id_kat","url");
$router = new RouteList();
/*
		$router[] = new Route('[<lang [a-z]{2}(?<!sk)>/]produkty/kategoria[/<id>]', array(
			    'lang' => 'sk',
			    'presenter' => 'produkty',
			    'action' => 'kategoria',
			    'id' => array(
                                Route::FILTER_IN => function ($id) {
                                    if (is_numeric($id)) {
                                        return $id;
                                    } else {
                                        $vysledok = dibi::query("SELECT id_kat FROM kategorie where url=%s",$id)->fetchSingle();

                                        return $vysledok;
                                    }
                                },
                                Route::FILTER_OUT => function ($id) use ($kat) {
                                    if (!is_numeric($id)) {
                                        return $id;
                                    } else {

                                        $vysledok = $kat[$id];

                                        return $vysledok;
                                    }
                                })));
		 */
?>

už to nechádže tu chybu …

romiix.org
Člen | 343
+
0
-

Teraz som si všimol, že si sem dal odkaz:

http://www.imcopower.sk/%EF%BB%BF/produkty/kategoria/power-supply-1

EF-BB-BF je BOM znak v UTF-8.

Skús prekontrolovať súbory napr. Code Checkerom.

Čo presne očakávaš od Routra nastavením [<lang [a-z]{2}(?<!sk)>/]? Je to nejaké divoké, nie?

iNviNho
Člen | 352
+
0
-

To mám nastavené kvoli jazykom, popravde som to iba okopíroval a moc tomu nerozumiem ..

Aj po zakomentovaní routra mi vyhadzuje tu chybu pri Kliknutí na power supply… avšak ked si rozkliknem battery napríklad a vlavo mám znova menu tak tamuž to ide …

Terjaší router

<?php
public function createRouter()
	{

                $kat =  dibi::query("SELECT id_kat, url FROM kategorie")->fetchPairs("id_kat","url");

		$router = new RouteList();
/*
		$router[] = new Route('[<lang [a-z]{2}(?<!sk)>/]produkty/kategoria[/<id>]', array(
			    'lang' => 'sk',
			    'presenter' => 'produkty',
			    'action' => 'kategoria',
			    'id' => array(
                                Route::FILTER_IN => function ($id) {
                                    if (is_numeric($id)) {
                                        return $id;
                                    } else {
                                        $vysledok = dibi::query("SELECT id_kat FROM kategorie where url=%s",$id)->fetchSingle();

                                        return $vysledok;
                                    }
                                },
                                Route::FILTER_OUT => function ($id) use ($kat) {
                                    if (!is_numeric($id)) {
                                        return $id;
                                    } else {

                                        $vysledok = $kat[$id];

                                        return $vysledok;
                                    }
                                })));
		 */
		$router[] = new Route('[<lang [a-z]{2}(?<!sk)>/]<presenter>[/<action>][/<id>]', array(
			    'lang' => 'sk',
			    'presenter' => 'Domov',
			    'action' => 'default',
			    'id' => 0
			    ));
		$router[] = new Route('<presenter>/<action>/<id>', array(
			    'presenter' => 'Domov',
			    'action' => 'default',
			    'id' => 0
			    ));
		$router[] = new Route('<presenter>/<action>[/<id>]', 'Domov:default');

		return $router;
	}

}
?>

romiix.org napsal(a):

Teraz som si všimol, že si sem dal odkaz:

http://www.imcopower.sk/%EF%BB%BF/produkty/kategoria/power-supply-1

EF-BB-BF je BOM znak v UTF-8.

Skús prekontrolovať súbory napr. Code Checkerom.

Čo presne očakávaš od Routra nastavením [<lang [a-z]{2}(?<!sk)>/]? Je to nejaké divoké, nie?

Editoval iNviNho (11. 12. 2013 10:51)

romiix.org
Člen | 343
+
0
-

Namiesto:

$router[] = new Route('[<lang [a-z]{2}(?<!sk)>/]<presenter>[/<action>][/<id>]', array(
        'lang' => 'sk',
        'presenter' => 'Domov',
        'action' => 'default',
        'id' => 0
        ));

skús použiť:

$router[] = new Route('[<lang [a-z]{2}>/]<presenter>[/<action>][/<id>]', array(
        'lang' => 'sk',
        'presenter' => 'Domov',
        'action' => 'default',
        'id' => 0
        ));

BOM si prekontroloval?

iNviNho
Člen | 352
+
0
-

moc som tomu nepochopil.

Skopírujem code-checker do app template, resp. tam kde mam layout.latte a tam ho nejako spustim, ale ako?
Vytvoriť si code.bat? a do neho to napísať alebo ako? Nemáš nejakú živú ukážku?

romiix.org
Člen | 343
+
0
-

Používaš Windows, Linux alebo OS X?

iNviNho
Člen | 352
+
0
-

Windows :)

romiix.org
Člen | 343
+
0
-
php.exe cesta_k_Nette_tools\Code-Checker\code-checker.php -d cesta\k\priecinku\s\aplikaciou
iNviNho
Člen | 352
+
0
-

Ďakujem,

Prebehol som to tym code-checkerom a teraz mi po kliknuti už nezobrazuje, že error 404 v aplikácií, ale tentokrát vybehne ladenka s textom: Nette\Application\BadRequestException #404

v code.bat som dal:

<code>
php.exe code-checker.php -d
</code>

code.bat a codechecker som umiestil do zložky, kde mám app, libs … vyskúšal som to spustiť aj v app ..

iNviNho
Člen | 352
+
0
-

Je zaujímavé, že tú chybu robí iba z layoutu.latte, ak sa prekliknem do nejakej kategorie, tak tam nie je problém …

romiix.org
Člen | 343
+
0
-

Ten code-checker niečo vypísal alebo aj spravil?

Predvolene iba vypisuje potenciálne problémy, až pridaním ďalšej voľby sa dá prinútiť chyby opravovať. Ale to sa robí inak ako si nastavil v code.bat. Takže otázka je ako si to spúšťal – resp. aký výstup si z toho získal a teda či následná 404 nie je výsledkom niečoho úplne iného.

Ako máš teraz nastavený router na produkčnom serveri?

iNviNho
Člen | 352
+
0
-

Ja som to iba spustil enterom, prebliklo to a ihned sa to zatvorilo. Je správne, že som to dal do zložky imco (resp. sandbox)? Skúsil som to spustiť aj v zložke app … Ked prídem domov, skúsim sa pozrieť či som dodržal aj nejaké case sensitive a skúsim zmeniť tie parametre. Zákazník už začína byť nervozny, že mu to nefunguje … Skúšal som aj defaultne .htaccesy zo zložky Nette a tam asi problem nebude. Vyskúšal som zo zložky Nette aj defaultny router len si ho pozmeniť nech berie parameter id a stále ten problém.

Neviem či to nesúvisí len s layoutom, alebo s nejakou konkrétnou šablonou, pretože z tejto ktaegorie http://www.imcopower.sk/…ategoria/137 mi to sa dostať na power supply. Ak by si mi chcel moc pomôcť, možem ti kľudne hodiť prístup na ftp…

<?php
public function createRouter()
    {

        // $kat =  dibi::query("SELECT id_kat, url FROM kategorie")->fetchPairs("id_kat","url");

        $router = new RouteList();

        $router[] = new Route('[<lang [a-z]{2}>/]<presenter>[/<action>][/<id>]', array(
                'lang' => 'sk',
                'presenter' => 'Domov',
                'action' => 'default',
                'id' => 0
                ));
        $router[] = new Route('<presenter>/<action>/<id>', array(
                'presenter' => 'Domov',
                'action' => 'default',
                'id' => 0
                ));
        $router[] = new Route('<presenter>/<action>[/<id>]', 'Domov:default');

        return $router;
    }
?>
Zdeno1981
Člen | 115
+
0
-

iNviNho napsal(a):

Ja som to iba spustil enterom, prebliklo to a ihned sa to zatvorilo…

Tak to je samozřejmě špatně, to že to pouze probliklo to nemuselo nic udělat, spusť to v shellu, ať vidíš průběh kontroly, nastavení použij jak psal romiix.org

romiix.org napsal(a):

php.exe cesta_k_Nette_tools\Code-Checker\code-checker.php -d cesta\k\priecinku\s\aplikaciou

Editoval Zdeno1981 (12. 12. 2013 10:27)

iNviNho
Člen | 352
+
0
-

Chalani ja neviem čo to znamená spusť to v shellu …

iNviNho
Člen | 352
+
0
-

Ok chalani, opravil som to.

Web mám aj na PC aj v NB aj na hostingu. Kým som bol v škole, tak som cez NB cez total comander upravoval nejaké veci v preenteroch a nechcelo sa mi to downloadovať do NB a upravovať.

Dneska som prišiel domov a zazálohoval web, čo mám na PC. Kopíroval som jednotlivé zložky a čakal kedy nastane ta chyba. Nastal v Presenter→ ProduktyPresenter.php. Tie presentery majú takú istú veľkosť, ale jeden fungoval a jeden nie.

Ak sa niekomu chce môže tento chybý presenter prejsť code checkerom a povedať mi kde bola chyba?
http://www.sendspace.com/file/rxmxc5

Ďakujem za váš čas, pomohli ste mi!

Zdeno1981
Člen | 115
+
0
-

Klasický BOM, nedoporučuji editovat soubory přímo na serveru přes TC.

Running in read-only mode
[FOUND] ProduktyPresenter.php   contains BOM
[FOUND] ProduktyPresenter.php   383 bytes of whitespaces
[WARNING] ProduktyPresenter.php   Mixed tabs and spaces indentation on line 4.

Editoval Zdeno1981 (12. 12. 2013 22:07)

Pavel Macháň
Člen | 282
+
0
-

iNviNho napsal(a):

Ok chalani, opravil som to.

Web mám aj na PC aj v NB aj na hostingu. Kým som bol v škole, tak som cez NB cez total comander upravoval nejaké veci v preenteroch a nechcelo sa mi to downloadovať do NB a upravovať.

Dneska som prišiel domov a zazálohoval web, čo mám na PC. Kopíroval som jednotlivé zložky a čakal kedy nastane ta chyba. Nastal v Presenter→ ProduktyPresenter.php. Tie presentery majú takú istú veľkosť, ale jeden fungoval a jeden nie.

Ak sa niekomu chce môže tento chybý presenter prejsť code checkerom a povedať mi kde bola chyba?
http://www.sendspace.com/file/rxmxc5

Ďakujem za váš čas, pomohli ste mi!

Ze zvědavosti sem si to stáhnul a .....

  1. statické třídy modelů
  2. v actionKategoria si nastavíš $this->sql = $sql (z modelu) našel sem ji až v zistiPotomkovKategorie… co když tu metodu použiješ v nějaké jiné akci ? … buch $this->sql = null … když už tak $sql mít v parametru metody (budeš mít jistotu, že ji té metodě opravdu dodáš a né že se tam nějak záhadně dodá od jinud)
  3. \Nette\Utils\Strings … importuj si to tam… bez neustálehé opakování namespace to bude čitelnější
  4. signál handleStiahniKatalog() … používáš tam globální proměnou WWW_DIR … nedoporučuju
  5. metoda hladaj($form) … divím se, že se vtěch true, false vyznáš :)

Promiň ale chybu bych vtomdle fakt nenašel

iNviNho
Člen | 352
+
0
-

Zdenko Ďakujem. Poučený, ten projekt som troška dávnejšie robil a nechcelo sa mi to downloadovať.

To Eifel:

  1. Nerozumiem. To je zlé? Tak som sa to naučil a tak to robím už asi trištvrte roka.
  2. Takto. zistiPotomkovKategorie volám asi 100krat v template kvoli rekurzivnemu menu a ak by som v tejto metode stale sa odvolaval na dotaz do DB, zabralo by to čas. Preto viem, že toto použijem iba ak budem v tej metode, preto som si to naplnil tam, určite by som to dalo spraviť aj v stratUpe
  3. Určite, súhlasím!
  4. Vytvoril som si viac takýchto globálnych premenných a zatial som s tým nemal problém. Ako by si to riešil ty? BasePath?
  5. Neveril by si, ale fakt sa v nich vyznám. Kebyže ti ukážem kod na vyhladavanie tu http://ekotrim.sk/…zit-inzeraty tak sa budeš čudovať:D (zobrazuje tam geocode chybu, pretože volám pri každom inzeráte geocode, prerobím a uložím pri vložení do DB a potom budem ťahať iba z DB) Chcel som si to napísať sám a mať nad tým absolútnu kontrolu.

Hladali sme chybu v BOM o kodik nešlo, ale Ďakujem za pripomienky, určite sa rád niečo nové naučím.

Editoval iNviNho (12. 12. 2013 22:30)