Főoldal   Súgó Bejelentkezés Regisztráció  
Üdvözlünk, Vendég. Kérlek jelentkezz be vagy regisztrálj.

Jelentkezz be a felhasználóneveddel, jelszavaddal és add meg a munkamenet hosszát
1 évet fizetsz kettőt kapsz a CakePHP tárhely programban!
Silver csomag pl.: 1000MB tárhely, MySQL vagy PostgreSQL.
.hu domain címmel - 12.900 Ft + Áfa / 2év
Hírek: Exkluzív bejelentés CSAK CakePHP.hu fórumlátogatóknak!  Általános blabla...
Oldalak: [1]   Le
Nyomtatás
Téma: Elements honnan tudja melyik kontrollerből vegye az adatot  (Megtekintve 93 alkalommal)
« Dátum: 2011. November 03. - 15:46:31 »
kisspepe Nem elérhető
Kölyök tag

Profil megtekintése E-mail
**
Hozzászólások: 88



Sziasztok!

Már egyszer használtam elements-et, hogy a bejelentkező form-ot kitegyem minden oldalra. Ez működik is.

Most viszont arra lenne szükségem, hogy az adatbázis settings táblájából a store_name mező értékét kiírassam a header-be.

settings_controller header metódusa:
Kód:
function header() {
$this->set('header', $this->Setting->read(null, 1));
}

\elements\settings\header.ctp
Kód:
<div id = "header_box">
<?php echo $header['Setting']['store_name']?>
</div>

A default_layout-ba így rekom be a megfelelő helyre:
Kód:
<?php echo $this->element('settings/header'); ?>

A probléma az, hogy az elements az ugye nem látja a $header változót. Hogyan tudom megadni neki azt, hogy az a settings_controller-ben van?

Keresgéltem google-en, de amiket találtam azt nemigen értem. Próbálkoztam velük, de csak rosszabb lett a helyzet, mert az oldalt sem akarta megjeleníteni.
Naplózva
« Válasz #1 Dátum: 2011. November 03. - 19:25:21 »
kisspepe Nem elérhető
Kölyök tag

Profil megtekintése E-mail
**
Hozzászólások: 88



Megoldásom még mindig nincs.

Kézikönyv alapján próbálkoztam a következővel:

Controller:
Kód:
function _header() {
return $this->Setting->read(null, 1);
}

element:
Kód:
<?php
        $header 
$this->requestAction('/settings/_header');
?>


<div id = "header_box">
<?php echo $header['Setting']['store_name']?>
</div>

Azonban ha ezt a kódot beteszem, akkor csak hófehér szövegmentes oldalakat kapok.
Naplózva
« Válasz #2 Dátum: 2011. November 03. - 19:45:26 »
sipiatti Nem elérhető
Újonc

Profil megtekintése E-mail
*
Hozzászólások: 43



Egy pici következetlenség van a dologban.
Hogy tiszta legyen, és ne az MVC metodika ellen dolgozzunk, tisztázzunk pár dolgot.

1. az element a view része. azért element, mert olyan részletről van szó, amit több viewban is ugyanúgy meg akarunk jeleníteni
2. A view a controllertől kapja az adatait, a controllerben meghívott $this->set('varname','value') metódussal. Ekkor a viewban a $varname változó értéke 'value' lesz
3. A viewból értéket adhatunk át az elementnek, a következő metódussal:
Kód:
$this->element('elementneve',array('varnameinelement'=>'value'));
Info: http://book.cakephp.org/view/1081/Elements#Passing-Variables-into-an-Element-1082
4. a requestAction dolgot ne erőltessük, mert ez az egész MVC kikerülése. Az adatokat készítse elő a controller a modelekből, és adja át a viewnak. A view pedig használhat elementeket ha úgy tartja kedve.

Inkább csinálj az app_controller-be egy metódust _header néven amiben használsz majd egy $this->loadModel('Setting') -et, és returnnal visszaadod a kívánt értéket, és minden controller action-ben meghívod ahol kell, $this->set('Settings',$this->_header); majd a viewban a $Settings változót passzolod az elementnek. Így nem sérül az MVC.
Naplózva
« Válasz #3 Dátum: 2011. November 03. - 22:51:43 »
kisspepe Nem elérhető
Kölyök tag

Profil megtekintése E-mail
**
Hozzászólások: 88



Ok, kösz. Végülis találtam egy a te megoldásodhoz hasonló megoldást a 2007-es forumtémákban, csak mivel más oldalakon a requestAction-t használták, gondoltam az 1.3-as Cake-ben már ezt megoldották, hogy ne az appController-be keljen behívni a modelleket.

Mindegy az a lényeg, hogy működik.
Naplózva
Oldalak: [1]   Fel
Nyomtatás
Ugrás:  

2007 CakePHP Magyarország Fóruma
Powered by SMF 1.1.4 | SMF © 2006, Simple Machines LLC
Magyar fordítás: SMF Magyarország
| Üzemelteti / Hosting: Elite Media     -     Támogatóink: Loovers Szexshop | És a HHO generátor