Neplatna premena pri vytahovani dat z databazy cez foreach cyklus
- Tomas8698
- Člen | 109
Zdravim,
Som s nette zaciatocnik, ked sa snazim vytiahnut data z db tak my tracy vypise
chybu: Undefined variable: packages
Tu je moja homepage presenter:
<?php
declare(strict_types=1);
namespace App\Presenters;
use Nette\Application\UI\Form;
use Nette;
use Nette\Mail\Message;
use Nette\Mail\SendmailMailer;
final class HomepagePresenter extends Nette\Application\UI\Presenter
{
/** @var Nette\Localization\ITranslator @inject */
public $translator;
public function renderDefault(): void
{
$langs = [‚cs‘, ‚en‘]; // languages in application
$httpRequest = $this->getHttpRequest();
$locale = $httpRequest->detectLanguage($langs);
if (is_null($locale)) {
$lang = „cs“;
}
}
/** @var Nette\Database\Context */
private $database;
public function __construct(Nette\Database\Context $database) {
$this->database = $database;
}
private $predmet = "";
public function renderPackage(String $urlseo): void
{
//$this->template->formTitle=$urlseo;
$package=$this->database->table(‚packages‘)->where(‚urlseo‘,
$urlseo)->fetch();
// TODO pokud nenajde vyhod error
// var_dump( $this->template->package);
if (!$package) {
$this->error(‚Stránka nebyla nalezena‘);
}
$this->template->package=$package;
$this->predmet = $package[‚subject‘];
$this->template->formTitle=$package[‚formtitle‘];
}
public function renderSitemap(): void
{
$packages = $this->database->table(‚packages‘)->fetchAll();
//pouziji jako hlavni sablonu prazdnou sablonu
$this->setLayout(‚empty‘);
// zajisti genrovani ablolutnich URL
$this->absoluteUrls = true;
$this->template->packages = $packages;
$this->getHttpResponse()->setContentType(‚application/xml‘);
}
Moje default.latte, kde pouzivam foreach
{foreach $packages as $pakage}
<div class=„col-md-6 col-lg-4 col-xs-12 order_panel“ >
<div class=„plan“>
<div class=„plan-title“>
<h3>{$pakage[‚titleshort‘]}</h3>
{*
<small>{$pakage[‚price‘]} Kč</small>
*}
</div>
{$pakage[‚textshort‘]|noescape}
<br>
<a n:href=„Homepage:package $pakage[‚urlseo‘]“ class=„btn
btn-warning“>
{_pricing.btn-princing}</a>
</div>
</div>
{/foreach}
cast z db
INSERT INTO packages
(id
, locale
,
urlseo
, titlelong
, textlong
,
titleshort
, textshort
, keywords
,
description
, price
, callaction
,
subject
, formtitle
) VALUES
(1, ‚cs_CZ‘, ‚gitlab-server‘, ‚GitLab na vlastním serveru‘,
‚<p>\r\nGitLab: git repositář a správa projektů.\r\n</p>\r\n
<p>\r\n GitLab: je nástroj pro správu projektů.\r\n Je cílený na
vývojáře softwaru, proto obsahuje i <b>Git</b> repositář.\r\n
</p>\r\n\r\n <p>\r\n Pro střední a vetší firmy je nutností
nástroj pro vedení projektů.\r\n <a
href=\„https://blog.josefjebavy.cz/unix/gitlab\“>GitLab</a>\r\n je
ideální nástroj, který umožňuje vedení úkolů u projektu a tak
zpřehlednění a zefektivnění vývoje.\r\n Gitlab je možno provozovat na
vlastním fyzickém nebo virtuaálním (<b>VPS</b>) server a tak
budete mít aplikaci i data plně pod svoji kontrolou.\r\n
</p>\r\n\r\n\r\n\r\n <p>\r\n Součásti GitLabu je:\r\n
<ul>\r\n <li>Git repositář.</li>\r\n <li>Obsahuje
přehledné webové rozhraní.</li>\r\n <li>Správu uživatelů a
nastavení přístupových práv k projektům.</li>\r\n <li>Vedení
projektů a ukolů.</li>\r\n <li>CI/CD – kontinuální vývoj a
kontinuální nasazování.</li>\r\n <li>Automatizace</li>\r\n
<li>Možnost provozovat GitLab na vlastním serveru.</li>\r\n
<li>Wiki pro vedení dokumentace.</li>\r\n\r\n\r\n
</ul>\r\n\r\n </p>\r\n‘, ‚GitLab server‘,
‚<ul>\r\n<li>\r\nInstalace aplikace GitLab, která
umožňuje:</li>\r\n <li>Verzování vyvíjeného
software</li>\r\n <li>Continuous
Integration</li>\r\n <li>Vedení
úkolů</li>\r\n <li>Řízení
projektů</li>\r\n <li>Vedení wiki/dokumentace
projektu</li>\r\n <li>Možnost přiobjednat školení a
následné podpory</li>\r\n </ul>‘, ‚GitLab, git, správa
úkolů, \r\n project management, server, vps‘, ‚Instalace GitLabu na
privátní server.‘, 8500, ‚Chcete zefektivnit GitLab nainstalovat nebo jen
s GitLabem pomoci a zefektivnit práci? Ozvěte s GitLabem vám pomůžu.‘,
‚Chci pomoci s GitLabem‘, ‚Chci pomoci s GitLabem‘),
(2, ‚en_US‘, ‚gitlab-server‘, ‚GitLab on its own server‘,
‚<p>\r\nGitLab: git repository and project management.\r\n</p>\r\n
<p>\r\n GitLab: is a project management tool.\r\n It is aimed at software
developers, so it includes i <b>Git</b> repository.\r\n
</p>\r\n\r\n <p>\r\n For medium and large companies, a project
management tool is a must.\r\n <a
href=\„https://blog.josefjebavy.cz/unix/gitlab\“>GitLab</a>\r\n is
an ideal tool that allows you to manage tasks on the project and thus make
development clearer and more efficient.\r\n Gitlab can be run on its own
physical or virtual(<b>VPS</b>) server and so you will have full
control of the application and data.\r\n </p>\r\n\r\n\r\n\r\n
<p>\r\n GitLab components include:\r\n <ul>\r\n <li>Git
repository.</li>\r\n <li>It contains a clear web
interface.</li>\r\n <li>User management and setting access rights to
projects.</li>\r\n <li>Project and task management.</li>\r\n
<li>CI / CD – continuous development and continuous
deployment.</li>\r\n <li>Automatization</li>\r\n
<li>Ability to run GitLab on your own server.</li>\r\n
<li>Documentation management wiki.</li>\r\n\r\n\r\n
</ul>\r\n\r\n </p>\r\n‘, ‚GitLab server‘,
‚<ul>\r\n<li>\r\nInstalling GitLab, which allows you
to:</li>\r\n <li>Versioning of developed
software</li>\r\n <li>Continuous
Integration</li>\r\n <li>Task
management</li>\r\n <li>Project
management</li>\r\n <li>Management of wiki / project
documentation</li>\r\n <li>Possibility to order additional
training and follow-up support</li>\r\n </ul>‘, ‚GitLab,
git, task management, \r\n project management, server, vps‘, ‚Installing
GitLab on a private server.‘, 8500, ‚Do you want to make GitLab more
efficient to install or just help and streamline your work with GitLab? Contact
GitLab and I will help you.‘, ‚I want to help with GitLab‘, ‚I want
to help with GitLab‘);
Editoval Tomas8698 (21. 1. 2021 19:32)
- nightfish
- Člen | 519
V metodě renderDefault()
si nepředáváš do šablony
proměnnou $packages
. Takže když ji pak chceš použít
v šabloně default.latte
, Tracy vyhodí chybu. Inspirovat se
můžeš v quick startu
- Tomas8698
- Člen | 109
nightfish napsal(a):
V metodě
renderDefault()
si nepředáváš do šablony proměnnou$packages
. Takže když ji pak chceš použít v šablonědefault.latte
, Tracy vyhodí chybu. Inspirovat se můžeš v quick startu
Dakujem pekne velmi pomohlo
- Tomas8698
- Člen | 109
Este by som sa chcel opytat, ze mam v databazy uvedeny locale no teraz mi nerozdeluje podla jazyka ale vracia vsetko aj anglicke aj ceske texty my vypisuje na stranku. Ze ako by som to rozdelil alebo co pridat do kodu aby ked mam v localy cz tak mi vrati len ceske texty a pri ang rovnako?
- Tomas8698
- Člen | 109
V render default mam premenu lang ale nepredavam ju do databaze
<?php
declare(strict_types=1);
namespace App\Presenters;
use Nette\Application\UI\Form;
use Nette;
use Nette\Mail\Message;
use Nette\Mail\SendmailMailer;
final class HomepagePresenter extends Nette\Application\UI\Presenter
{
/** @var Nette\Localization\ITranslator @inject */
public $translator;
public function renderDefault(): void
{
$langs = [‚cs‘, ‚en‘]; // languages in application
$httpRequest = $this->getHttpRequest();
$locale = $httpRequest->detectLanguage($langs);
if (is_null($locale)) {
$lang = „cs“;
}
$packages=$this->database->table('packages')->fetchAll();
$this->template->packages=$packages;
}
?>
- Tomas8698
- Člen | 109
nightfish napsal(a):
@Tomas8698 Předáváš si v
renderDefault()
proměnnou$lang
do SQL dotazu?
Dakujem @nightfish, RenderDefault() mam tak ako tu vyssie. Premenu si do databze nepredavam. Hladal som aj na internete no nemôžem nic najst. Mam k tomu pristupovat nejak cez $packages=$this->database→ … ? alebo je na to iny sposob?
- Tomas8698
- Člen | 109
galab napsal(a):
$packages = $this->database->table('packages')->where('locale', $lang)->fetchAll();
Ale musíš si upravit $lang proměnnou, aby odpovídala tomu, co máš v db, protože v db máš locale cs_CZ nebo en_US a v $lang máš jenom cs, případně en
Dakujem za radu, cize teoreticky by som mohol zmenit aj v locale v db z cs_CZ na cs? Bude to mat nejaky vplyv?
- Tomas8698
- Člen | 109
Vyskusal som to takto ako som pisal vyssie a nefunguje to, môže byt ze som to zadal zle?
<?php
public function renderDefault(): void
{
$langs = ['cs', 'en']; // languages in application
$httpRequest = $this->getHttpRequest();
$locale = $httpRequest->detectLanguage($langs);
if (is_null($locale)) {
$lang = "cs";
}
$packages=$this->database->table('packages')->where('locale', $langs)->fetchAll();
$this->template->packages=$packages;
}
?>
DO where(‚locale‘, $langs) som zadal $langs namiesto $lang pretoze hlasilo chybu ze nepzna $lang
v db som zmenil z cs_CZ na cs a pri en tak isto
Dakujem za pomoc
- Tomas8698
- Člen | 109
Dakujem chlapi nakonie som mal chybu ze namiesto $lang si ten request z url vytahujem do premenej $locale
<?php
public function renderDefault(): void
{
$langs = ['cs', 'en']; // languages in application
$httpRequest = $this->getHttpRequest();
$locale = $httpRequest->detectLanguage($langs);
if (is_null($locale)) {
$lang = "cs";
}
$packages=$this->database->table('packages')->where('locale', $locale)->fetchAll();
$this->template->packages=$packages;
}
?>
Dakujem este raz za pomoc