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
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.
Trickle
Profil
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
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

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:

0