Autor | Zpráva | ||
---|---|---|---|
qteck Profil |
#1 · Zasláno: 6. 2. 2015, 12:47:35 · Upravil/a: qteck
Ahoj,
napsal jsem si třídu na include stránky - modelu a šablon zvlášť. V modelu jsou nějaké třídy a proměnné a očekával bych že budou v šabloně po volání patřičných metod dostupné, ale nejsou. Takhle vypadá obsluha vkládání stránek: https://github.com/qteck/evelinkars/blob/master/model/pageManager.php ve zkratce to v indexu volám takto: modelIncluder() // ten původní modelIncluder je na githubu zakomentovaný. <html> templatesIncluder() //zde bych očekával že budou proměnné z modelu dostupné. </html> https://github.com/qteck/evelinkars/blob/master/index.php model se vloží a všechno co je v něm a co v něm volám funguje jak má. Tak jsem si tam definoval nějaké proměnné, které bude potřeba v šabloně k rozlišení práv. pak zavolám templatesIncluder() a chci si s nima hrát. Šablona se vloží. ale proměnné které jsou v modelu jsou v té šabloně nedostupné. Moje otázka zní jak tohle efektivně vyřešit? a proč jsou ty proměnné nedostupné? Odkomentovaná funkce modelIncluder() je test a vypadá takto: function modelIncluder() { include "model/login.php"; include "templates/login.php"; } pokud to vkládám takhle na drzáka tak je ta třída, metody i proměnné, v té šabloně dostupná Díky. ještě mě napadlo že bych to takhle teoreticky taky mohl volat jen tu šablonu načíst do proměnné a pak jí vypsat dole. ale to je asi velká prasárna což? :D |
||
Joker Profil |
#2 · Zasláno: 6. 2. 2015, 13:14:04
qteck:
„napsal jsem si třídu na include stránky - modelu a šablon zvlášť“ Tak jednak podle kódu tady je to funkce a jednak, má to smysl? Předpokládám, že se to stejně dělá jen jednou a na jednom místě, takže proč tam prostě místo volání té funkce nevrazit ty dva include? Funkce se mají používat pro realizaci funkčnosti, která může být potřeba na více místech, ne jimi obalovat každou sekvenci příkazů. |
||
qteck Profil |
#3 · Zasláno: 6. 2. 2015, 13:31:07 · Upravil/a: qteck
no je to v indexu, je to na dvou místech. je to mezi html kódem. proto dvě metody
http://evelinka.kerouac.cz/index.php?page=login.php tak jsem to nakonec vyřešil takto: index.php <?php require_once __DIR__ . '/vendor/autoload.php'; require_once __DIR__ . '/model/pageManager.php'; use Tracy\Debugger; session_start(); Debugger::enable(Debugger::DEVELOPMENT); $pages = new Model\PageManager(); include $pages->checkDirectories('model/'); ?> <!DOCTYPE html> <!-- To change this license header, choose License Headers in Project Properties. To change this template file, choose Tools | Templates and open the template in the editor. --> <html> <head> <title>Wild Evelinka and our love :-*</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script src="vendor/components/jquery/jquery.js"></script> </head> <style> body{font-size: 15px;font-family: times new roman;width: 720px;margin: auto;} #article{} span{font-size: 10px;} </style> <body> <div style="text-align: center;margin: 40px 0;"> <div style="float: left;"> <a href="index.php"><img src="images/evelinka.jpg" style="width: 100px;height: 100px;" alt="logo"></a> </div> <div style=""> <p> How I met the most beautiful girl in the world <br> and <br> she got me! <br> </p> <p style=""><a href="index.php?page=login.php">Facebook login</a></p> </div> </div> <div id="article"> <?php include $pages->checkDirectories('templates/'); ?> </div> </body> </html> <?php namespace Model; class PageManager { public $page; public $files; function __construct() { $this->page = isset($_GET['page'])? (filter_input(INPUT_GET, 'page', FILTER_SANITIZE_FULL_SPECIAL_CHARS)):null; } function checkDirectories($dir) { if(is_dir($dir)) { foreach (glob($dir . '*') as $value) { $e = array_reverse(explode('/', $value)); $this->files[] = $e[0]; } } if($this->files && in_array($this->page, $this->files)) { $path = $dir . $this->page; } else { $path = $dir . "default.php"; } return $path; } } Jednoduché řešení. Jsem to chtěl mít tak dokonalý až jsem to celý na chvilku posr*al Díky každopádně. |
||
Časová prodleva: 10 let
|
0