0251 / 590 837 15
info@a-coding-project.de
;

Seitentyp Dashboard Teil 1 (CMS)

Ab jetzt fangen wir im CMS an für den Admin-Bereich Seitentypen einzusetzen. Der Vorteil hierbei ist zum einen, dass man so den Admin-Bereich nach eigenen Wünschen verändern kann. Ein anderer Vorteil ist, dass es später möglich sein wird, zum Beispiel Moderatoren o.Ä. nur bestimmte Funktionen des Admin-Bereichs zugängig machen zu können.

Nicht vergessen: Morgen, 19.Mai 2010 um 20:30 ContentLion Live

Der Seitentyp Dashboard benötigt eine Erweiterung der abstrakten Klasse /system/classes/editor.php. Nun kann man im Seitentyp den HTML-Header erweitern:

<?PHP

abstract class Editor{

private $content = null;

public $page = null;

abstract function display();

abstract function getEditableCode();

abstract function save($newPage,$oldPage);

abstract function getHeader();

function displayEditable(){

echo $this->getEditableCode();

}

}

?>

Dies mus selbstverständlich in allen anderen Seitentypen eingesetzt werden. Der ContentLion-Kern hat bisher 2 davon, /system/classes/wysiwyg.php und /system/classes/login.php. Beide bekommen eine leere Funktion:

function getHeader(){

}

Der wichtigste Teil kommt jetzt: Das Dashboard selbst. Für den ersten Beitrag des Seitentyps habe ich erstmal die save Methode komplett leer geladden und die Funktion getEditableCode gibt nur den Speicher-Button aus. In der getHeader werden erst mal die JS-Dateien und den StyleSheet aus dem Admin-bereich geladen. /system/classes/dashboard.php:

<?PHP

class Dashboard extends Editor{

public $id = 1;

public $cols;

public $root = ;

function getHeader(){

return „<link href=/admin/style.css rel=stylesheet type=text/css />;

<link href=/admin/inettuts.css rel=stylesheet type=text/css /><style type=text/css>#content { height:500px }</style>“

}

function __construct(){

WidgetController::$root = $this->root;

$this->cols[] = $this->loadWidgetsByColumn(1);

$this->cols[] = $this->loadWidgetsByColumn(2);

$this->cols[] = $this->loadWidgetsByColumn(3);

}

function loadWidgetsByColumn($columnId){

$columnId = $GLOBALS[‚db‘]->EscapeString($columnId);

$rows = $GLOBALS[‚db‘]->ReadRows(„SELECT path FROM {‚dbprefix‘}dashboards.$columnId.„‚ AND id = ‚“.$this->id.„‚);

WHERE col = ‚“

ORDER BY row“

if($rows){

foreach($rows as $row){

$widgetData = WidgetController::getWidgetData($row->path);

$widget = WidgetController::getWidget($widgetData);

$widget->load();

$res[] = $widget;

}

}

return $res;

}

function display(){

echo „<div id=columns>“;

$this->displayColumn(0);

$this->displayColumn(1);

$this->displayColumn(2);

?>

<script type=“text/javascript“ src=“http://jqueryjs.googlecode.com/files/jquery-1.2.6.min.js“></script>

<script type=“text/javascript“ src=“/admin/jquery-ui-personalized-1.6rc2.min.js“></script>

<script type=“text/javascript“ src=“/admin/inettuts.js“></script>

<?PHP

}

public function getEditableCode(){

return „<input name=save type=submit value=&Auml;ndern onclick=form.action='“.$_SERVER[‚PHP_SELF‘].„?“.$_SERVER[‚QUERY_STRING‘].„‚ ; target=’_self‘ ; return true />“;

}

public function save($newPage,$oldPage){

}

function displayColumn($id){

?>

<ul id=“column<?PHP echo $id; ?>“ class=“column“>

<?PHP

if($this->cols[$id]){

foreach($this->cols[$id] as $widget){

$widget->display();

}

}

?>

</ul>

<?PHP

}

}

