„Nevalidita“ při jednom presenteru

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

Zdravím,

řeším podivnou věc. Na stránce je design, funguje to, tralala (odkaz). Ale jakmile přejdu na stránku O nás, můžete si všimnout, že nahoře je pruh navíc. Když se podíváte na zdrojový kód (ve Firefoxu to tak je), tak uvidíte, že na prvním řádku je <!DOCTYPE html>, ale prý je to špatně! Od toho se potom odvíjí ten pruh, protože se to špatně vykreslí.
Všechny šablony ve FrontModule dědí od @layout.latte. To samé se ale děje i v administraci (AdminModule a FrontModule spolu mají společný pouze model), proto si myslím, že mám blbě model?
Níže přiložím zdrojové kódy.

AboutPresenter (FrontModule):

<?php

namespace FrontModule;

use Nette;

class AboutPresenter extends BasePresenter
{
	private $accountsFacade;
	private $aboutusFacade;
	public $footerFacade;

	function __construct(\AccountsFacade $accountsFacade, \AboutusFacade $aboutusFacade, \FooterFacade $footerFacade)
	{
		$this->accountsFacade = $accountsFacade;
		$this->aboutusFacade = $aboutusFacade;
		parent::__construct($footerFacade);
	}

	public function renderDefault()
	{
		$this->template->accounts = $this->accountsFacade->getAccounts();
		$this->template->about = $this->aboutusFacade->getAbout();
	}
}

AboutusFacade (model):

<?php

class AboutusFacade extends Nette\Object
{
	public $db;

	function __construct(Nette\Database\Connection $db)
	{
		$this->db = $db;
	}

	public function getAbout()
	{
		return $this->db->table('aboutus')->select('*');
	}

	public function getAboutEdit()
	{
		return $this->db->table('aboutus')->get('1');
	}

	public function setAbout(array $properties)
	{
		try {
			$this->db->table('aboutus')->update($properties);
		} catch (PDOException $e) {
			Nette\Diagnostics\Debugger::log($e);
			Nette\Diagnostics\Debugger::firelog($e);
		}
	}
}

default.latte (FrontModule):

{var $title = "O nás"}
{block content}
			<div id="sidebox">
				{foreach $about as $row}
				<h1>{$row->title}</h1>
				{!$row->content}
				{/foreach}
			</div>
			{foreach $accounts as $row2}
			<div style="min-height: 200px;">
			<div class="medium column" style="border-bottom: 1px solid #eee; min-height: 160px;">
				<h3 style="display:inline-block; width:200px; color: #44939C; margin-bottom: 10px;"><a href="mailto:{$row2->email}" target="_blank" style="color: #44939C;">{$row2->username}</a></h3>
				<h5>{$row2->position}</h5>
				{!$row2->about}
				</div>
			<div class="tiny column">
				<div class="link"><a href="{$row2->facebook}"><img src="/images/fbicon.png" width="64" height="64"></a></div>
				<div class="link" style="padding-left: 73px; margin-top: -64px;"><a href="{$row2->linkedin}"><img src="/images/inicon.png" width="64" height="64"></a></div>
				<div class="link" style="padding-left: 36.5px;"><a href="{$row2->twitter}"><img src="/images/twicon.png" width="64" height="64"></a></div>
			</div>
			</div>
			{/foreach}
{/block}

Omlouvám se za dlouhý příspěvek, ale musím to co nejrychleji vyřešit. A vím, že zdrojáky jsou tak trochu prasárna.

Předem díky za všechny odpovědi.

redhead
Člen | 1313
+
0
-

Proč máš proboha <meta> a <title> apod. uvnitř <body>?

Hm, divný, ve zdrojovém kódu je to dobře, ale když si otevřu developer tools v Chrome (po celém načtení), tak jsou ty meta tagy atd. v <body>

Editoval redhead (4. 9. 2012 19:49)

Grelek
Člen | 233
+
0
-

To je právě ono, já nevím, proč tam jsou! =(

Ještě sem dám @layout.latte, aby bylo vidět, že to je správně.

<!DOCTYPE html>
<html lang="cs">
<head>
	<title>Brandboss{ifset $title} | {$title}{/ifset}</title>
	<meta name="description" content="Firma BrandBoss s.r.o. se zabývá marketingem na Facebooku. Má vlastní reklamní systém založený na netradičních technologiích. Přivádí svým partnerům tisíce návštěvníků denně.">
	<meta name="keywords" content="BrandBoss s.r.o., Facebook, Social media, Facebook marketing, Graph rank, Edge rank, Graph api, konzultace facebook kampaní, facebook kampaně, facebook ads, správa facebook stránek, facebook aplikace, facebook soutěže, levné reklama, brandpost">
	<meta name="author" content="">
	<meta charset="UTF-8">
	<link type="text/css" rel="stylesheet" href="{$basePath}/css/screen.css">
	<link rel="shortcut-icon" href="{$basePath}/favicon.ico">
	<script type="text/javascript" src="{$basePath}/js/jquery-1.7.2.min.js"></script>
	<script type="text/javascript" src="{$basePath}/js/netteForms.js"></script>
	{block head}{/block}
	<!--[if lte IE 6]>
	<link type="text/css" rel="stylesheet" href="ie.css">
	<![endif]-->
</head>
<body>
<script type="text/javascript">

var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-34487547-1']);
_gaq.push(['_trackPageview']);

(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();

</script>
<div id="top-bar"><a name="top"></a>
	<div class="wrapper">
		<ul id="menu">
			<li><a {ifCurrent Homepage:default}class="selected" {/ifCurrent}title="Home" n:href="Homepage:default">home<span>tak a začínáme</span></a><div class="line"></div></li>
			<li><a {ifCurrent Portfolio:default}class="selected" {/ifCurrent}title="Portfolio" n:href="Portfolio:default">portfolio<span>naše práce</span></a><div class="line"></div></li>
			<li><a {ifCurrent About:default}class="selected" {/ifCurrent}title="Náš tým" n:href="About:default" >náš tým<span>něco o nás</span></a><div class="line"></div></li>
			<li><a {ifCurrent Contact:default}class="selected" {/ifCurrent}title="Napiš nám" n:href="Contact:default">napiš nám<span>nechte nám vzkaz</span></a><div class="line"></div></li>
			<li><a {ifCurrent Blog:default}class="selected" {/ifCurrent}title="Blog" n:href="Blog:default">blog<span>naše myšlenky</span></a><div class="line"></div></li>
		</ul>
		<a n:href="Homepage:default"><img id="top-logo" src="{$basePath}/images/top-logo.png" width="203" height="178" alt="" /></a>
	</div>
</div>


<div id="mid-sec">
	{ifset $bg}
	<div id="bg">
		<div class="wrapper">
			<div id="samples">
				<div id="pics1" class="sample">
					<div class="alignslide">
						<img src="{$basePath}/images/samples/sample1.png">
						<!--<script type="text/javascript">
							new fadeshow(sample1, 241, 128, 0, 5000, 0, "R")
						</script>-->
					</div>
				</div>
				<div id="pics2" class="sample right">
					<div class="alignslide">
						<img src="{$basePath}/images/samples/sample2.png">
						<!--<script type="text/javascript">
							new fadeshow(sample2, 241, 128, 0, 5250, 0, "R")
						</script>-->
					</div>
				</div>
				<div id="pics3" class="clear sample">
					<div class="alignslide">
						<img src="{$basePath}/images/samples/sample4.png">
						<!--<script type="text/javascript">
							new fadeshow(sample3, 241, 128, 0, 5500, 0, "R")
						</script>-->
					</div>
				</div>
				<div id="pics4" class="sample right">
					<div class="alignslide">
						<img src="{$basePath}/images/samples/sample9.png">
						<!--<script type="text/javascript">
							new fadeshow(sample4, 241, 128, 0, 5750, 0, "R")
						</script>-->
					</div>
				</div>
			</div>
		</div>
	</div>
	{else}
	<div id="mid-sec">
		<div id="bg-small"></div>
	</div>
	{/ifset}
</div>
<div id="page">
	<div class="wrapper">
		<div id="content-area">
{include #content}
		<div class="clear bottom"></div>
		</div>
	</div>
</div>
<div id="footer">
	<div class="wrapper">
		<div id="left">
			{foreach $footer as $row}
			<h2>{$row->title}</h2>
			{!$row->content}
			{/foreach}
		</div>
		<div id="testimonials">
			<div id="testimonial">
				<script type="text/javascript" src="./js/testimonials.js"></script>
				<p>Nějaká parádní reference, která tu bude natvrdo.</p>
				<p class="name">Významná firma a.s.</p>
				<p class="loc">Česká Republika</p>
			</div>
			<div id="bottom"></div>
		</div>
		<div id="copyright">
			<p>&copy; 2012 BrandBoss s.r.o. All Rights Reserved.</p>
			<div class="right">
				<p><a n:href="About:default">Kontakty</a> | <a href="#top">Zpátky nahoru</a></p> <a n:href="Homepage:default"><img id="ccg" src="{$basePath}/images/ccg.png" width="56" height="56" alt=""></a>
			</div>
		</div>
	</div>
</div>
{ifset $flashes}<script n:foreach="$flashes as $flash">window.alert({$flash->message});</script>{/ifset}
</body>
</html>
redhead
Člen | 1313
+
0
-

Ježiš!! A co to provádíš s tím konstruktorem presenteru?? NE! NIKDY! Na to je inject() nebo setContext() nebo $this->context (podle verze nette kterou používáš). Nikdy nepřepisovat konstruktor prezenteru.

Editoval redhead (4. 9. 2012 20:01)

Grelek
Člen | 233
+
0
-

redhead napsal(a):

Ježiš!! A co to provádíš s tím konstruktorem presenteru?? NE! NIKDY! Na to je inject() nebo setContext() nebo $this->context (podle verze nette kterou používáš). Nikdy nepřepisovat konstruktor prezenteru.

Ééé, chápu dobře, že myslíš tohle?

parent::__construct($footerFacade);

Ale to neřeší můj problém, nebo ano? Takhle to používám ve všech presenterech (=D).

Filip Procházka
Moderator | 4668
+
0
-

@redhead: předávat si věci konstruktorem je docela normální věc ;)

@Grelek: Ale inject*() je daleko pohodlnější – https://pla.nette.org/…ect-autowire

Ot@s
Backer | 476
+
0
-

Stránka http://brandboss.cz/about/ začíná BOMem a to asi dělá potíže. Zkus to nejprve odstranit.

Grelek
Člen | 233
+
0
-

HosipLan napsal(a):

@redhead: předávat si věci konstruktorem je docela normální věc ;)

@Grelek: Ale inject*() je daleko pohodlnější – https://pla.nette.org/…ect-autowire

Díky za tip.

Ot@s napsal(a):

Stránka http://brandboss.cz/about/ začíná BOMem a to asi dělá potíže. Zkus to nejprve odstranit.

Asi jsem moc velký začátečník, ale kde BOM najdu a co to vlastně je? =D

Editoval Grelek (4. 9. 2012 20:16)

redhead
Člen | 1313
+
0
-

@redhead: předávat si věci konstruktorem je docela normální věc ;)

@HosipLan: Vidíš to! A já myslel, že vývoj Nette sleduju důkladněji. Já mám furt v paměti, že přepisovat konstruktor prezenteru je špatně a že ho dokonce někdo chtěl dát final. Taky proto jsem si myslel, že se mají použít inject*() metody. Proč je to vlastně nepreferovaný způsob?

Editoval redhead (4. 9. 2012 20:31)

redhead
Člen | 1313
+
0
-

@Grelek: Použij Code Checker

Ot@s
Backer | 476
+
0
-

Grelek napsal(a):
Asi jsem moc velký začátečník, ale kde BOM najdu a co to vlastně je? =D

BOM (byte order mark) – nepoviný identifikační prefix unicode kódování souboru. Ve striktně netextových souborech dělá potíže. Editory úvodní sekvenci znaků nezobrazují, nicméně to neznamená, že tam nejsou (krásně to vidíš v hex editorech). Pro odstranění použij co ti radí redhead nebo googluj.

BOM pozitivní – http://rishida.net/…er/index.php?…

Grelek
Člen | 233
+
0
-

Jasně, díky moc. Podívám se na to přes ten Code-Checker.