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:
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:
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:
{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>
<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ö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ö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:
Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.
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.
Über uns

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