Neplatna premena pri vytahovani dat z databazy cez foreach cyklus

Tomas8698
Člen | 109
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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?

nightfish
Člen | 519
+
0
-

@Tomas8698 Předáváš si v renderDefault() proměnnou $lang do SQL dotazu?

Tomas8698
Člen | 109
+
0
-

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
+
0
-

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?

galab
Backer | 74
+
0
-
$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

Tomas8698
Člen | 109
+
0
-

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
+
0
-

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
+
0
-

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