?>

Die getHeader Funktion muss selbstverständlich auch ausgeführt werden. Dies geht in der /system/sys.php in der Funktion includeHeader:

function includeHeader(){

global $currentpage;

echo „<title>“.$currentpage->title.

„</title>
<meta http-equiv=Content-Type content=text/html;
charset=iso-8859-1 />“;
$rows = $GLOBALS[‚db‘]->ReadRows(

„SELECT name, content
FROM {‚dbprefix‘}meta_global
UNION SELECT name, content
FROM {‚dbprefix‘}meta_local
WHERE page = ‚“.$currentpage->id.„‚“);
if($rows){
foreach($rows as $row){
echo „<meta name=.$row->name. content=.$row->content. />“;
}
}
echo $currentpage->editor->getHeader();
EventManager::raiseEvent(„header_included“,„.“,null);
}
Da die CSS-Dateien (die wir auch noch bearbeiten müssen) der Dashboard-Komponente unser „Design“ zerstören haben ich auch diese geändert. Grund war ein CSS-Reset. Diesen habe ich jetzt nur noch aufs wesentliche beschränkt /admin/inettuts.css:

#columns a {color:white;}

#columns ul{list-style:none; border:none;}

#columns h3{margin:0; padding:0;}

/* Colors */

Alle Urls in den Dateien in den Dateien /admin/inettuts.css und /admin/inettuts.js.css müssen ein /admin/ vorangestellt bekommen!

Zu guter letzt habe ich den derzeitigen Standardskin (der noch geändert wird!) etwas breiter gemacht, damit die Plugins besser rein passen /system/skins/default/style.css:

body{

background-color: #fff;

background-image: url(‚images/bg.jpg‘);

background-repeat:repeat-x;

}

#globalmenu{

list-style-type : none;

}

#globalmenu li{

display:inline;

}

#container{

text-align:left;

}

#content{

background-color:#fff;

padding:1%;

}

#localmenu{

float:left;

}

img{

border:0;

}

Derzeit kann das Dashboard noch nicht richtig angezeigt werden. Ich bekommes es bei mir lokal bereits zum Teil angezeigt, werde die vollständige Lösung aber erst vorstellen, wenn es richtig funktioniert. Was heute noch gemacht wird ist das einfügen des Seitentyps in die Combobox beim Seiten erstellen. Hierfür ist ein Eintrag in der cms_pagetypes erforderlich:

INSERT INTO `cms_pagetypes` VALUES (4, ‚dashboard‘, ‚Dashboard‘);

Das ganze kommt auch in die /installer/installer.php:

mysql_query(„INSERT INTO `“.$this->params[3][‚praefix‘].„pagetypes` VALUES (1, ‚wysiwyg‘, ‚Textseite‘);“);

mysql_query(„INSERT INTO `“.$this->params[3][‚praefix‘].„pagetypes` VALUES (2, ‚login‘, ‚Login‘);“);

mysql_query(„INSERT INTO `“.$this->params[3][‚praefix‘].„pagetypes` VALUES (3, ‚dashboard‘, ‚Dashboard‘);“);

So, jetzt muss ich noch was für morgen vorbereiten. Ich hoffe ihr seit alle zahlreich dabei. Für alle mit einer sehr lebenswichtigen Verhinderung gibt es auch ein YouTube Video vom Ganzen – Aber Live ist es noch besser 😉

Kommentare

Tobias schrieb am 19.05.2010:

leider nachtschicht bzgl der liveaktion -_- werd mir aber youtube reinhaun hope du ziehst es au duch wenn nur ein paar wenige dabei sind

Daniel schrieb am 19.05.2010:

Ich bin dabei :-) Ist doch logisch, als Fan der ersten CL-Stunde^^.

Tobias schrieb am 19.05.2010:

schau nur 10 min rein bis ich los muss -_-