Předani dat z externiho pole presenteru?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
marcelxy
Člen | 70
+
0
-

Zdravím, mám malý dotaz vím že to asi souvísí z mými hlubokými neznalostmi oop ale potřebuji předat data do presenteru které mám uložené v externím poli jakože:

$neco =array(
'polozka1'= >'nejaky text',
'polozka2'= >'nejaky text2');

toto mám v samostatném soboru .php .
Tak abych je pak v rendru mohl předat šabloně a ty data vykreslit, neví prosím někdo jak to pole dostanu do třídy presenteru abych sním mohl pak dál pracovat? v podstatě se jedna o data jako z db akorát jsou uložena v externím poli .Já vím že by se měly data číst z db ale potřebuji to z několika dúvodu takto. díky za rady

Editoval marcelxy (26. 2. 2014 18:45)

japlavaren
Člen | 404
+
0
-

ak su to data, pouzi model.

tj. vytvor model, ktory bude tie data nacitavat, model injectni do presentru a mas pravdepodobne co si chcel. staci takto, ci rozpisat??

marcelxy
Člen | 70
+
0
-

no asi nejakou malou pomoc bych jeste potreboval model chapu, ale nevim jak v tom modelu nactu to externi pole??
chci aby zustalo externi aby se dalo jednoduse i laikem editovat.Nechci ho cele prepsat do modelu chci ho tam nacist a kdyz to pujde v modelu nacist musi to jit i nacist v presenteru stejne tak jak muz cist z db v presenteru ne?

Editoval marcelxy (26. 2. 2014 19:41)

japlavaren
Člen | 404
+
0
-

„no asi nejakou malou pomoc bych jeste potreboval model chapu, ale nevim jak v tom modelu nactu to externi pole??“

  • posli sem ukazku, ako to externe pole vyzera

„chci aby zustalo externi aby se dalo jednoduse i laikem editovat.Nechci ho cele prepsat do modelu chci ho tam nacist a kdyz to pujde v modelu nacist musi to jit i nacist v presenteru stejne tak jak muz cist z db v presenteru ne?“

  • ano, mozes to nacitat i v presenteri. oddelene modely ocenis casom, ak budes ten isty kod potrebovat prepisat na viac miestach, preto ich doporucujem pouzivat i zo zaciatku

daj ukazku toho suboru, nech vymyslime, ako ho nacitat

vitkutny
Člen | 73
+
0
-

jestli jsem to dobře pochopil tak chceš mít někde soubor

<?php
$neco =array(
'polozka1'= >'nejaky text',
'polozka2'= >'nejaky text2');
return $neco;

načítat do proměné ze souboru můžeš takto

$mojePole = include __DIR__.'/cesta/k/souboru/s/polem.php';

místo toho můžeš zkusit dát to pole do souboru mojePole.neon

parameters:
	mojePole:
		polozka1: 'nejaky text'
		polozka2: 'nejaky text2'

v configu si tento soubor připojit

includes:
	- mojePole.neon

vytvorit modelovou tridu

class MojePoleRepository {
	private $mojePole;
	public function __construct(array $mojePole){
		$this->mojePole=$mojePole;
	}

	public function getData(){
		return $this->mojePole;
	}
}

tuto tridu zaregistrovat jako sluzbu a predat ji pole z konfigu

services:
	- MojePoleRepository(%mojePole%)

tuto službu si vyžádat v presenteru… pole máš v samostatným souboru a dokáže ho upravit i laik, pro laika myslím bude formát .neon i lepší

japlavaren
Člen | 404
+
0
-
parameters:
    mojePole:
        polozka1: 'nejaky text'
        polozka2: 'nejaky text2'

by som nedoporucoval!!! ak tam zada medzeru miesto tab/spravi inu chybu, rozbije to konfigurator a nespusti cely web

Editoval japlavaren (26. 2. 2014 22:33)

marcelxy
Člen | 70
+
0
-

no vypada uplne jednoduse a stejne jak sem uvedl na zacatku, proste to resim timto spusobem kvuli zjednoduseni editace ze veskere texty na strance mam ulozene v poli, nemusim vytvaret db a slozity admin pro obcasnou editaci to pole staci a i laik je v nem schopen ten text najit a upravit ,coz v tech sablonach bude delat tezko , v klasickem php to tak resim vzdy, ale v oop nevim jak to pole dostat do presenteru tak abych jednotlive promene pak predal sablone a nasledne je vykreslil.
takze externi soubor s texty.php

<?php
$textyProStr1= array(
'polozka1'=>'text1',
'polozka2'=>'text2',
'polozka3'=>'text3',);

$textyProStr2= array(
'polozka1'=>'text1',
'polozka2'=>'text2',
'polozka3'=>'text3',);

a pak uz potrebuju

public function renderDefault(){
(a tady potrebuji ten sobor texty.php)

$this->template->texty = $textyProStr1;
}

a v sablone pak

<div>{$texty->polozka1}</div>
<div>{$texty->polozka2}</div>

jak kdybych to vypisoval z db. nic vic, ale nejsem schopen to externi pole do toho rendru dostat.
To je moje otazka? a nechci to delat jinak pro jednoduchost, a nechci to delat pres confi.neon nebot to nemuze editovat laik zada tam spatne mezery a nepojede nic! diky za rady

Editoval marcelxy (27. 2. 2014 0:01)

Mysteria
Člen | 797
+
0
-

Co tohle?

