Seitentyp Dashboard Teil 8 (CMS)
Heute machen wir mal was neues im CMS -> Kleiner Scherz, es geht mal wieder ums Dashboard. Und zwar werden wir heute die Widgets speichern. Im nächsten Artikel müssen wir noch einen Bug darin beheben und dann sind wir mit dem Seitentyp Dashboard erst mal durch 😉
Als erstes bekommt die Klasse /system/classes/widgetbase.phpdie Methode save, welches das Widget in die cms_dashbaords einträgt:
public function save($dashboard,$column,$row){ $dashboard = $GLOBALS['db']->EscapeString($dashboard); $row = $GLOBALS['db']->EscapeString($row); $column = $GLOBALS['db']->EscapeString($column); $path = $GLOBALS['db']->EscapeString($this->path); return $GLOBALS['db']->Execute("INSERT INTO {'dbprefix'}dashboards (id, col, row, path) VALUES ('".$dashboard."','".$column."','".$row."','".$path."')"); }
Dann gibt es noch die neue Funktion Delete der Klasse /system/classes/dashboard.php:
public function delete(){ $dashboard = $GLOBALS['db']->EscapeString($this->id); $GLOBALS['db']->Execute("DELETE FROM {'dbprefix'}dashboards WHERE id = '".$dashboard."'"); }
Zu guter letzt wurde die Methode getEditableCode der gleichen Klasse bearbeitet. Hier wird nun nachgesehen, ob der Post-Parameter Save verfügbar ist und dann wird das ganze gespeichert. Die ganze Funktionalität hat noch einen Bug, den ich noch beheben muss. Außerdem muss noch ein bisschen aufgeräumt werden:
<?PHP classDashboard extends Editor{ public $id = 1; public $cols; public $usedwidgets =null; function getHeader(){ return "<link href="/admin/style.css" rel="stylesheet" type="text/css" /> <link href="/admin/inettuts.css" rel="stylesheet" type="text/css" />"; } function __construct(){ $this->loadAllWidgets(); } private function loadAllWidgets(){ $this->cols[] = $this->loadWidgetsByColumn(0); $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 WHERE col = '".$columnId."' AND id = '".$this->id."' 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 echo "</div>"; } public function getEditableCode(){ $template = new Template(); $template->load("control_dashboardedit"); $template->assign_var("URL",$_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING']); if($_POST['save']){ $this->delete(); $widgets =WidgetController::getAllWidgets(); foreach($widgets as $widget){ if(isset($_POST[str_replace(".","_",$widget->path)])){ $widget->load(); $parts = split("|",$_POST[str_replace(".","_",$widget->path)]); if($parts[0] == "HIDDENWIDGETS"){ $widget->save($this->id,0,$parts[1]); } else if($parts[0] == "COLUMN1WIDGETS"){ $widget->save($this->id,1,$parts[1]); } else if($parts[0] == "COLUMN2WIDGETS"){ $widget->save($this->id,2,$parts[1]); } else if($parts[0] == "COLUMN3WIDGETS"){ $widget->save($this->id,3,$parts[1]); } } } $this->loadAllWidgets(); } $widgets =WidgetController::getAllWidgets(); foreach($widgets as $widget){ $widget->load(); } $i = 0; $pos = 0; foreach($this->cols as $col){ if($col && $i != 0){ foreach($col as $widget){ $index = $template->add_loop_item("COLUMN".$i."WIDGETS"); $this->addWidgetToEditable($template,"COLUMN".$i."WIDGETS",$widget,$index,$pos); $pos++; } } $i++; } $widgets = $this->getHiddenWidgets(); $i = 0; if($hiddenwidgets){ foreach($widgets as $widget){ if(!$this->cols[0] || !in_array($widget,$this->cols[0])){ $index = $template->add_loop_item("HIDDENWIDGETS"); $this->addWidgetToEditable($template,"HIDDENWIDGETS",$widget,$index,$i); $i++; } } } $i = 0; if($widgets){ foreach($widgets as $widget){ $addItem = !$this->usedwidgets; if(!$addItem) $addItem = !in_array($widget->path,$this->usedwidgets); if($addItem){ $index = $template->add_loop_item("DONTUSEDWIDGETS"); $this->addWidgetToEditable($template,"DONTUSEDWIDGETS",$widget,$index,$i); $i++; } } } return $template->getCode(); } private function addWidgetToEditable($template,$column,$widget,$index,$position){ $template->assign_loop_var($column,$index,"WIDGETNAME",htmlentities($widget->headline)); $template->assign_loop_var($column,$index,"WIDGETPATH",htmlentities(str_replace(".","_",$widget->path))); $template->assign_loop_var($column,$index,"PLACE",$column."|".$position); $this->usedwidgets[] = $widget->path; return $template; } 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->displayType = "dashboard"; $widget->display(); } } ?> </ul> <?PHP } function getHiddenWidgets(){ $widgets = $GLOBALS['db']->ReadRows("SELECT class,{'dbprefix'}dashboards.path FROM {'dbprefix'}dashboards INNER JOIN {'dbprefix'}widgets ON {'dbprefix'}dashboards.path = {'dbprefix'}widgets.path WHERE id = '".$GLOBALS['db']->EscapeString($this->id)."' AND col = '0'"); if($widgets){ foreach($widgets as $widget){ echo "<pre>"; print_r($widget); echo "</pre>"; $res[] =WidgetController::getWidget($widget); } } return $res; } public function delete(){ $dashboard = $GLOBALS['db']->EscapeString($this->id); $GLOBALS['db']->Execute("DELETE FROM {'dbprefix'}dashboards WHERE id = '".$dashboard."'"); } } ?>
Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.
Kommentare
Daniel schrieb am 10.06.2010:
Bin wieder zurück von der Dienstreise. Da habe ich aber ganze 4 Teile noch nicht gemacht. Ich habe mir die gestrige Version geladen und bekomme innerhalb des Adminmenüs haufenweise Fehlermeldungen (getHeader usw).
Stefan Wienströer schrieb am 11.06.2010:
Subversion zickt zur Zeit ein bisschen rum, im nächsten Beitrag ist der Seitentyp Dashboard (zumindest das bearbeiten) soweit fertig. Dann gibts nen neuen Einstiegspunkt.
Über uns
Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project