Autor Zpráva
Snipo
Profil
Ahojte, tak som si povedal, že si skúsim vytvoriť svoj vlastný redakčný systém. Problém je v tom, že ma nenapadá ako urobiť niečo ako šablonovací systém. Moja prvá myšlienka bola takáto no nefunguje mi v tom dosadenie titulku a description.

Pre lepšiu orientáciu kostra projektu:
class
  -Page.php
theme
  css
    -main.css
  -install.php
-install.php   
 
Page.php
<?php

class Page {
    public $title;
    public $description;
    public $type;

    public function __construct($title, $description, $type)
    {
        $this->title = $title;
        $this->description = $description;
        $this->type = $type;
    }

    public function renderInstall()
    {
        include 'theme/install.php';
    }
}
install.php (v zložke theme)
<!DOCTYPE html>
<html>
<head>
    <title><?= $page->title ?></title>
    <meta name="description" content="<?= $page->description ?>">
    <meta charset="UTF-8">
    <link rel="stylesheet" type="text/css" href="theme/css/main.css">
</head>

<body>

<div id="container">
    <form method="post">
        <fieldset>
            <legend>Admin</legend>
        </fieldset>

        <fieldset>
            <legend>Databáza</legend>
        </fieldset>

        <input type="submit" value="Inštalovať">
    </form>
</div>

</body>
</html>

install.php
<?php
require 'class/Page.php';
$page = new Page('Inštalácia', 'Inštalácia systému', 'default');
$page->renderInstall();
?>
Alphard
Profil
Minimálně je v šabloně třeba k proměnným přistupovat přes $this místo přes $page.
Snipo
Profil
To som skúšal, a stále nič. Nenapadá ma ako tam dostať tu premennú.
Alphard
Profil
A jak se to chová? Nějaké chybové hlášky? PHP přistup k neexistující proměnné nepřechází mlčením... Nejčastější potíže s PHP (FAQ) » Zapnutí výpisu všech chyb a varování
Snipo
Profil
Ak tam mám $page->title tak vyhodí chybu na install.php (ten v theme): Undefined variable a Trying to get property of non-object. Takže predpokladám, že sa tie premenné volajú ešte pred tým, než sa vložia do install.php (normal).

EDIT:// Vyriešil som to tak, že ešte pred volaním tej funkcie som premenné zadefinoval ako $GLOBALS['premenna'] a potom iba dosadil. Je to dobré riešenie? No a ešte by som ale potreboval, žeby sa užívateľ nemohol dostať ku install.php v theme. A to absolútne neviem ako dosiahnuť.
rafej
Profil
Snipo:
Ak tam mám $page->title tak vyhodí chybu na install.php (ten v theme): Undefined variable a Trying to get property of non-object. Takže predpokladám, že sa tie premenné volajú ešte pred tým, než sa vložia do install.php (normal).

Vyhodí chybu, protože metodě renderInstall nepředáváš žádné parametry, takže uvnitř, kde se načítá šablona, nejsou definované. Musíš je předat (v závorce).

Snipo:
EDIT:// Vyriešil som to tak, že ešte pred volaním tej funkcie som premenné zadefinoval ako $GLOBALS['premenna'] a potom iba dosadil. Je to dobré riešenie?

Není to dobré řešení.

Snipo:
> No a ešte by som ale potreboval, žeby sa užívateľ nemohol dostať ku install.php v theme. A to absolútne neviem ako dosiahnuť.

Pokud bude mít uživatel přístup na server (např. přes FTP), tak to nelze. Pokud myslíš uživatele aplikace, tak lze přístup do adresáře zakázat v souboru .htaccess.
Kubo2
Profil
Snipo:
No a ešte by som ale potreboval, žeby sa užívateľ nemohol dostať ku install.php v theme.

Vytvor súbor theme/.htaccess:

Order deny,allow
Deny from all
Snipo
Profil
To síce zaberá ale problém ale potom je problém s css súbormi ktoré sa nenačítajú.
Kubo2
Profil
Potom si ich buď daj do iného adresára miesto theme/ alebo skús toto:

<FilesMatch "\.php$">
    Order deny,allow
    Deny from all
</FilesMatch>
Alphard
Profil
Kubo2 [#9]:
Blbost, takhle se vypustí do světa konfigurační soubory (.ini, .config), logy (.log, .txt), info o databázi (.sql) apod.
Veřejnou a neveřejnou část webu je třeba v adesářích zcela oddělit.

rafej [#6]:
Ta chyba říká jen to, co jsem vám řekl již dříve. Měl jste to zkusit po zanesení úprav.
Kubo2
Profil
Alphard:
Blbost, takhle se vypustí do světa konfigurační soubory (.ini, .config), logy (.log, .txt), info o databázi (.sql) apod.
Toho som si samozrejme vedomý, ale nemal som pocit, že by niečo z toho mohol mať Snipo uložené v adresári theme (podľa názvu). Tá druhá veta je ale úplná pravda.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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