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=„Ä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.
#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:
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 😉
Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.
Kommentare
Tobias schrieb am 19.05.2010:
leider nachtschicht bzgl der liveaktion -_- werd mir aber youtube reinhaun hope du ziehst es au durch 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 -_-
Über uns

Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project