| Autor | Zpráva | ||
|---|---|---|---|
| Trickle Profil |
Ahoj prosím o pomoc. Učím se oop programování. Tvořím redakční system a v administraci mám nastavení ve kterém se bude měnit Název stránky, administrace a patičky zatím. Změna v <title> ale funguje jen když jsem aktivní v nastaveni.php pak když se překliknu třeba napsat novinku tak je titulek už notifikován že není nadefinována proměná a neplatný foreach. To je logické když je definován jinde. Ale jak docílit abych měl pořád titulky zobrazené v jakémkoliv souboru?
zobrazená chyba v jiné částí administrace třeba napsat novinku : Notice: Undefined variable: nastaveni in D:\server\root\admin\sablony\vkladane\zahlavi.php on line 4 Warning: Invalid argument supplied for foreach() in D:\server\root\admin\sablony\vkladane\zahlavi.php on line 4 zahlavi.php <!DOCTYPE html> <html lang="cs"> <head> <meta charset="UTF-8" /> <title>CSLP s.r.o. | Administrace</title> <meta name="viewport" content="width=device-width", initial-scale=1.0" /> <link href="/verejne/css/bootstrap.min.css" rel="stylesheet" media="screen" /> <link href="/verejne/css/Markdown.css" rel="stylesheet" media="screen" /> <link href="/verejne/css/base.css" rel="stylesheet" media="screen" /> </head> <body> <table cellpadding=0 cellspacing=0 border=0> <tr> <td WIDTH=125 valign=top> <img src="../images/1px.gif" width=125 height=1 vspace=2><br><br><br><br><br> <?php if(!empty($navigace)): ?> <nav class="navbar navbar-default" role="navigation"> <div class="container-fluid"> <center><b><u>Nastaveni</u></b><br></center> <a href="<?php echo $this->zaklad->url . 'nastaveni.php'; ?>" class="bnt btn-sm"><span class="glyphicon glyphicon-plus"></span> Nastavení</a> <?php if ($navigace == 'nastaveni'): ?> <?php endif; ?> <br><br> <center><b><u>Novinky</u></b><br></center> <a href="<?php echo $this->zaklad->url . 'novinky.php?akce=pridej'; ?>" class="bnt btn-sm"><span class="glyphicon glyphicon-plus"></span> Přidat Novinku</a> <?php if ($navigace == 'novinky'): ?> <?php endif; ?> <br> <a href="<?php echo $this->zaklad->url . 'novinky.php'; ?>"> <span class="glyphicon glyphicon-list"></span> Příspěvky</a> <?php if ($navigace == 'komentare'): ?> <?php endif; ?> <br> <a href="<?php echo $this->zaklad->url . 'komentare.php'; ?>"> <span class="glyphicon glyphicon-comment"></span> Komentáře</a> <br><br><br> <a href="<?php echo $this->zaklad->url . 'prihlaseni.php?stav=odhlasit'; ?>"> <span class="glyphicon glyphicon-log-out"></span> Odhlasit</a> </div> </nav> </td> <?php endif; ?> nastaveni.php <?php
require_once('administrace.php');
require_once('../funkce/MarkdownInterface.php');
require_once('../funkce/Markdown.php');
class Nastaveni extends Administrace {
public function __construct() {
parent::__construct();
if (!empty($_GET['akce'])){
switch ($_GET['akce']){
case 'uloz':
$this->ulozNastaveni();
break;
default:
$this->vypisNastaveni();
break;
}
} else {
$this->vypisNastaveni();
}
}
public function vypisNastaveni() {
$nastaveni = $this->db->vyber('nastaveni', array('*'));
require_once 'sablony/sprava-nastaveni.php';
}
public function upravNastaveni() {
if (!empty($_GET['id']) && is_numeric($_GET['id'])) {
$nastaveni = $this->db->vyber('nastaveni', array('*'),
array('id' => $_GET['id']));
$nastavena = $nastaveni[0];
require_once 'sablony/sprava-nastaveni.php';
}
}
public function ulozNastaveni() {
$data = array();
$podminka = array();
if (!empty($_POST['nastavena'])) {
$nastavena = $_POST['nastavena'];
}
if (!empty($nastavena['nazev_stranky'])){
$data['nazev_stranky'] = $nastavena['nazev_stranky'];
}
if (!empty($nastavena['nazev_administrace'])) {
$data['nazev_administrace'] = $nastavena['nazev_administrace'];
}
if (empty($podminka)){
$ulozeno = $this->db->aktualizuj('nastaveni', $data);
} else {
$ulozeno = $this->db->aktualizuj('nastaveni', $data, $podminka);
}
if ($ulozeno !==false){
$oznameni = 'Nastavení bylo úspěšně uloženo.';
header('Location: ' . $this->zaklad->url . 'nastaveni.php?oznameni=' .
urlencode($oznameni));
exit();
} else {
$chyba = 'Nepodařilo se uložit nastavení.' +
'Zkuste to prosím později.';
require_once 'sablony/sprava-nnastaveni.php';
}
}
}
$adminNastaveni = new Nastaveni();
?> |
||
| Trickle Profil |
Trickle:
sprava-nastaveni.php <?php
$navigace = 'nastaveni';
require_once('vkladane/zahlavi.php');
?>
<form action="<?php echo $this->zaklad->url . 'nastaveni.php?akce=uloz'; ?>"
method="post" class="form-horizontal" role="form">
<td valign=top width=7><img src="../images/1px.gif" width=7 height=1></td>
<td WIDTH="100%" valign=top>
<img src="../images/1px.gif" width=1 height=5><br>
<table class="table table-striped" >
<thead>
<tr>
<td><b><u>Titulek: </u></b></td>
<td><b><u>Editace </u></b></td>
<td><b><u> </u></b></td>
</tr>
</thead>
<tbody>
<?php require_once('../funkce/sablony/oznamovaci-oblast.php'); ?>
<?php foreach ($nastaveni as $nastavena): ?>
<tr>
<td><h4><?php echo (!empty($nastavena['nazev_stranky']) ?
htmlspecialchars($nastavena['nazev_stranky']) :
'nazev_stranky #' . $nastavena['nazev_stranky']); ?>
</h4></td>
<td>
<div class="form-group">
<div class="col-md-6">
<label for="nadpis">Nadpis</label>
<input type="text" name="nastavena[nazev_stranky]" id="nazev_stranky"
value="<?php echo $nastavena['nazev_stranky']; ?>"
class="form-control" placeholder="Název stránky" />
</div>
</div></td>
<td>
</td>
</tr>
<tr>
<td><h4><?php echo (!empty($nastavena['nazev_administrace']) ?
htmlspecialchars($nastavena['nazev_administrace']) :
'administrace #' . $nastavena['nazev_administrace']); ?>
</h4></td>
<td>
<div class="form-group">
<div class="col-md-6">
<label for="nadpis">Nadpis</label>
<input type="text" name="nastavena[nazev_administrace]" id="nazev_administrace"
value="<?php echo $nastavena['nazev_administrace']; ?>"
class="form-control" placeholder="Název administrace" />
</div>
</div></td>
<td>
</td>
</tr>
<tr>
<td><h4><?php echo (!empty($nastavena['paticka']) ?
htmlspecialchars($nastavena['paticka']) :
'paticka #' . $nastavena['paticka']); ?>
</h4></td>
<td>
<div class="form-group">
<div class="col-md-6">
<label for="nadpis">Nadpis</label>
<input type="text" name="nastavena[paticka]" id="paticka"
value="<?php echo $nastavena['paticka']; ?>"
class="form-control" placeholder="Nadpis patičky" />
</div>
</div></td>
<td>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</td></tr>
</table> <button type="submit" class="btn btn-default">Uložit novinku</button>
<div class="col-md-5"
style="padding-left: 20px; border-left: 1px solid #eee;">
<div id="wmd-preview" class="wmd-panel wmd-preview"></div>
</div>
</div>
</form>
</td>
</tr>
</table>
<?php require_once('vkladane/zapati.php'); ?> |
||
| Amunak Profil |
#3 · Zasláno: 13. 5. 2018, 12:35:07
Nechci tě úplně odrazovat od tvého přístupu, ale když se snažíš o OOP měl bys možná nastudovat i jak se "běžně" (MVC) frameworky na stavění redakčních systémů a podobných věcí vytváří.
Když to hodně zjednoduším, hodně by ti pomohlo kdybys používal jen jeden vstupní soubor (typicky nějaký app.php nebo index.php) který přijímá všechny requesty, má v sobě require_once na nastavení a podobné "nutné" věci, a podle parametrů které dostane pak načte konkrétní stránku. Nemusel bys pak řešit že ti třeba nastavení nebo něco podobného někde chybí.
Součástí takového systému pak většinou bývá i nějaký autoloader na automatické načítání tříd (to se v OOP docela hodí) a nějaký správce servis (dependency injection) který ti umožní prakticky kdekoliv načíst funkcionalitu (třídu) kterou potřebuješ; tzn. když máš třeba třídu na generování titulků, prakticky kdekoliv ji můžeš získat a titulek nechat vygenerovat. |
||
|
Časová prodleva: 15 dní
|
|||
| Trickle Profil |
#4 · Zasláno: 28. 5. 2018, 16:37:54
Amunak:
Díky za reakci. Vyřešil jsem to i když asi ne programátorsky správně. Vytvořil jsem si novou třídu Nastavení v té získávám informace z db ohledně Názvu stránky, Názvu administrace a popisu v patičce. Odkud následně posílám do vzhledu indexu nebo administrace. No zatím je pro mě důležité že to funguje. |
||
| Kcko Profil |
#5 · Zasláno: 28. 5. 2018, 16:50:21
Trickle:
Čím víc budeš dělat složitější věci, tím víc Ti toho nebude fungovat. Tohle cos stvořil s OOP nemá moc společného (něco málo sis zabalil jakože do objektu), ale je to ošklivá špagetárna. Dej na doporučení a podívej se jak se to skutečně dělá viz [#3] Amunak |
||
|
Časová prodleva: 7 let
|
|||
0