„Nevalidita“ při jednom presenteru
- Grelek
- Člen | 233
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.
- Grelek
- Člen | 233
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>© 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>
- Grelek
- Člen | 233
redhead napsal(a):
Ježiš!! A co to provádíš s tím konstruktorem presenteru?? NE! NIKDY! Na to je
inject()
nebosetContext()
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
@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
Stránka http://brandboss.cz/about/ začíná BOMem a to asi dělá potíže. Zkus to nejprve odstranit.
- Grelek
- Člen | 233
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
@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)
- Ot@s
- Backer | 476
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?…