public function renderDefault() {
	require_once __DIR__ . '/soubor_s_polem.php';
	$this->template->texty = $textyProStr1;
}
japlavaren
Člen | 404
+
0
-

Mysteria napsal(a):

Co tohle?

public function renderDefault() {
	require_once __DIR__ . '/soubor_s_polem.php';
	$this->template->texty = $textyProStr1;
}

ten tvoj kod ma niekolko zadrhelov. ako prve by som nepouzil require, ale include a kontroloval by som, ci sa to nacitalo ok

<?php
$data = @include __DIR__ . '/data.php';
if(!is_array($data)) $data = array();
?>

a ako pisem, cele by som to dal do modelu (kde si konstruktorom, ako parameter v v config.neon predam cestu k tomu suboru) co mi pride ako najcistejsie riesenie

Editoval japlavaren (27. 2. 2014 0:18)

marcelxy
Člen | 70
+
0
-

Mysteria napsal(a):

Co tohle?

public function renderDefault() {
	require_once __DIR__ . '/soubor_s_polem.php';
	$this->template->texty = $textyProStr1;
}

ok to sem udelal ale nejede to
dal sem

public function renderDefault(){
$promena = include __DIR__.'/texty.php';

$this->template->texty = $promena;
}

je to asi totez a haze to „Trying to get property of non-object“ ale az ze seblony ne z rendru kde pak mam

<div>{$texty->polozka1}</div> zkousel sem i <div>{$texty['polozka1']}

tak ted nevim jestli je cely postup spatny nebo jen zapis v sablone?

Editoval marcelxy (27. 2. 2014 0:18)

David Matějka
Moderator | 6445
+
0
-

Mne ta chybova hlaska prijde dost jasna „Trying to get property of non-object“, snazis se k poli pristupovat jako k objektu $texty->polozka1

japlavaren
Člen | 404
+
0
-

daj sem format toho tvojho suboru, ktory nacitavas, bez toho ti asi nik neporadi

Šaman
Člen | 2668
+
0
-

Model je obyčejná třída, která ti odstíní presenter od konkrétního úložiště. Prostě si vytvoř třídu NecoModel (NecoRepository) a tu předej do presenteru jako službu. Ta třida bude obsahovat metody getNeco(), getNecoJineho(), zcela podle pravidel OOP. Presenter pak nezajímá, kde ta třída data získá. Jestli z db, souboru, nebo jestli ta pole pro začátek třeba nakódíš přímo do těch get metod.

marcelxy
Člen | 70
+
0
-

matej21 napsal(a):

Mne ta chybova hlaska prijde dost jasna „Trying to get property of non-object“, snazis se k poli pristupovat jako k objektu $texty->polozka1

jo to sem taky pochopil ale jak to mam v te sablone napsat? abych tu promenou vypsal?
zkousel jsem i

<div>{$texty['polozka1']}

to chybu nevyhodi ale text taky nevypise tekze nevim?

David Matějka
Moderator | 6445
+
0
-

ukaz ten soubor, co inkludujes

marcelxy
Člen | 70
+
0
-

japlavaren napsal(a):

daj sem format toho tvojho suboru, ktory nacitavas, bez toho ti asi nik neporadi

<?php
$textyProStr1= array(
'polozka1'=>'text1',
'polozka2'=>'text2',
'polozka3'=>'text3',);

$textyProStr2= array(
'polozka1'=>'text1',
'polozka2'=>'text2',
'polozka3'=>'text3',);

to je on nic vic sloziteho pouze texty pro jednotlive stranky a potrebuju je predat sablone myslim ze to je primitivni vec v klasickem php dam include „texty.php“ a pak uz si pouzivam jednotlive polozky jak potrebuji ale tu nevim jak to do te sablony dostat?

Editoval marcelxy (27. 2. 2014 0:34)

marcelxy
Člen | 70
+
0
-

Šaman napsal(a):

Model je obyčejná třída, která ti odstíní presenter od konkrétního úložiště. Prostě si vytvoř třídu NecoModel (NecoRepository) a tu předej do presenteru jako službu. Ta třida bude obsahovat metody getNeco(), getNecoJineho(), zcela podle pravidel OOP. Presenter pak nezajímá, kde ta třída data získá. Jestli z db, souboru, nebo jestli ta pole pro začátek třeba nakódíš přímo do těch get metod.

jo to chapu ale jen potrebuju vedet jak ted v tom getNeco(){destanu ty data z toho externiho pole.php} nic vic, vy mi porad vsichni vysvetlujete to co uz vim ja akorat potrebuji ty texty.php zachovat aby je mohl editovat kdokoli ne to pole primo napsat do toho modelu! to vim ze jde ale pak uz to postrada tu jednoduchost te editace a proto to tak delam!

Editoval marcelxy (27. 2. 2014 1:02)

japlavaren
Člen | 404
+
0
-
<?php
class NecoModel
{
	public function getPage1(){
		// includom ziskas tu premennu v aktualnom kode
		@include __DIR__ . '/file.php';
		return $textyProStr1;
	}
}
?>

Editoval japlavaren (27. 2. 2014 1:09)

marcelxy
Člen | 70
+
0
-

japlavaren napsal(a):

<?php
class NecoModel
{
	public function getPage1(){
		// includom ziskas tu premennu v aktualnom kode
		@include __DIR__ . '/file.php';
		return $textyProStr1;
	}
}
?>

jejej diky moc to sem potreboval tak primitivni reseni diky za trpelivost!! uz to jede!

Editoval marcelxy (27. 2. 2014 7:17)