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

Seitentyp Dashboard Teil 3 (CMS)

Unser Dashboard im CMS wird heute mal wieder erweitert. Und zwar soll es nun möglich sein, dass Dashboard im Backend zu bearbeiten. Dafür schaffen wir heute die Grundlage, die Umsetzung benötigt aber noch 2-3 weitere Artikel (ich hab mir was schönes ausgedacht).

Man soll die Widget(namen) per Drag and Drop hinzufügen und in die einzelnen Spalten verteilen. Dabei gibt es neben den Spalten noch Nicht-Verwendete-Widgets und versteckte Widgets. Versteckte Widgets kann der User später einblenden lassen, aber als Default sind diese ausgeblendet.

Für das Bearbeiten werden wir auf jQuery setzen. Das Layout wird in dem neuen Template /system/templates/controls/dashboardedit.html gespeichert:

<table>
  <tr>
    <td>
      <h3>Nicht benutzt</h3>
      <select name="allwidgets" size="5" style="width:200px;">
        {LOOP:DONTUSEDWIDGETS}
          <option>{VAR:WIDGETNAME}</option>
        {/LOOP:DONTUSEDWIDGETS}
      </select>
    </td>
    <td>
      <h3>Versteckt</h3>
      <select name="hiddenwidgets" size="5" style="width:200px;">
        {LOOP:HIDDENWIDGETS}
          <option>{VAR:WIDGETNAME}</option>
        {/LOOP:HIDDENWIDGETS}
      </select>
    </td>
  </tr>
  <tr>
    <td>
      <h3>Spalte 1</h3>
      <select name="column1widgets" size="5" style="width:200px;">
      </select>
    </td>
    <td>
      <h3>Spalte 2</h3>
      <select name="column2widgets" size="5" style="width:200px;">
      </select>
    </td>
    <td>
      <h3>Spalte 3</h3>
      <select name="column3widgets" size="5" style="width:200px;">
      </select>
    </td>
  </tr>
</table>
<input name="save" type="submit" value="{LANG:CHANGE}" onclick="form.action='{VAR:URL}' ; target='_self' ; return true" />

Wie ihr seht haben die Spalten noch keine Schleifen. Das Problem bei der Sache ist, dass es eine Unterschiedliche Anzahl von Spalten gibt und das verschachtelte Schleifn in der Template-Engine noch nicht unterstützt werden – Das müssen wir noch einbauen.

Die Funktion getAllWidgets der Klasse /system/classes/widgetcontroller.php funktioniert leider noch nicht richtig. Da wir diese gleich brauchen muss das geändert werden. Es wurden dort einfach nur self:: vergessen:

    function getAllWidgets(){
      $widgetData = self::getAllWidgetData();
      if($widgetData){
        foreach($widgetData as $widget){
          $res[] = self::getWidget($widget);
        }
      }
      return $res;
    }

Zu guter letzt müssen noch die Variablen über die Klasse /system/classes/dashboard.php gefüllt werden. Die Widgets werden aaber testweise falsch zu geordnet:

    public function getEditableCode(){
      $template = new Template();
      $template->load("control_dashboardedit");
      $template->assign_var("URL",$_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING']);
      $widgets = WidgetController::getAllWidgets();
      foreach($widgets as $widget){
        $widget->load();
      }
      foreach($widgets as $widget){
        $index = $template->add_loop_item("DONTUSEDWIDGETS");
        $template->assign_loop_var("DONTUSEDWIDGETS",$index,"WIDGETNAME",$widget->headline);
      }
      return $template->getCode();
    }

Bald wird es mal wieder einen Einstiegspunkt geben, ich denke so im nächsten oder übernächsten Artikel.