Autor Zpráva
qteck
Profil
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
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
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ě.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: