SteviesWebsite

Admin-Bereich: Neues Menü + Dashboard (CMS)

Code & Blog Logo

Code & Blog Logo

Der Admin-Bereich unseres CMS soll heute ein bisschen optimiert werden. Zum einen werden wir das Admin-Menü in die Datenbank verschieben und zum anderen fangen wir heute mit dem Dashboard an.

Fangen wir mal mit dem Admin-Menü an. Hier legen wir das Menü in der Menü-Tabelle an. Ich habe dies über den Admin-Bereich gemacht, so dasss ich hier kein SQL-Statement poste. Also: Das Menü heißt {admin} und die Einträge der Links könnt ihr aus der /admin/includes/menue.php übernehmen.

Da wir das Admin-Menü über den Namen ansprechen brauchen wir in unserer CMS-Klasse noch eine Funktionen zum herausbekommen der Id über den Namen. Also die Datei /system/classes/menu.php rausgesucht und folgende Funktion hinzugefügt:

  function getIdByName($name){
    global $dbpraefix;
    $res = false;
    $name = mysql_real_escape_string(strtolower(trim($name)));
    $mySqlRes = mysql_query("SELECT id FROM ".$dbpraefix."menu_names WHERE lower(trim(name)) = '".$name."' LIMIT 0,1");
    if($row = mysql_fetch_row($mySqlRes)){
      $res = $row[0];
    }
    return $res;
  }

Das ganze muss natürlich auch im Admin-Bereich angezeigt werden. Dafür müssen wir die Datei /admin/index.php bearbeiten. Hier wird der Include-Bereich so abgeändert:

if(isset($_SESSION['username'])){
   Menu::display(Menu::getIdByName("{admin}"),
                 "<ul id=\"adminmenue\">",
                 "</ul>",
                 " <li>",
                 "</li>",
                 "adminmenue");

Nun brauchen wir die /admin/includes/menue.php nicht mehr – Also wird sie gelöscht.

Kommen wir nun zum Dashboard. Da das schön mit AJAX sein soll, können wir nicht alles selbst entwickeln. Dafür habe ich hier ein schönes Tutorial mit Sourcecode gefunden. Das habe ich noch ein bisschen abgeändert, so dass es auch auf deutsch ist und in unser CMS passt.

Fangen wir mal damit an, dass wir eine Datei namens dashboard.php erstellen. Sie liegt im Ordner /admin/includes/dashboard.php. Darin kommt erstmal nur der Beispieltext von deren Tutorial, aus technischen gründen wieder ohne Syntax-Highlighting:

<div id="columns">

        <ul id="column1" class="column">
            <li class="widget color-green">
                <div class="widget-head">
                    <h3>Introduction Widget</h3>
                </div>
                <div class="widget-content">
                    <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam magna sem, fringilla in, commodo a, rutrum ut, massa. Donec id nibh eu dui auctor tempor. Morbi laoreet eleifend dolor. Suspendisse pede odio, accumsan vitae, auctor non, suscipit at, ipsum. Cras varius sapien vel lectus.</p>
                </div>
            </li>
            <li class="widget color-red">
                <div class="widget-head">
                    <h3>Widget title</h3>
                </div>
                <div class="widget-content">
                    <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam magna sem, fringilla in, commodo a, rutrum ut, massa. Donec id nibh eu dui auctor tempor. Morbi laoreet eleifend dolor. Suspendisse pede odio, accumsan vitae, auctor non, suscipit at, ipsum. Cras varius sapien vel lectus.</p>
                </div>
            </li>
        </ul>

        <ul id="column2" class="column">
            <li class="widget color-blue">
                <div class="widget-head">
                    <h3>Widget title</h3>
                </div>
                <div class="widget-content">
                    <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam magna sem, fringilla in, commodo a, rutrum ut, massa. Donec id nibh eu dui auctor tempor. Morbi laoreet eleifend dolor. Suspendisse pede odio, accumsan vitae, auctor non, suscipit at, ipsum. Cras varius sapien vel lectus.</p>
                </div>
            </li>
            <li class="widget color-yellow">
                <div class="widget-head">
                    <h3>Widget title</h3>
                </div>
                <div class="widget-content">
                    <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam magna sem, fringilla in, commodo a, rutrum ut, massa. Donec id nibh eu dui auctor tempor. Morbi laoreet eleifend dolor. Suspendisse pede odio, accumsan vitae, auctor non, suscipit at, ipsum. Cras varius sapien vel lectus.</p>
                </div>
            </li>
        </ul>

        <ul id="column3" class="column">
            <li class="widget color-orange">
                <div class="widget-head">
                    <h3>Widget title</h3>
                </div>
                <div class="widget-content">
                    <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam magna sem, fringilla in, commodo a, rutrum ut, massa. Donec id nibh eu dui auctor tempor. Morbi laoreet eleifend dolor. Suspendisse pede odio, accumsan vitae, auctor non, suscipit at, ipsum. Cras varius sapien vel lectus.</p>
                </div>
            </li>
            <li class="widget color-white">
                <div class="widget-head">
                    <h3>Widget title</h3>
                </div>
                <div class="widget-content">
                    <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam magna sem, fringilla in, commodo a, rutrum ut, massa. Donec id nibh eu dui auctor tempor. Morbi laoreet eleifend dolor. Suspendisse pede odio, accumsan vitae, auctor non, suscipit at, ipsum. Cras varius sapien vel lectus.</p>
                </div>
            </li>

        </ul>

    </div>

    <script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.2.6.min.js"></script>
    <script type="text/javascript" src="jquery-ui-personalized-1.6rc2.min.js"></script>
    <script type="text/javascript" src="inettuts.js"></script>

Nun müssen wir noch einen Stylesheet in die /admin/index.php einbinden und die dashboard-Datei als default importieren. Wir werden später alle Stylesheets im Adminbereich zusammenführen, aber jetzt noch nicht. So sieht die neue komplette /admin/index.php aus:

<?PHP
  session_start();
  function __autoload($class_name){
      require_once "../system/classes/".strtolower($class_name).".php";
  }
  include("../system/dbconnect.php");
  include("../system/settings.php");
  include("../system/filterfilename.php");
  include("../system/sys.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
  <head>
    <title>Admin-Bereich</title>
    <link href="/admin/inettuts.css" rel="stylesheet" type="text/css" />
    <style type="text/css">
      body{
        margin:0;
        padding:0;
        font-family:Tahoma, sans-serif;;
      }
      label{
        display:block;
      }
      #adminmenue{
        list-style-type : none;
        margin:0;
        margin-bottom:40px;
        padding:0;
        background-color:#333;
        width:100%;
        height:20px;
      }
      #adminmenue a{
        color:#fff;
      }
      #adminmenue li{
        display:inline;
      }
      thead{
        background-color:#ddd;
        color:#333;
      }
      fieldset{
        width:50%;
      }
      fieldset input{
        width:95%;
      }
      .dbtable{
        font-size:14px;
      }
      .dbtable thead{
        background-color:#333;
        color:#fff;
      }
      .dbtable tbody tr:hover{
        background-color:#ddd;
      }
      img{
        border:0;
      }
    </style>
  </head>
  <body>
      <?PHP
        $user = new User();
        if($_POST['user']){
          if($user->login($_POST['user'],$_POST['password'])){
            $_SESSION['username'] = $_POST['user'];
          }
          else{
            echo "<p>Login Fehlgeschlagen!</p>";
          }
        }
    if(isset($_SESSION['username'])){
       Menu::display(Menu::getIdByName("{admin}"),
                     "<ul id=\"adminmenue\">",
                        "</ul>",
                     " <li>",
                     "</li>",
                     "adminmenue");
      if(!$_GET['page']){
        $_GET['page'] = 'dashboard';
      }
      include(filterfilename("includes/".$_GET['page']));
    }
    else{
          include('includes/login.php');
    }
      ?>
  </body>
</html>

Nun brauchen wir noch eine Reihe von Buttons. Diese werden unter /admin/img/buttons.gif zu speichern. Nehmt einfach meine:

http://cms.stevieswebsite.de/admin/img/buttons.gif

Fehlen noch die JS und CSS-Dateien. Sie liegen im Hauptverzeichnis des Admin-Bereichs. Hierbei werd ich nicht so viel erklären, weil es einfach zu lang für einen Artikel ist. Die Dateien gibt es hier:

http://cms.stevieswebsite.de/admin/inettuts.css

http://cms.stevieswebsite.de/admin/inettuts.js

http://cms.stevieswebsite.de/admin/inettuts.js.css

http://cms.stevieswebsite.de/admin/jquery-ui-personalized-1.6rc2.min.js

Demnächst werden wir noch die Widgets automatisch ins Dashboard laden. Aber für heute ist erstmal hier das Ende.

RSS Feed für Kommentare zu diesem Artikel. TrackBack URL

