Generování linku ze stringu
- Jan Blažek
- Člen | 36
Ahojte, potřeboval bych vygenerovat odkaz ze stringu, který mám
v databázi.
Vytvořil jsem si na to jednoduchou funkci, která mi ořeže string a nakonec
z něj vyleze
$data = ['Article:detail', 'parametr'];
Musím říct, že jsem to do toho linkGeneratoru zkoušel nacpat všemi
způsoby, co mě napadly. Ale na ten správný jsem zjevně nenašel.
Tady jsou mé pokusy.
$this->linkGenerator->link($data[0], $data[1]); // $data[1] must be of the type array
$this->linkGenerator->link($data[0], array($data[1])); // Undefined offset 1
$this->linkGenerator->link($data[0], array('route' => $data[1])); // Undefined offset 1
Mohli byste mi poradit s tím generováním linku prosím?
Editoval Jan Blažek (31. 7. 2017 10:09)
- matopeto
- Člen | 395
Malo by to ist nejako takto:
(podla dokumentacia: https://github.com/…enerator.php#L45
prvy parameter je destinacia, teda string ako by si ho zapisal v latte, a druhy
su nejake ine riadiace parametre)
<?php
$this->linkGenerator->link("{$data[0]} {$data[1]}");
?>
Edit: Ale len tipujem m z toho co vidim v nette zdrojaku.
Editoval matopeto (31. 7. 2017 10:31)
- Jan Blažek
- Člen | 36
Teď mi to píše.
„Invalid link destination ‚Article:detail sefdsfsef‘.“
v ArticlePresenter.php mám
function renderDetail($route)
{
$article = $this->articleFacade->getArticleByRoute($route);
if(!$article)
$this->error();
$this->template->article = $article;
}
a v routru
$router[] = new Route('[<locale=cs cs|en>/]article/detail/<route>', 'Article:detail');
Editoval Jan Blažek (31. 7. 2017 10:21)
- David Matějka
- Moderator | 6445
mel by fungovat ten treti zapis:
$this->linkGenerator->link($data[0], array('route' => $data[1])); // Undefined offset 1
ale dle te chyby to spis vypada, ze neexistuje $data[1]
. jsi si
jisty, ze ten obsah pole je opravdu takovy, jako pises? nebo na kterem radku to
ukazuje tu undefined offset chybu? primo v tom volani, nebo v nejake internal
metode nette?
- Jan Blažek
- Člen | 36
Chci v homepage: mít takový seznam novinek.
Takže se mi do databáze ukládá něco jako
"Uživatel ... přidal článek ..."
Tak mě napadlo, že by bylo fajn, kdyby na to uživatel mohl rovnou kliknout, takže jsem to změnil na
Uživatel ... přidal článek <a href="{link Article:detail $article->route}">...</a>
Podle mě na to jdu zbytečně moc složitě, ale v HomepagePresenter mám
public function renderDefault()
{
$this->template->addFilter('link', function ($vals){
$pom= mb_strpos($vals, '{') + 6;
if($pom === false)
return $vals;
$pomII = mb_strrpos($vals, '}');
$str = mb_substr($vals, $pom, $pomII - $pom);
$data = explode(' ', $str);
return 'link <a href="' . $this->linkGenerator->link($data[0], array('route' => $data[1])). '">link</a>'; // v returnu to okarát nahradí {link ...} za vygenerovaný odkat
});
$this->template->informations = $this->infoFacade->getInfo();
}
s tím že v latte zavolám akorát |link.
Chyba mi vyskakuje na posledním řádku funkce, která se zavolá při |list
v latte. Jak je ten linkGenerator.
Vyskočí mi prostě
Notice
Undefined offset: 1
Screen z Xdebugeru
https://ctrlv.cz/v7Lx
- matopeto
- Člen | 395
Ja by som siel do toho inak,
do db by som ulozil zaznam typu: kde si zapises typ notifikacie a id odkzau
|user_id|action_type|action_id|
| 12|article_add| 134|
a potom by som v latte:
{foreach $notificaions as $n}
{if $n->action_type === 'article_add'}
Uzivatel {$n->users->name alebo tak nejako... :) } pridal clanek <a n:href="Articles $n->action_id"> ...
...
Pripadne este jednoduchsie ak chces iba pridavanie clankov
vythiahnes si clanky zoradene podla casu pridania, a vypises si to v latte:
{foreach $recentArticles as $a}
Uzivatel {$a->user_name alebo tak nejako... :) } pridal clanek <a n:href="Articles $a->article_id">
Editoval matopeto (31. 7. 2017 11:10)