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

Icon – Klasse (CMS)

Um im CMS auch die Icons umzustellen habe ich mir überlegt eine Icons-Klasse zu machen. Hierfür werden die derzeitigen Icons von /system/images/icons nach /system/images/famfamfam verschoben. Wer im Skin einzelne Icons überschreiben möchte kann dies im Verzeichnis icons des jeweiligen Skins tun.

Die Basis des ganzen bildet die Klasse /system/classes/icons.php:

<?PHP

class Icons{

public function getIcon($name){

if(file_exists(„../system/skins/“.SkinController::getCurrentSkinName().„/icons/“.strtolower($name).„.png“)){

$res = „/system/skins/“.SkinController::getCurrentSkinName().„/icons/“.strtolower($name).„.png“;

}

else{

$res = „/system/images/icons/“.getSetting(„global“,„global“,„iconset“).„/“.strtolower($name).„.png“;

}

return $res;

}

}

?>

Im /system/classes/template.php gibt es jetzt die neue Funktion replaceIcons. Diese fügt die Icon-Url in die jeweiligen Templates ein. Icons kann man über {ICON:Iconname} anfordern:

private function replaceIcons(){

preg_match_all(„/{ICON:(.+)}/“, $this->template, $matches, PREG_SET_ORDER);

foreach($matches as $match){

$translation = htmlentities(Icons::getIcon($match[1]));

$this->template = str_ireplace($match[0],$translation,$this->template);

}

}

public function getCode(){

foreach($this->loops as $key => $array){

$loop_template = implode(n,$array);

$this->template = str_ireplace(‚<!–LOOP(‚.strtoupper($key).‚)–>‘, $loop_template, $this->template);

}

$this->replaceLanguageTokens();

$this->replaceIcons();

return $this->template;

}

Das Template der Seiten wird nun bereits mit den Icons ausgestattet /system/templates/sites.html:

<h1>{LANG:PAGES}</h1>

{VAR:MESSAGE}

<p>

{VAR:NEWPAGELINK}

</p>

<form action=„{VAR:FORMURL}“ method=„POST“>

<p>

{LANG:PATH}:

{LOOP:PATH}

<a href=„{VAR:URL}“>{VAR:LABEL}</a>

{/LOOP:PATH}

<input name=„name“ style=„width:100px;“ />

<input name=„newFolder“ type=„submit“ value=„Neu“ />

</p>

</form>

<ul style=„list-style-type:none;“>

{LOOP:DIRS}

<li>

<img src=„{ICON:FOLDER}“ />

<a href=„{VAR:URL}“>{VAR:LABEL}</a>

</li>

{/LOOP:DIRS}

</ul>

{VAR:DELETEFOLDERLINK}

<table>

<thead>

<td><strong>{LANG:TITLE}</strong></td>

<td><strong>{LANG:ALIAS}</strong></td>

<td><strong>{LANG:ACTIONS}</strong></td>

</thead>

<tbody>

{LOOP:PAGES}

<tr>

<td>{VAR:TITLE}</td>

<td>{VAR:ALIAS}</td>

<td>

<a title=„{LANG:EDIT}“ href=„{VAR:EDITURL}“>

<img src=„{ICON:PAGE_EDIT}“ />

</a>

<a title=„{LANG:DELETE}“ href=„{VAR:DELETEURL}“>

<img src=„{ICON:CROSS}“ />

</a>

</td>

</tr>

{/LOOP:PAGES}

</tbody>

</table>

{VAR:NOPAGES}

Da wir die Icons nun nicht mehr als Variablen setzen müssen können diese aus der /admin/includes/sites.php entfernt werden:

<?PHP
  $template = new Template();
  $template->load("sites","..");
  $template->assign_var("FORMURL","/admin/index.php?page=sites&dir=".urlencode($_GET['dir']));
 
  $dir = $_GET['dir'];
 
  if($_POST['newFolder']){
    FileServer::createFolder("../content/articles/".$dir,$_POST['name']);
  }
  if($_GET['rmdir']){
    rmdir("../content/articles/".$_GET['rmdir']);
    $template->assign_var("MESSAGE","Verzeichnis ".$_GET['rmdir']." wurde gel&ouml;scht!");
  }
  else{
    $template->assign_var("MESSAGE","");
  }
  
  $verzeichnis = openDir("../content/articles/".$dir);
 
  if($dir){
    $template->assign_var("NEWPAGELINK","<a href="/admin/index.php?page=site-new&dir=".substr($dir,1)."">Neue Seite</a>");
  }
  else{
    $template->assign_var("NEWPAGELINK"," <a href="/admin/index.php?page=site-new">Neue Seite</a>");
  }
  $pre = "";
  foreach(split("/",$dir) as $cDir){
    $index = $template->add_loop_item("PATH");
    $path .= "/".$cDir;
    if($path == "/"){
      $template->assign_loop_var("PATH", $index, "URL","/admin/index.php?page=sites");
      $template->assign_loop_var("PATH", $index, "LABEL","/");
      $path = "";
    }
    else{
      $template->assign_loop_var("PATH", $index, "URL","/admin/index.php?page=sites&dir=".$path);
      $template->assign_loop_var("PATH", $index, "LABEL",$cDir);
    }
  }
  $subFolders = FileServer::getFolders("../content/articles/".$dir);
  if($subFolders){
    foreach($subFolders as $folder){
      $index = $template->add_loop_item("DIRS");
      $template->assign_loop_var("DIRS",$index,"URL","/admin/index.php?page=sites&dir=".$dir."/".$folder);
      $template->assign_loop_var("DIRS",$index,"LABEL",$folder);
    }
  }
  if(trim($_GET['dir']) != "" & trim($_GET['dir']) != "/"){
    $template->assign_var("DELETEFOLDERLINK","<a href="/admin/index.php?page=sites&rmdir=".$_GET['dir']."">Ordner l&ouml;schen</a>");
  }
  else{
    $template->assign_var("DELETEFOLDERLINK","");
  }
  $pages = Page::getPagesByDir($dir);
  if(substr($dir,0,1) == "/"){
    $shortdir = substr($dir,1);
  }
  else{
    $shortdir = $dir;
  }
  if($pages){
    foreach($pages as $page){
      $shortalias = substr($page->alias,strlen($shortdir));
      if(substr($shortalias,0,1) == "/"){
        $shortalias = substr($shortalias,1);
      }
      else{
        $shortalias = $shortalias;
      }
      if(!strpos($shortalias,"/")){
        $index = $template->add_loop_item("PAGES");
        $template->assign_loop_var("PAGES",$index,"TITLE",$page->title);
        $template->assign_loop_var("PAGES",$index,"ALIAS",$shortalias);
        $template->assign_loop_var("PAGES",$index,"EDITURL","index.php?page=site-edit&site=".$page->alias);
        $template->assign_loop_var("PAGES",$index,"DELETEURL","index.php?page=site-delete&site=".$page->alias);
      }
    }
   $template->assign_var("NOPAGES","");
  }
  else{
   $template->assign_var("NOPAGES","Es sind keine Seiten vorhanden.");
  }
  $template->output();
?>

Man kann das aktuelle Iconset selbstverständlich über die Settings einstellen. Dafür brauchen wir zur erst die neue Klasse system/classes/iconsetselector.php:

<?PHP
  class iconsetselector extends Control{
    public $style = '';
    
    public function getCode(){
      $res =  "<select name="".$this->name."" style="".$this->style."">";
      foreach(FileServer::getFolders("../system/images/icons") as $iconset){
        if($this->value == $iconset){
          $res .= "<option value="".htmlentities($iconset)."" selected="1">".htmlentities($iconset)."</option>";
        }
        else{
          $res .= "<option value="".htmlentities($iconset)."">".htmlentities($iconset)."</option>";
        }
      }
      $res .= "</select>";
      return $res;
    }
  }
?>

Dann kommt noch der Setting-Eintrag selbst:

INSERT INTO `cms_settings` VALUES (3, 'global', 'global', 'iconset', 'famfamfam', 1, 'Iconset', 'iconsetselector');

Dieser kommst auch in den /installer/installer.php:

mysql_query(„INSERT INTO `“.$this->params[3][‚praefix‘].„settings` VALUES (3, ‚global‘, ‚global‘, ‚iconset‘, ‚famfamfam‘, 1, ‚Iconset‘, ‚iconsetselector‘);“);

Kommentare

frank schrieb am 10.05.2010:

Folgender fehler wenn ich die install.php aufrufe Parse error: syntax error, unexpected T_STRING, expecting T_FUNCTION in /var/www/web0/html/eigenes_cms/installer/installer.php on line 310

Stefan Wienströer schrieb am 11.05.2010:

Hast Du den Quellcode aus Subversion, wenn nicht, kannst Du mir deine Klasse mal per Mail schicken (E-Mail Adresse ist im Impressum). Du kannst schonmal nachsehen ob dort die Anführungszeichen falsch sind, manchmal hat Wordpress damit Probleme und stellt andere Anführungszeichen da als eigentlich eingegeben worden sind.

Daniel schrieb am 12.05.2010:

Das sieht mit nach einer Installation aus die nicht auf der Rootebene stattfinden soll. Das läuft derzeit noch nicht mit CL.