11 Kommentare »

  1. Das CSS muss noch bearbeitet werden – Schaut euch nun mal die Dateiauflistung an^^

    Kommentar von Stefan Wienströer — 15. November 2009 @ 15:45

  2. Wo schreibe ich die Links hin in der Tabelle gabe ich nur die Felder id und name?

    Kommentar von Daniel — 15. November 2009 @ 16:54

  3. Kannste direkt im Admin-Bereich unter Menüs ein neues Menü namens {admin} anlegen und eiträge einfügen. Man kann es in der DB auch in cms_menus und cms_menu_entries oder so Ähnlich machen.

    Kommentar von Stefan Wienströer — 15. November 2009 @ 17:25

  4. Ich stehe auf dem schlauch. Zur Zeit habe ich kein Adminmenü mehr, da jetzt ja das dashboard geöffnet wird.
    Laut Quelltext liest er ja die cms_menu_names aus. Soll ich in der tabelle cms_menu für jeden Link als menuID die id 2 vergeben da ich ja unter cms_Menu_names dem Menu admin die 2 gegeben habe.

    Kommentar von Daniel — 15. November 2009 @ 17:42

  5. Ja

    Kommentar von Stefan Wienströer — 15. November 2009 @ 19:51

  6. Yeah ein neuer Artikel ich freu mich!! :-)
    Heute abend direkt weiterbasteln *freu

    Kommentar von Renner — 16. November 2009 @ 10:21

  7. irgendwie is an mir was vorbei .. wo sind meine menü punkte hin? ^^

    Kommentar von Renner — 16. November 2009 @ 13:52

  8. So ging es mir gestern auch. Gehe in den phpmyadmin. Füge in der Tabelle cms_menu_names einen weiteren Eintrag mit der ID 2 und als name
    {admin}(mit geschweiften Klammern) ein. Dann füge in der Tabelle
    cms_menu soviele neue Eintrage hinzu wie in der Datei menue.php Menüpunkte vorhanden sind aber als menuID eine 2 damit das System weiß welcher Link im CMS im adminbereich erscheinen soll.

    Kommentar von Daniel — 16. November 2009 @ 17:09

  9. ok werds gleich mal testen! danke schonmal !!

    Kommentar von Renner — 16. November 2009 @ 18:04

  10. hmm … wie trag ich die links ein ??? der zeigt mir ein fehler an wen ich die in der cms_menue eintrage in der phpmyadmin seite

    bsp: id 5, menueID 5, title Menues, href index.php?page=sites

    was ist falsch ????

    Kommentar von Burak — 1. Dezember 2009 @ 13:46

  11. Die Tabelle heißt cms_menu^^ Hab mal meine Inserts extraiert (hätte ich eigl. schon viel ehr machen sollen):

    INSERT INTO `cms_menu` VALUES (1, 4, ‘Dashboard’, ‘/admin/’);
    INSERT INTO `cms_menu` VALUES (2, 4, ‘Seiten’, ‘/admin/index.php?page=sites’);
    INSERT INTO `cms_menu` VALUES (3, 4, ‘Menüs’, ‘/admin/index.php?page=menues’);
    INSERT INTO `cms_menu` VALUES (4, 4, ‘Dateien’, ‘/admin/index.php?page=files’);
    INSERT INTO `cms_menu` VALUES (5, 4, ‘Plugins’, ‘/admin/index.php?page=plugins’);
    INSERT INTO `cms_menu` VALUES (6, 4, ‘DB’, ‘/admin/index.php?page=db’);
    INSERT INTO `cms_menu` VALUES (7, 4, ‘Einstellungen’, ‘/admin/index.php?page=settings’);
    INSERT INTO `cms_menu` VALUES (8, 4, ‘Statistik’, ‘/admin/index.php?page=stats’);
    INSERT INTO `cms_menu` VALUES (9, 4, ‘Logout’, ‘/admin/index.php?page=logout’);

    Kommentar von Stefan Wienströer — 1. Dezember 2009 @ 18:36

Hinterlasse einen Kommentar

Trackbacks/Pingbacks

LiveEditor - Kostenloser WebEditorDer kostenlose WebEditor hilft dir dabei, deine Website besser zu entwickeln. Mit dem Syntax-Highlighting fällt geht alles viel schneller. Download jetzt! [mehr...]

Webservice erstellenWebservices sind oft die Schnittstelle zwischen Server und Client. Wie man mit PHP einen WebService erstellt, lernt ihr in diesem Tutoial. [mehr...]

WebanalyseFür die Verbesserung Deiner Seite solltest Du wissen, wie sich die Besucher verhalten. Diese Artikel zeigen Dir wie man das am geschicktesten macht. [mehr...]

Blog Tutorials... helfen dir deinen Blog zu verbessern. Nebenbei gibt es noch nützliche Blog-Tools. [mehr...]

Diskussion starten
  • RSS
  • Blogverzeichnis - Blog Verzeichnis bloggerei.de
Ich biete mich als Lektor für deine Blog-Artikel an.
Sende mir einfach deinen Artikel und ich korrigiere ihn.
© SteviesWebsite.de - Kontakt | Impressum