URL z databazy a clanky mam v presenteri
- Tomas8698
- Člen | 109
Zdravim, chcem sa opytat ze ako postupovat neviem sa pohnut ,članky mam
uložene v presentery nie v databaze a informacie pre URL mam v databaze a
potreboval by som to prepojit aby my po kliknuti na link otvorilo stranku
s prislusnym clankom a tak isty udaj by bol zobrany z databazy urlseo a
zapisany v URL prislusnej stranky( mam dve jazykove verzie).
Som zaciatocnik a za pomoc dakujem.
- dakur
- Člen | 493
@Tomas8698 Tomu propojení moc nerozumím, ale pokud máš na mysli
to, že chceš na bázi nějakého parametru v routeru (urlSeo
)
renderovat statický obsah ze šablony, jde to nějak takto:
public function renderDefault(string $urlSeo): void
{
$template = $this->getTemplate();
if (Strings::contains('..', $urlSeo)) {
$this->error(); // ošetření nežádoucích vstupů -> e404
}
$filePath = __DIR__ . '/cesta-k-sablonam/' . $urlSeo . '.latte';
if ( ! is_file($filePath) {
$this->error();
}
$template->setFile($filePath);
}
- Tomas8698
- Člen | 109
Dakujem @dakur za odpoved, vyskusam to.
Tam vlastne mam v databaze stlpec urlseo a mam viac podstranok v dvoch
jazykoch. Podstranky ulozene riadne v presenteri a po kliknuti na podstranku
aby do routy pridalo adresu z urlseo k prislusnemu presenteru.
Databaza vyzera takto:
<?php
CREATE TABLE `articles` (
`id` int(11) NOT NULL,
`urlseo` varchar(256) COLLATE utf8mb4_unicode_ci NOT NULL,
`active` tinyint(1) NOT NULL,
`title` varchar(256) COLLATE utf8mb4_unicode_ci NOT NULL,
`uuid` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`description` varchar(1024) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`keywords` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`ogimage` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`titleshort` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`rsstext` varchar(1024) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`locale` char(5) COLLATE utf8mb4_czech_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
?>
- Tomas8698
- Člen | 109
@dakur Da sa to spravit tak aby my to url rozdelovalo podla jazyka? Ze som na sk stranke a po kliknuti na link( v linku si preposlem v premenej $locale jazyk) a na zaklade toho mi bude zobrazovat adresu v url podla prislusneho jazyka(jazyk mam v db a aj urlseo, aby mi podla toho vybralo). A este jedna otazka mam 5 podstranok okrem hlavnej v renderDefault() mam nastavenia ako si my poslal. Ci spravit takto ako mam tu hlavnu aj dalsie alebo sa to nejak inak robi? Mozem poslat aj ako vyzera kod.
- dakur
- Člen | 493
@Tomas8698 Spravit sa da vsetko, ale pomůže tomu, když budeš psát trochu čitelněji (s interpunkcí) a uspořádaněji (v jednu chvíli řeším jeden problém, píšu dost konkrétních informací k tomu, aby druhá strana mou problematiku pochopila, ale zase ne tolik, abych ji nezahltil zbytečnými detaily).
Nicméně pokud chceš vytvořit link, který v sobě má
locale
, tak musíš udělat tři věci:
- upravit routu, aby pracovala s
locale
(např./<urlseo>
→/<locale>/<urlseo>
) - upravit cílový presenter, aby přijímal
$locale
(např.actionDefault(string $urlseo)
→actionDefault(string $locale, string $urlseo)
- upravit ten link, o kterém mluvíš, tj. jeho generování v šabloně
či presenteru, aby se mu předával
locale
(např.{link Article:default, urlseo => $article->urlseo}
→{link Article:default, locale => $article->locale, urlseo => $article->urlseo}
)
- dakur
- Člen | 493
@Tomas8698 Pokud skoleni
a
poradentsviAnalyza
je to, co je v urlseo
, pak stačí
jen jedna action, tj. actionDefault()
, protože ta informace
o tom, která šablona se má načíst, je schovaná v tom argumentu
$urlseo
:
public function actionDefault(string $locale, string $urlseo)
{
// teď vím, jakou načíst šablonu a jakého jazyka, takže nepotřebuju žádnou další action
}
- dakur
- Člen | 493
Máš presenter (třeba ArticlePresenter
), jehož účelem je
vykreslit jeden článek ze šablony. Proto, aby ten presenter věděl, kterou
šablonu vzít, potřebuje mít dva údaje – jazyk (locale
) a
název článku (urlseo
).
Pak máš presenter (např. HomepagePresenter
), který ti
vykresluje odkazy na články (ať už formou odkazů, dlaždic nebo čehokoliv
jiného), tzn. že ti vygeneruje tolik odkazů, kolik máš článků (nebo
kolik mu řekneš) a každý ten odkaz bude vést na
ArticlePresenter
a jako parametry tomu dá údaje o tom
konkrétním článku – tzn. u každého mu předá locale
a
urlseo
.
HomepagePresenter.php – v něm si vytáhnu články a předám do šablony
class HomepagePresenter
{
public function renderDefault()
{
$this->template->articles = $this->db->findBy(['locale' => 'cs']);
}
}
HomepagePresenter.latte – zde mám odkazy na jednotlivé články,
u každého předávám jako parametr locale
a urlseo
{foreach $articles as $article}
<a href="{link Article:default, locale => $article->locale, urlseo => $article->urlseo}">přečíst článek</a>
{/foreach}
ArticlePresenter.php – vytáhnu si požadovaný článek z DB a předám do šablony
class ArticlePresenter
{
public function renderDefault(string $locale, string $urlseo)
{
$this->template->article = $this->db->findOneBy(['locale' => $locale, 'urlseo' => $urlseo]);
}
}
ArticlePresenter.latte – vykreslím konkrétní článek
<h1>{$article->title}</h1>
{$article->content}
(Uvedený kód ukazuje princip, není to funkční kód, např. nevím, jakou používáš knihovnu pro práci s DB, tak jsem to napsal po svojemu.)
- Tomas8698
- Člen | 109
Ja mam články v presenteroch nie v databaze. V databaze mam id,urlseo,a údaje pre meta tagy. Da sa to spraviť tak žeby zapísalo do url(do linku) udaj z db( z urlseo) a vybralo konkrétnu šablónu? Ide o to ze to nie sú články ale je to cela podstranka. Pošlem foto lebo ťažko sa to vysvetľuje.
- dakur
- Člen | 493
@Tomas8698 Jo, na to jsem zapomněl, ale psal jsem to nahoře (https://forum.nette.org/…v-presenteri#…), takže jen vyměníš kód pro article presenter:
ArticlePresenter.php – načtu požadovanou šablonu
class ArticlePresenter
{
public function renderDefault(string $locale, string $urlseo)
{
// $this->template->article = $this->db->findOneBy(['locale' => $locale, 'urlseo' => $urlseo]);
// místo DB 🔼 prostě sestavím cestu k souboru a nastavím jako view 🔽
$template = $this->getTemplate();
if (Strings::contains('..', $locale) || Strings::contains('..', $urlseo)) {
$this->error(); // ošetření nežádoucích vstupů -> e404
}
$filePath = __DIR__ . '/cesta-k-sablonam/' . $locale . '/' . $urlseo . '.latte';
if ( ! is_file($filePath) {
$this->error();
}
$template->setFile($filePath);
}
}
A ArticlePresenter.latte tímpádem nebude, to jsou ty jednotlivé šablony s články.
Je to prostě skládačka. Každý kus kódu máš nějakou svoji jednu zodpovědnost a tyto kusy skládáš k sobě/za sebe. Je důležité si proto uvědomit, co který kus má za úkol a jak ty části spolu spouvisí.
- Tomas8698
- Člen | 109
Moja databaza vyzera takto :
<?php
INSERT INTO `articles` (`id`, `urlseo`, `active`, `title`, `uuid`, `description`, `keywords`, `ogimage`, `titleshort`, `rsstext`, `locale`) VALUES
(0, 'domu', 1, 'Správa serverů, vývoj software, IoT, školení, konzultace a analýzy', 'bae34b31-ad49-4444-9bf7-805e513d30f6', 'Správa serverů, vývoj software, IoT, školení, konzultace a analýzy', 'programování, vývoj, software hardware, SEO, linux, server,admin, konzultant, marketing', 'header.jpg', 'Bc. Josef Jebavý - správa serverů, vývoj software, IoT, školení, konzultace a analýzy', ' ', 'cs'),
(1, 'home', 1, 'Software and hardware custom development, server management, consulting and analysis', 'b63ccd80-a77b-4cdc-9936-a5479e2c080d ', 'Software and hardware custom development, IoT, consulting and analysis', 'programming, development, software, hardware, linux, server,admin, IoT, SEO Consultant, Marketing', 'header.jpg', 'Bc. Josef Jebavý - development of software and hardware, server management, IoT, consulting and analysis', ' ', 'en'),
(2, 'jak-zahajit-spolupraci', 1, 'Zahájení spolupráce', '557b4574-a667-4cbd-a3b3-ca62dc9d5568 ', 'Zahájení spolupráce', 'spolupráce, převzetí projektu, programování, správa serverů', 'logo-xeres.cz-250x250.png', 'Zahájení spolupráce', ' ', 'cs'),
(3, 'how-to-start-cooperation', 1, 'How to get started cooperation and how I work', 'e41aca73-fc57-4fdb-87f8-7e6ccf747adc', 'How to get started cooperation and how I work', 'cooperation, programing, server administration, takeover of the project,', 'logo-xeres.cz-250x250.png', 'How to get started cooperation and how I work', ' ', 'en'),
?>
Spravil som novy ArticlePresenter.php a do nho pridal renderDefault() :
<?php
/** @var Context @inject */
public $article;
public function renderDefault(string $locale, string $urlseo): void
{
$this->template = $this->article->findOneBy(['locale' => $locale, 'urlseo' => $urlseo]);
// $this->template->article = $this->db->findOneBy(['locale' => $locale, 'urlseo' => $urlseo]);
// místo DB 🔼 prostě sestavím cestu k souboru a nastavím jako view 🔽
$template = $this->getTemplate();
if (Strings::contains('..', $locale) || Strings::contains('..', $urlseo)) {
$this->error(); // ošetření nežádoucích vstupů -> e404
}
$filePath = __DIR__ . '/cesta-k-sablonam/' . $locale . '/' . $urlseo . '.latte';
$template->setFile($filePath);
}
?>
A v HomepagePresenteri nechat to co si mi posielal vyssie alebo to pozmenit?
HomePagePresenter
<?php
/** @var Nette\Localization\ITranslator @inject */
public $translator;
public $langs = ['cs', 'en'];
/** @var Context @inject */
public $article;
public function renderIndex(): void
{
$httpRequest = $this->getHttpRequest();
$locale = $httpRequest->detectLanguage($this->langs);
// bdump($locale);
if (is_null($locale)) {
$locale = "cs";
}
$this->redirect('Homepage:default', $locale);
}
public function renderDefault(string $locale): void
{
//TODO - nacitat jazyky z konfigurace
$this->template->lang = $locale;
$article = $this->article->table('articles')->where(['locale'=> $locale])->fetchAll();
$this->template->article = $article;
}
?>
A moj router este zatial vyzera takto :
<?php
$router = new RouteList;
$router->addRoute('', "Homepage:index");
$router->addRoute('[<locale= cs|en>/]<presenter>/<action>[/<id>]', "Homepage:default");
$router->addRoute('[<locale= cs|en>/]<presenter>/<action>[/<id>]', "Article:default");
$router->addRoute('[<locale= cs|en>/]<presenter>/<action>[/<id>]', "VyvojSoftware:default");
$router->addRoute('[<locale= cs|en>/]<presenter>/<action>[/<id>]', "PoradenstviAnalyza:default");
$router->addRoute('[<locale= cs|en>/]<presenter>/<action>[/<id>]', "SoftwareReseni:default");
$router->addRoute('[<locale= cs|en>/]<presenter>/<action>[/<id>]', "Skoleni:default");
$router->addRoute('sitemap.xml', 'Homepage:sitemap');
return $router;
?>
- dakur
- Člen | 493
A v HomepagePresenteri nechat to co si mi posielal vyssie alebo to pozmenit?
No musíš to dát do sebe tak, aby to fungovalo. Pokud už tam máš funknčí kód, tak ho asi nebudeš nahrazovat za nefuknční, ne? Prosímtě, čteš ten kód, který ti píšu, a snažíš se ho vůbec pochopit? To přece není tak těžké porovnat, že když už máš:
public function renderDefault(string $locale): void
{
//TODO - nacitat jazyky z konfigurace
$this->template->lang = $locale;
$article = $this->article->table('articles')->where(['locale'=> $locale])->fetchAll();
$this->template->article = $article;
}
a já píšu:
public function renderDefault()
{
$this->template->articles = $this->db->findBy(['locale' => 'cs']);
}
tak že tam necháš ten svůj, který funguje, protože to dělá cca to stejné. Můj ještě nemá tu funkcionalitu hledat články i podle locale, ale jestli to tam chceš, tak to nebudeš mazat.
Editoval dakur (2. 3. 2021 9:13)
- Tomas8698
- Člen | 109
A áno chcem hľadať a rozdeľovať podstranky podla locale. A dobre tak
nechám. Ja len preto ze či na to idem správne. A ešte som sa chcel spýtať
ze ci netreba pridať do linku kde kliknem a sa chcem dostať na konkrétnu
podstranku. Ja ho mam tak ako si mi písal vyššie. No po kliknutí ma hodí na
prázdny prezenter s chybovou hlaskou. Pridať priamu cestu aby mi otvorilo
konkrétnu podstranku ( so správnym jazykom) a do url zapísalo locale/ a udaj
z urlseo z databázy /skoleni
/localhost/8082/cs/skoleni
<?php
<a href="{link Article:default, locale => $article->locale, urlseo => $article->urlseo}">Skoleni</a>
?>
- dakur
- Člen | 493
A ešte som sa chcel spýtať ze ci netreba pridať do linku kde kliknem
Přidat do linku co?
No po kliknutí ma hodí na prázdny prezenter s chybovou hlaskou.
Ta chybová hláška ti nic nenapoví?
Pridať priamu cestu aby mi otvorilo konkrétnu podstranku ( so správnym jazykom) a do url zapísalo locale/ a udaj z urlseo z databázy /skoleni
Konkrétní podstránka je dána názvem presenteru, view a parametry. Tedy
např. /cs/skoleni
= Article
presenter,
default
view, $locale
a $urlseo
. Router
funguje tak, že pokud tomu zadáš
{link Article:default, locale => cokoliv, urlseo => cokoliv}
,
tak ti vygeneruje /cs/skoleni
a když přijdeš na URL
/cs/skoleni
, tak ti zavolá actionDefault()
v presenteru ArticlePresenter
a předá tomu parametry
$locale
a $urlseo
. Ovšem za předpokladu, že
máš v routeru masku s parametry <locale>
a
<urlseo>
!
Teď ale koukám, že jestli tvůj router vypadá takto, tak se nemůžeš
divit, že ti to nefunguje. To, co jsi tam napsal, jinými slovy znamená:
adresu ve tvaru /cs/cokoliv/cokoliv
převezme
Homepage:default
. O <locale>
a
<urlseo>
nic. Doporučuju si přečíst v dokumentaci
ještě raz o routeru, alespoň sekci Maska a parametry: https://doc.nette.org/…tion/routing#…
Editoval dakur (2. 3. 2021 10:39)
- Tomas8698
- Člen | 109
Upravil som router takto
<?php
$router = new RouteList;
$router->addRoute('', "Homepage:index");
$router->addRoute('[<locale= cs|en>/]<presenter>/<action>[/<id>]', "Homepage:default");
$router->addRoute('sitemap.xml', 'Homepage:sitemap');
$router->addRoute('/<locale= cs|en>/<urlseo>', 'Article:default');
return $router;
?>
- dakur
- Člen | 493
A ked som pochopil správne, tak budem mat vo folderi Article → subor → default.latte, ktoré bude výkreslovat podstranky na základe linku ktory pošlem
Nechápu, co je Article → subor → default.latte
. Prostě
budeš mít v Article složku se šablonama (tj. latte soubory) jednotlivých
článů a ArticlePresenter, který bude na základě $locale
a
$urlseo
rozhodovat, který z těch latte souborů se má
načíst.
ze nebude to robiť v homepage ale Article, ktory s tým už dalej pracuje (myslím urlseo, locale)
Ano, Homepage presenter nemá co zajímat, jakým způsobem se vykreslí
nějaký konkrétní článek, jeho zodpovědnost je vykreslit seznam všech
článků a u každého vykreslit odkaz na konkrétní článek (tj. na
ArticlePresenter) – tím to pro něj končí.
Naopak zodpovědnost Article presenteru je vykreslit jeden konkrétní článek
podle toho, co mu přijde v $locale
a $urlseo
– a
tím to pro něj končí.
- dakur
- Člen | 493
Aha, to jsi nějak zapomněl zmínit, že používáš translator. 🙂
Doteď jsem myslel, že budeš mít zvlášť šablonu pro český obsah a
zvlášť pro anglický. V takovém případě se z $filePath
opět odstraní $locale
– tím se includne daná šablona.
V šabloně pak budeš používat {_}
macro jako to máš
jinde – to už ti podle locale samo doplní český či anglický obsah.
Editoval dakur (5. 3. 2021 8:50)
- dakur
- Člen | 493
A čeho se vlastně snažíš docílit? Jak jsi nahoře uvedl svou databázi:
INSERT INTO `articles` (`id`, `urlseo`, `active`, `title`, `uuid`, `description`, `keywords`, `ogimage`, `titleshort`, `rsstext`, `locale`) VALUES
(0, 'domu', 1, 'Správa serverů, vývoj software, IoT, školení, konzultace a analýzy', 'bae34b31-ad49-4444-9bf7-805e513d30f6', 'Správa serverů, vývoj software, IoT, školení, konzultace a analýzy', 'programování, vývoj, software hardware, SEO, linux, server,admin, konzultant, marketing', 'header.jpg', 'Bc. Josef Jebavý - správa serverů, vývoj software, IoT, školení, konzultace a analýzy', ' ', 'cs'),
(1, 'home', 1, 'Software and hardware custom development, server management, consulting and analysis', 'b63ccd80-a77b-4cdc-9936-a5479e2c080d ', 'Software and hardware custom development, IoT, consulting and analysis', 'programming, development, software, hardware, linux, server,admin, IoT, SEO Consultant, Marketing', 'header.jpg', 'Bc. Josef Jebavý - development of software and hardware, server management, IoT, consulting and analysis', ' ', 'en'),
(2, 'jak-zahajit-spolupraci', 1, 'Zahájení spolupráce', '557b4574-a667-4cbd-a3b3-ca62dc9d5568 ', 'Zahájení spolupráce', 'spolupráce, převzetí projektu, programování, správa serverů', 'logo-xeres.cz-250x250.png', 'Zahájení spolupráce', ' ', 'cs'),
(3, 'how-to-start-cooperation', 1, 'How to get started cooperation and how I work', 'e41aca73-fc57-4fdb-87f8-7e6ccf747adc', 'How to get started cooperation and how I work', 'cooperation, programing, server administration, takeover of the project,', 'logo-xeres.cz-250x250.png', 'How to get started cooperation and how I work', ' ', 'en'),
A ve složkách vidím např. jakZahajitSpolupraci.latte
, tak
nerozumím tomu, proč to máš potom v databázi? Nebo proč máš
home
v databázi? K čemu tu tabulku articles
vlastně potřebuješ?
Editoval dakur (5. 3. 2021 8:55)
- Tomas8698
- Člen | 109
Ano to používam Contributte. A databázu chcem na urlseo aby mi do url podla jazyka vkladalo a potom aby som mohol do meta tagov vkladať :) , podla postranky a jazyka. A to neviem ci mam dobre to domu a home, ci by nebolo lepšie nechať prázdne lebo to ma byt to urlseo, ktoré chcem v url mat. A jak-zahajit-spolupraci(z databázy urlseo) co mam aj .latte, tak tam chcem aby keď som na ang stranke a prepnem sa na tu podstranku, aby v url bol ang názov co mam v urlseo v db: how-to-start-cooperation. A aj vymazať tie presenteri co sú tam navyše? Lebo teraz by to mal robiť ArticlePresenter vyberať šablóny.
- Tomas8698
- Člen | 109
🙂 Tak ano to je skor aby som sa naučil, ja pracujem momentálne ako
elektrikár, tato a predošlá stránka je hlavne na nazbieranie skúsenosti aby
som mohol časom pracovať v IT odvetví – web aplikácie, aby som sa
naučil ako sa v tom pracuje a tak 🙂. Teraz sa hlásim tohto roku na VŠ
externe štúdium popri praci.
Keď budem doma tak prerobím ten filepath, ,ešte ju budem prekladám dnes,
zatial dakujem @dakur
- Tomas8698
- Člen | 109
Ďakujem @dakur funguje to super. Ešte som sa chcel spýtať jednu vec či by sa dala upraviť url aby bola krajšia teraz to mam takto: https://localhost:8082/cs/article/?… , je treba upraviť router aby bola taká https://localhost:8082/cs/skoleni
- Tomas8698
- Člen | 109
Moj router vyzerá teraz takto:
<?php
public static function createRouter(): RouteList
{
$router = new RouteList;
$router->addRoute('', "Homepage:index");
$router->addRoute('[<locale= cs|en>/]<presenter>/<action>[/<id>]', "Homepage:default");
$router->addRoute('sitemap.xml', 'Article:sitemap');
$router->addRoute('/<locale= cs|en>/<urlseo>', 'Article:default');
return $router;
}
?>
- dakur
- Člen | 493
@Tomas8698 To proto, že máš obecnější routu definovanou nad konkrétnější, takže to chytne ta obecná ještě dřív než dojde ke konkrétnější.
Když napíšeš v latte např.
{link Article:default, locale => cs, urlseo => neco}
, tak
tím instruuješ router, že ti má z tohoto zápisu vygenerovat URL. On se
koukne do definice rout (tj. ten tvůj RouteList
v metodě
createRouter()
) a jde shora dolů a po každou routu zkouší,
jestli na ni ty parametry sedí. Pokud ano, dál už nejde a vrátí tu první,
která sedí. No a pro zápis
{link Article:default, locale => cs, urlseo => neco}
sedí i
[<locale= cs|en>/]<presenter>/<action>[/<id>]
,
takže podle toho předpisu vygeneruje URL a výsledkem je
/cs/article/?urlseo=skoleni
.
Řešením je tedy specifičtější
<locale= cs|en>/<urlseo>
předsunout před tu obecnou.
Celkově po uspořádání asi nějak takto:
public static function createRouter(): RouteList
{
$router = new RouteList;
$router->addRoute('', "Homepage:index");
$router->addRoute('sitemap.xml', 'Article:sitemap');
$router->addRoute('<locale= cs|en>/<urlseo>', 'Article:default');
$router->addRoute('[<locale= cs|en>/]<presenter>/<action>[/<id>]', "Homepage:default");
return $router;
}
Jo a bacha, že jsi v té Article:default
měl na
začátku /
, to taky mohlo souviset.
Editoval dakur (15. 3. 2021 15:08)
- Tomas8698
- Člen | 109
Super 🙂 vymenil som a odstranil lomitko a funguje to. Dakujem pekne @dakur . Ze tam ono našlo ako prvu routu <locale= cs<presenter>/<action>[/<id>] , ktorú chytilo ako prvú a aj mu sedela a podľa toho vygenerovalo url. Dakujem pekne
- Tomas8698
- Člen | 109
Este by som sa chcel spytat, mam opakujuci sa kod v kazdej podstranke ktora patri do Article. Opakuje sa mi tam {block meta} kde si vkladam meta tagy ktoré ma každa podstránka iné. Keď dam kod meta do všeobecnej Article.latte tak mi vypiše chybu ze mata tag nepozna ale ked si vypišem premenu $articl(varDump) dostavam tie informacie o meta tagov z databazy. Ked to bolo v kazdej podstranke tak to fungovalo, ak to dam do všeobecnej tak nechce.
Podstránka advice-analysis
<?php
{block meta}
{block description} <meta name="description" content="{$articles[0]->description}"> {/block}
{block keywords} <meta name="keywords" content="{$articles[0]->keywords}"> {/block}
{block title} <title> {$articles[0]->title} </title> {/block}
{block url} <meta property="og:url" content="{$articles[0]->urlseo} " /> {/block}
{block type}<meta property="og:type" content="website" /> {/block}
{block titleshort} <meta property="og:titleshort" content="{$articles[0]->titleshort} " /> {/block}
{block ogimage} <meta property="og:image" content="https://www.josefjebavy.cz/{$articles[0]->ogimage}" /> {/block}
{/block}
{block content}
?>
To mam na začiatku každej podstránky a moja všeobecná vyzerá takto:
Article.latte
<?php
{block content}
?>
Moj kod vyzera takto : https://github.com/…ates/article
Editoval Tomas8698 (17. 3. 2021 9:01)
- dakur
- Člen | 493
@Tomas8698 Nevím přesně, co dělají dva {block}
y
zanořené do sebe, ale určitě to nebyl záměr. {block}
ti má
definovat něco, co chceš použít někde jinde, ale zvlášť description,
keywords etc. někde jinde používat nechceš, jen dohromady. Dává tedy smysl
mít {block meta}
, ve kterém budou ty meta tagy, ale nebudou
uzavřené do dalších {block}
ů. Pokud pak použiješ v layoutu
{include meta}
, mělo by to fungovat.
tak mi vypiše chybu ze mata tag nepozna
Když sem napíšeš přesné znění chyby, bude se z toho lépe usuzovat, co se stalo a jaké je řešení.
- Tomas8698
- Člen | 109
Opravil som {block} ako si písal ale stále mi hlási chybu Cannot include undefined block ‚meta‘. Posielam aj obrázok a na obrázku je aj bDump kde si vypisujem údaje z databázy. Obrazok je na githube : https://github.com/…as/www/nette
- Tomas8698
- Člen | 109
@galab Dakujem, vyskusam. Tam ono mi to fungovalo len mam tam asi
20 podstranok v article: https://github.com/…ates/article
A v kazdej som mal ten isty {block meta}, a ked to presuniem do article.latte
(ktora mi vybera sablony), tak mi pise tu chybu co som pisal vyssie. Skusal som
si to na podstranke advice-analysis kde mam vymazane {block meta}, vlastne sa
snazim o to aby sa mi neopakoval kod.
Editoval Tomas8698 (21. 3. 2021 11:33)
- galab
- Backer | 74
Můžeš si to zjednodušit
layout.latte
<meta name="description" content="{ifset description}{include description}{else}Základní description{/ifset}">
ArticlePresenter
$this->template->articlePath = $urlseo . '.latte';
default.latte (v article adresáři)
{block content}{include $articlePath}{/block}
{block description}{$articles[0]->description}{/block}
...atd...
a v jednotlivých článcích už nemusíš dávat {block content}
Editoval galab (21. 3. 2021 12:01)
- Tomas8698
- Člen | 109
@galab Ďakujem pekne, tie meta tagy fungujú perfektne. A skúšal som si to zjednodušiť ako si písal lebo vyzerá to super, len teraz mi vykresľuje len text, keď odstránim {block content} zo šablón. https://github.com/…as/www/nette Ešte skúsim nájsť chybu lebo vyzerá to dobre.
- Tomas8698
- Člen | 109
V tom co som uploadol som nechtial zabudol vymazat {block content} https://github.com/…alysis.latte ,ked to vymazem a pojdem na stranku advice-analysis tak mi vypise len text ako mam na obrazku vyssie
Editoval Tomas8698 (21. 3. 2021 16:24)